Загрузка данных
<!DOCTYPE html>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page session="true" language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html lang="ru">
<head>
<jsp:include page="head.jsp"/>
<style>
th {
text-align: center;
}
.filter-input {
width: 100%;
}
#deleteFnsRequestModal .modal-body p {
font-size: 16px;
}
#sendFnsConfirmModal .modal-body p {
font-size: 16px;
}
</style>
</head>
<body>
<script type="text/javascript" src="<c:url value='/js/latest/queryAction.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/latest/queryTable.js'/>"></script>
<script type="text/javascript">
let Search_All = false;
let sr_number = null;
let fns_journal = null;
$(document).ready(function() {
$("#filter_activity_type").select2({
placeholder: "Вид деятельности",
allowClear: true,
minimumResultsForSearch: Infinity
});
$("#filter_response_received").select2({
placeholder: "Ответ получен/не получен",
allowClear: true,
minimumResultsForSearch: Infinity,
width: "100%"
});
$("#filter_is_sent_to_fns").select2({
placeholder: "Отправлено/не отправлено в ФНС",
allowClear: true,
minimumResultsForSearch: Infinity,
width: "100%"
});
clearFilters();
});
function clearFilters() {
$("#filter_insuranceNumber").val('');
$("#filter_activity_type").val(null).trigger('change');
$("#filter_response_received").val('').trigger('change');
$("#filter_is_sent_to_fns").val('').trigger('change');
$("#filter_lastName").val('');
$("#filter_firstName").val('');
$("#filter_middleName").val('');
$("#filter_contractNumber").val('');
$('#filter_startDate').val('');
$('#filter_endDate').val('');
$('#filter_Number').val('');
}
function getSelectedFnsRows() {
var result = null;
$.ajax({
type: "GET",
url: "queryModel?queryModelCode=uw93zB4F",
async: false,
data: {
query_table_code: 'VxvzLyks'
},
dataType: "json",
success: function(data) {
result = data;
}
});
return result;
}
function updateSelectedRowsState() {
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list ? modelData.list : [];
const hasSelection = rows.length > 0;
const singleSelection = rows.length === 1;
// Эти кнопки работают с одной или несколькими строками
$('#downloadSelectedFiles').prop('disabled', !hasSelection);
$('#sendToFnsBtn').prop('disabled', !hasSelection);
// Редактирование — только одной строки
$('#openModalBtn').prop('disabled', !singleSelection);
if (singleSelection) {
sr_number = rows[0].request_number;
} else {
sr_number = null;
}
}
$(function() {
$("#downloadSelectedFiles").click(function() {
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list ? modelData.list : [];
if (!rows.length) {
return;
}
rows.forEach(function(row, index) {
if (!row.model_file_id) {
return;
}
setTimeout(function() {
const link = document.createElement('a');
link.href =
'modelFileToVerification/modelFileToVerification/downloadSource?id='
+ encodeURIComponent(row.model_file_id);
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}, index * 300);
});
});
fns_journal = new QueryTable("VxvzLyks", {
initComplete: function(queryAction) {
// fns_journal.addActionButton("AddButtonMain", "Отправить в ФНС", uploadRegister, "btn-primary", true);
},
onRowSelect: function(data, index) {
//updateSelectedRowsState();
},
onRowDeselect: function(data, index) {
//updateSelectedRowsState();
} ,
drawCallback: function(data, index) {
updateSelectedRowsState();
updateDeleteFnsRequestState();
}
}, function() {
return {
filterInsuranceNumber: $("#filter_insuranceNumber").val(),
flk_id: getQueryParam('flk_id'),
id: getQueryParam('id'),
startDate: $("#filter_startDate").val(),
endDate: $("#filter_endDate").val(),
Number: $("#filter_Number").val(),
filterActivityType: $("#filter_activity_type").val(),
filterLastName: $("#filter_lastName").val(),
filterFirstName: $("#filter_firstName").val(),
filterMiddleName: $("#filter_middleName").val(),
filterContractNumber: $("#filter_contractNumber").val(),
filterResponseReceived: $("#filter_response_received").val(),
filterIsSentToFns: $("#filter_is_sent_to_fns").val(),
filterShowList: Search_All
};
},
{ multiselect: true });
$("#filter_search_top").click(() => {
const hasFilters = $('#filter_startDate').val().trim() ||
$('#filter_endDate').val().trim() ||
$('#filter_Number').val().trim() ||
$("#filter_activity_type").val() ||
$("#filter_lastName").val() ||
$("#filter_firstName").val() ||
$("#filter_middleName").val() ||
$("#filter_contractNumber").val() ||
$("#filter_response_received").val() ||
$("#filter_is_sent_to_fns").val() ||
$("#filter_insuranceNumber").val();
if (!hasFilters) {
return;
}
Search_All = true;
fns_journal.reload();
});
$('#filter_clean_top').click(() => {
Search_All = false;
clearFilters();
sr_number = null;
fns_journal.reload();
});//
function uploadRegister() {
const validationResult = [];
let sentCount = 0;
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list ? modelData.list : [];
if (!rows.length) {
return;
}
rows.forEach(function(appData) {
const requestLabel = 'Запрос № ' + appData.request_number;
let uploadSucceeded = false;
function addMessage(message) {
validationResult.push({
messageType: 'info',
message: requestLabel + ': ' + message
});
}
if (!appData.model_file_id) {
addMessage('отсутствует файл запроса.');
return;
}
// Сначала выгружаем файл.
$.ajax({
url: "queryAction/action",
type: "POST",
async: false,
data: {
viewCode: '7K6FKG8e',
queryActionCode: 'DaizGytc',
record_id: appData.model_file_id,
unload_mode: 1
},
dataType: "json",
success: function(response) {
if (!response || response.result !== true) {
if (
response
&& response.messages
&& response.messages.length
) {
validationResult.push(...response.messages);
} else {
addMessage('операция выгрузки не подтверждена.');
}
return;
}
if (response.data === 0 || response.data === '0') {
uploadSucceeded = true;
} else if (
response.data === 1
|| response.data === '1'
) {
addMessage(
'файл с таким именем уже существует во внешнем хранилище. Новая отправка не подтверждена.'
);
} else {
addMessage(
'выгрузка не подтверждена. Код результата: '
+ response.data
);
}
},
error: function() {
addMessage(
'не удалось получить результат выгрузки. Проверьте состояние запроса перед повторной отправкой.'
);
}
});
if (!uploadSucceeded) {
return;
}
// После успешной выгрузки сохраняем статус.
$.ajax({
url: "queryAction/action",
type: "POST",
async: false,
data: {
viewCode: '7K6FKG8e',
queryActionCode: 'sr8LySCh',
model_file_to_verification_id: appData.model_file_id
},
dataType: "json",
success: function(response) {
if (response && response.result === true) {
sentCount++;
return;
}
addMessage(
'файл выгружен, но сохранение статуса «Отправлено в ФНС» не подтверждено.'
);
if (
response
&& response.messages
&& response.messages.length
) {
validationResult.push(...response.messages);
}
},
error: function() {
addMessage(
'файл выгружен, но не удалось получить результат сохранения статуса. Обновите журнал перед повторными действиями.'
);
}
});
});
if (sentCount > 0) {
validationResult.unshift({
messageType: 'info',
message: 'Отправлено в ФНС. Количество запросов: '
+ sentCount + '.'
});
}
fns_journal.reload();
showMessages(validationResult);
}
$("#sendToFnsBtn").on("click", function() {
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list ? modelData.list : [];
if (!rows.length) {
return;
}
$('#sendFnsConfirmDetails').text(
'Количество выбранных запросов: ' + rows.length
);
$('#sendFnsConfirmModal').modal('show');
});
$("#confirmSendFnsBtn").on("click", function() {
const button = $(this);
if (button.prop('disabled')) {
return;
}
button.prop('disabled', true);
$('#sendFnsConfirmModal').modal('hide');
try {
uploadRegister();
} finally {
button.prop('disabled', false);
}
});
function editNumber() {
const validationResult = [];
const message_level = 'info';
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list ? modelData.list : [];
if (rows.length !== 1) {
return;
}
const appData = rows[0];
if (!appData.smevRegisterId) {
validationResult.push({
messageType: message_level,
message: 'Отсутствует ИД Реестра'
});
showMessages(validationResult);
return;
}
const newNumber = $('#modalInput').val();
$.ajax({
url: "queryAction/action",
type: "POST",
async: false,
data: {
viewCode: '7K6FKG8e',
queryActionCode: '4eEKszab',
smevRegisterId: appData.smevRegisterId,
new_number: newNumber,
model_file_id: appData.model_file_id
},
dataType: "json",
// success: response => handleUploadResponse(response, validationResult)
success: function(response){
if(response.result) {
return
}
showMessages(response.messages)
}
});
$('#editModal').modal('hide');
showMessages(validationResult);
fns_journal.reload();
$('#openModalBtn').prop('disabled', true);
}
$('#editForm').on('submit', function (e) {
console.log('ВВВ')
e.preventDefault();
editNumber();
});
function handleUploadResponse(response, validationResult) {
if (response.data === 0) {
validationResult.push({ messageType: message_level, message: 'Файл выгружен.' });
} else if (response.data === 1) {
validationResult.push({ messageType: message_level, message: 'Файл с таким именем уже существует во внешнем хранилище.' });
} else {
validationResult.push({ messageType: message_level, message: `Ошибка: код процесса выгрузки ${response.data}` });
}
}
function updateDeleteFnsRequestState() {
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list ? modelData.list : [];
let canDelete = false;
if (rows.length === 1) {
const row = rows[0];
// Разрешаем удаление только при явно неотправленном статусе.
const notSent = row.is_sent_to_fns === false
|| row.is_sent_to_fns === 'false';
canDelete = notSent && !!row.model_file_id;
}
$('#deleteFnsRequestBtn').prop('disabled', !canDelete);
}
}); //
function getQueryParam(key) {
const url = new URL(window.location.href);
return url.searchParams.get(key);
}
$(document).ready(function(){
$('#openModalBtn').on('click', function(){
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list ? modelData.list : [];
if (rows.length !== 1) {
return;
}
const appData = rows[0];
if (appData.is_sent_to_fns === 'true' || appData.is_sent_to_fns === true) {
showWarningMessage('Редактирование невозможно: запрос уже отправлен в ФНС');
return;
}
$('#modalInput').val(appData.request_number);
$('#editModal').modal('show');
});
let pendingDeleteFileId = null;
let deleteInProgress = false;
function isDeletionAllowed(row) {
return row
&& !!row.model_file_id
&& (
row.is_sent_to_fns === false
|| row.is_sent_to_fns === 'false'
);
}
$('#deleteFnsRequestBtn').on('click', function() {
if (deleteInProgress) {
return;
}
pendingDeleteFileId = null;
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list
? modelData.list
: [];
if (rows.length !== 1) {
updateDeleteFnsRequestState();
return;
}
const row = rows[0];
if (!isDeletionAllowed(row)) {
showWarningMessage(
'Удаление недоступно: запрос должен быть не отправлен в ФНС и иметь файл.'
);
updateDeleteFnsRequestState();
return;
}
pendingDeleteFileId = row.model_file_id;
$('#deleteFnsRequestDetails').text(
'Запрос № ' + row.request_number
);
$('#deleteFnsRequestModal').modal('show');
});
$('#confirmDeleteFnsRequestBtn').on('click', function() {
if (deleteInProgress || !pendingDeleteFileId) {
return;
}
// Повторно проверяем выбранную строку перед вызовом.
const modelData = getSelectedFnsRows();
const rows = modelData && modelData.list
? modelData.list
: [];
if (
rows.length !== 1
|| String(rows[0].model_file_id)
!== String(pendingDeleteFileId)
|| !isDeletionAllowed(rows[0])
) {
$('#deleteFnsRequestModal').modal('hide');
updateDeleteFnsRequestState();
showWarningMessage(
'Выбор или статус запроса изменился. Выберите запрос заново.'
);
return;
}
const fileId = pendingDeleteFileId;
deleteInProgress = true;
$('#confirmDeleteFnsRequestBtn, #cancelDeleteFnsRequestBtn')
.prop('disabled', true);
$.ajax({
url: 'queryAction/action',
type: 'POST',
dataType: 'json',
data: {
viewCode: '7K6FKG8e',
queryActionCode: 'FCbnmhY1',
model_file_id: fileId
},
success: function(response) {
if (response && response.result === true) {
deleteInProgress = false;
pendingDeleteFileId = null;
$('#deleteFnsRequestModal').modal('hide');
$('#deleteFnsRequestBtn').prop('disabled', true);
fns_journal.reload();
showMessages([{
messageType: 'info',
message: 'Запрос удалён'
}]);
return;
}
if (
response
&& response.messages
&& response.messages.length
) {
showMessages(response.messages);
} else {
showWarningMessage(
'Удаление не подтверждено. Обновите журнал и проверьте запрос.'
);
}
},
error: function(xhr) {
const response = xhr.responseJSON;
if (
response
&& response.messages
&& response.messages.length
) {
showMessages(response.messages);
} else {
showWarningMessage(
'Не удалось получить результат удаления. Обновите журнал перед повторной попыткой.'
);
}
},
complete: function() {
deleteInProgress = false;
$('#confirmDeleteFnsRequestBtn, #cancelDeleteFnsRequestBtn')
.prop('disabled', false);
}
});
});
$('#deleteFnsRequestModal').on('hide.bs.modal', function(e) {
if (deleteInProgress) {
e.preventDefault();
}
});
$('#deleteFnsRequestModal').on('hidden.bs.modal', function() {
pendingDeleteFileId = null;
});
});
</script>
<jsp:include page="header.jsp"/>
<jsp:include page="navbar.jsp"/>
<div class="container" id="mainContainer">
<div class="page-header">
<h1>Журнал запросов в ФНС</h1>
</div>
<div class="container-fluid">
<div class="row row-main">
<jsp:include page="sidebar.jsp"/>
<div class="col-sm-10">
<tags:breadcrumbs path="https://portal.futurenpf.ru/knowledgebase/category/31164/"/>
<form class="form-horizontal" local-storage id="searchContractFilter"
style="background-color: #d4edda; margin: -21px -15px 0px; padding: 20px 20px 10px;">
<div class="row">
<div class="col-sm-2">
<input type="text" class="form-control date-picker-on filter-input"
id="filter_startDate" name="filter_startDate"
placeholder="Дата запроса с.."/>
</div>
<div class="col-sm-2">
<input type="text" class="form-control date-picker-on filter-input"
id="filter_endDate" name="filter_endDate"
placeholder="Дата запроса по.."/>
</div>
<div class="col-sm-2">
<input type="text" class="form-control filter-input"
maxlength="20"
id="filter_Number" name="filter_Number"
placeholder="Номер запроса"/>
</div>
<div class="col-sm-2">
<input type="text" class="form-control filter-input"
maxlength="20"
id="filter_contractNumber" name="filter_contractNumber"
placeholder="Номер договора"/>
</div>
</div>
<div class="row" style="margin-top: 15px;">
<div class="col-sm-2">
<input type="text"
class="text-uppercase text-en-to-ru text-only-ru form-control filter-input"
maxlength="50"
id="filter_insuranceNumber"
name="filter_insuranceNumber"
data-mask="999-999-999 99"
placeholder="СНИЛС"/>
</div>
<div class="col-sm-2">
<input type="text"
class="text-uppercase text-en-to-ru text-only-ru form-control filter-input"
maxlength="50"
id="filter_lastName"
name="filter_lastName"
placeholder="Фамилия"/>
</div>
<div class="col-sm-2">
<input type="text"
class="text-uppercase text-en-to-ru text-only-ru form-control filter-input"
maxlength="50"
id="filter_firstName"
name="filter_firstName"
placeholder="Имя"/>
</div>
<div class="col-sm-2">
<input type="text"
class="text-uppercase text-en-to-ru text-only-ru form-control filter-input"
maxlength="50"
id="filter_middleName"
name="filter_middleName"
placeholder="Отчество"/>
</div>
</div>
<div class="row" style="margin-top: 15px;">
<div class="col-sm-2">
<select id="filter_activity_type"
name="filter_activity_type"
class="form-control filter-input">
<option value=""></option>
<option value="NPO">НПО</option>
<option value="PDS">ПДС</option>
</select>
</div>
<div class="col-sm-2">
<select id="filter_response_received"
name="filter_response_received"
class="form-control filter-input">
<option value=""></option>
<option value="true">Ответ получен</option>
<option value="false">Ответ не получен</option>
</select>
</div>
<div class="col-sm-2">
<select id="filter_is_sent_to_fns"
name="filter_is_sent_to_fns"
class="form-control filter-input">
<option value=""></option>
<option value="true">Отправлено в ФНС</option>
<option value="false">Не отправлено в ФНС</option>
</select>
</div>
</div>
<div class="row" style="margin-top: 20px;">
<div class="col-sm-12">
<div class="btn-group">
<button id="filter_search_top" name="filter_search_top" type="button" class="btn btn-success"
data-loading-text="Отбор...">
<span class="glyphicon glyphicon-search"></span> Найти
</button>
<button id="filter_clean_top" name="filter_clean_top" type="button" class="btn btn-warning"
data-loading-text="Очистка...">
<span class="glyphicon glyphicon-trash"></span> Сбросить
</button>
</div>
</div>
</div>
</form>
<div class="row">
<h3 class="col-sm-12">Журнал запросов в ФНС</h3>
<div class="col-sm-12">
<jsp:include page="queryTable.jsp">
<jsp:param name="queryTableCode" value="VxvzLyks"/>
</jsp:include>
</div>
<div class="mb-2" style="margin-top: 15px; margin-left: 15px;">
<button type="button"
class="btn btn-warning"
id="openModalBtn"
disabled>
Редактировать
</button>
<button type="button"
class="btn btn-primary"
id="sendToFnsBtn"
style="margin-left: 10px;"
disabled>
Отправить в ФНС
</button>
<button type="button"
class="btn btn-primary"
id="downloadSelectedFiles"
style="margin-left: 10px;"
disabled>
<span class="glyphicon glyphicon-download-alt"></span>
Скачать выбранные
</button>
<button type="button"
class="btn btn-danger"
id="deleteFnsRequestBtn"
disabled>
<span class="glyphicon glyphicon-trash"></span>
Удалить
</button>
</div>
</div>
<div class="row">
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="editModal" tabindex="-1" aria-labelledby="editModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="editModalLabel">Редактирование данных</h5>
</div>
<div class="modal-body">
<form id="editForm">
<div class="mb-3">
<label for="modalInput" class="form-label">Введите новое значение:</label>
<input type="text" class="form-control" id="modalInput" placeholder="Заполните поле...">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>
<button type="submit" form="editForm" class="btn btn-primary">Сохранить</button>
</div>
</div>
</div>
</div>
<div class="modal fade"
id="deleteFnsRequestModal"
tabindex="-1"
role="dialog"
aria-labelledby="deleteFnsRequestModalLabel"
data-backdrop="static"
data-keyboard="false">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title"
id="deleteFnsRequestModalLabel">
Подтверждение удаления
</h4>
</div>
<div class="modal-body">
<p>
Необходимо подтвердить удаление
сформированного Запроса о вычете в ФНС.
</p>
<p id="deleteFnsRequestDetails"></p>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-default"
id="cancelDeleteFnsRequestBtn"
data-dismiss="modal">
Отмена
</button>
<button type="button"
class="btn btn-danger"
id="confirmDeleteFnsRequestBtn">
Удалить
</button>
</div>
</div>
</div>
</div>
<div class="modal fade"
id="sendFnsConfirmModal"
tabindex="-1"
role="dialog"
aria-labelledby="sendFnsConfirmModalLabel">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title"
id="sendFnsConfirmModalLabel">
Подтверждение отправки
</h4>
</div>
<div class="modal-body">
<p>
Подтвердите отправку выбранных запросов в ФНС.
</p>
<p id="sendFnsConfirmDetails"></p>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-default"
data-dismiss="modal">
Отмена
</button>
<button type="button"
class="btn btn-primary"
id="confirmSendFnsBtn">
Отправить в ФНС
</button>
</div>
</div>
</div>
</div>
<jsp:include page="footer.jsp"/>
</body>
</html>