Загрузка данных
<!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 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html lang="ru">
<jsp:include page="head.jsp"/>
<style>
.seagreen-button {
/* background: #000;
color: #fff;*/
background: #336666;
color: white;
}
</style>
<body>
<script type="text/javascript" src="<c:url value='/js/${version}/queryAction.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/${version}/queryTable.js'/>"></script>
<script type="text/javascript">
// Добавляем к классу String метод форматирования сообщений об ошибках, пришедших их хранимых процедур
String.prototype.npf360FormatErrorMessage = function() {
let startText = ["ERROR:", "PSQLException: ОШИБКА:", "PSQLException: ERROR:"];
let i1 = -1;
let i;
let len = 0;
for (i = 0; i < startText.length; i++) {
i1 = this.indexOf(startText[i]);
if (i1 >= 0) {
len = startText[i].length;
break;
}
}
let i2 = this.indexOf("Where:");
if (!(i1 < 0 || i2 < 0) && i2 > i1) {
return this.slice(i1 + len, i2).trim();
} else {
return this;
}
};
</script>
<script type="text/javascript">
function QueryTableWithSelection(code, queryTableCallback, queryTableParam, queryTableOptions) {
let _queryTableCode = code;
let _queryTableParam = queryTableParam;
let _queryTableCallback = queryTableCallback;
let _getQueryTableParams = function() {
let param = (typeof _queryTableParam === "function") ? _queryTableParam() : _queryTableParam;
param = param || {};
return param;
}
let _viewCode = $.urlParam('viewCode');
let _getCode = function() {
return _code;
};
let _replacementActionButtons= function () {
$("#queryTableActionButton_" + _queryTableCode + "_hSSjeilm").remove(); // Удаляем шатную кнопку Выбрать/снять
$("#queryTableActionButton_" + _queryTableCode + "_RTc5NSBh").off("click").on("click", _selectAllRows); // Выбрать все
$("#queryTableActionButton_" + _queryTableCode + "_WEdQ5Bfd").off("click").on("click", _clearRowSelection); // Очистить
$("#queryTableActionButton_" + _queryTableCode + "_L5Cn9m3b").off("click").on("click", _invertRowSelection); // Инвертировать
};
if (_queryTableCallback) {
if (typeof _queryTableCallback.initComplete === "function") {
let initComplete = _queryTableCallback.initComplete;
_queryTableCallback.initComplete = function(settings, json) {
_replacementActionButtons();
initComplete(settings, json);
}
} else {
_queryTableCallback.initComplete = function(settings, json) {
_replacementActionButtons();
}
}
} else {
_queryTableCallback = {
initComplete: function(settings, json) {
_replacementActionButtons();
}
}
}
// Выбрать все
let _selectAllRows = function() {
let parameters = {
queryTableFilter: _queryTable.filter(),
queryTableCode: _queryTableCode,
queryActionCode: "RTc5NSBh"
};
parameters = $.extend(
_getQueryTableParams(),
parameters
);
console.log(parameters);
showProcessing();
$.ajax({
url: "queryTable/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
hideProcessing();
if(data){
if (data.result) {
$("#queryTable_" + _queryTableCode + "_wrapper input[type='checkbox'][name='selected']").each((i, v) => {
$(v).prop("checked", true);
});
if (!(data.data === null)) {
let counterText = ($("#queryTable_" + _queryTableCode + "_info").text().split("|")[0]).trim();
counterText = counterText + " | всего выбрано: " + data.data;
$("#queryTable_" + _queryTableCode + "_info").text(counterText);
}
} else {
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
}
}
});
};
// Инвертировать
let _invertRowSelection = function() {
let parameters = {
queryTableFilter: _queryTable.filter(),
queryTableCode: _queryTableCode,
queryActionCode: "L5Cn9m3b"
};
parameters = $.extend(
_getQueryTableParams(),
parameters
);
console.log(parameters);
showProcessing();
$.ajax({
url: "queryTable/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
hideProcessing();
if(data){
if (data.result) {
$("#queryTable_" + _queryTableCode + "_wrapper input[type='checkbox'][name='selected']").each((i, v) => {
let chk = !$(v).prop("checked");
$(v).prop("checked", chk);
});
if (!(data.data === null)) {
let counterText = ($("#queryTable_" + _queryTableCode + "_info").text().split("|")[0]).trim();
counterText = counterText + " | всего выбрано: " + data.data;
$("#queryTable_" + _queryTableCode + "_info").text(counterText);
}
} else {
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
}
}
});
};
// Очистить выбор
let _clearRowSelection = function() {
let parameters = {
query_table_code: _queryTableCode,
viewCode: _viewCode,
queryActionCode: "WEdQ5Bfd"
};
console.log(parameters);
showProcessing();
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
hideProcessing();
if(data){
if (data.result) {
$("#queryTable_" + _queryTableCode + "_wrapper input[type='checkbox'][name='selected']").each((i, v) => {
$(v).prop("checked", false);
});
if (!(data.data === null)) {
let counterText = ($("#queryTable_" + _queryTableCode + "_info").text().split("|")[0]).trim();
counterText = counterText + " | всего выбрано: " + data.data;
$("#queryTable_" + _queryTableCode + "_info").text(counterText);
}
} else {
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
}
}
});
}
let _queryTable = new QueryTable(_queryTableCode, _queryTableCallback, _queryTableParam, queryTableOptions);
$(document).delegate("#queryTable_" + _queryTableCode + "_wrapper input[type='checkbox'][name='selected']", "change", function (e) {
let target = $(e.currentTarget);
checked = target.prop("checked");
let parameters = {
id: target.val(),
checked: checked,
query_table_code: _queryTableCode,
viewCode: _viewCode,
queryActionCode: "VsJ1PazG"
};
console.log(parameters);
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
if(data){
if (data.result) {
if (!(data.data === null)) {
let counterText = ($("#queryTable_" + _queryTableCode + "_info").text().split("|")[0]).trim();
counterText = counterText + " | всего выбрано: " + data.data;
$("#queryTable_" + _queryTableCode + "_info").text(counterText);
}
return;
}
target.prop("checked", !checked); // если ошибка, вернем галку в исходное
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
}
});
return true;
});
let _selectAll = function() {
$("#queryTableActionButton_" + _queryTableCode + "_RTc5NSBh").trigger("click");
};
let _clearAll = function() {
$("#queryTableActionButton_" + _queryTableCode + "_WEdQ5Bfd").trigger("click");
};
let _invertSelected = function() {
$("#queryTableActionButton_" + _queryTableCode + "_L5Cn9m3b").trigger("click");
};
return {
reload: _queryTable.reload,
data: _queryTable.data,
dataArray: _queryTable.dataArray,
filter: _queryTable.filter,
addActionButton: _queryTable.addActionButton,
insertActionButton: _queryTable.insertActionButton,
getCode: _getCode,
selectAll: _selectAll,
clearAll: _clearAll,
invertSelected: _invertSelected
};
}
</script>
<script type="text/javascript">
function QueryValidatorExtend(code, queryValidatorCallback, queryValidatorParam) {
let _queryValidatorCode = code;
let _queryValidatorCallback = queryValidatorCallback;
let _queryValidatorParam = queryValidatorParam;
let _queryValidatorCheck = $("#queryValidatorCheck_" + _queryValidatorCode);
let _getCode = function() {
return _queryValidatorCode;
};
let _currentStatRow = undefined;
let _reloadQueryValidatorCheck = function() {
_queryValidatorCheck.dataTable().api().ajax.reload();
};
let _getCurrentStatRow = function() {
return _currentStatRow;
};
let _statRowClickHandler = function(e) {
let target = $(e.currentTarget);
let type;
let value;
let description;
let active = target.hasClass("active");
if (target.hasClass("text-danger")) {
type = "danger";
} else if (target.hasClass("text-info")) {
type = "info";
} else if (target.hasClass("text-info")) {
type = "info";
} else if (target.hasClass("text-success")) {
type = "success";
} else if (target.hasClass("text-warning")) {
type = "warning";
} else {
type = "";
}
target.find("td").each(function(i, e) {
if (i === 0) {
description = $(e).text();
}
if (i === 1) {
value = $(e).text();
}
});
let row = {
"value": value,
"type": type,
"description": description,
"target": target
}
if (active) {
_currentStatRow = row;
if (_queryValidatorCallback) {
if (typeof _queryValidatorCallback.onStatRowSelect === "function") {
_queryValidatorCallback.onStatRowSelect(row);
}
}
} else {
_currentStatRow = undefined;
if (_queryValidatorCallback) {
if (typeof _queryValidatorCallback.onStatRowDeselect === "function") {
_queryValidatorCallback.onStatRowDeselect(row);
}
}
}
};
let _validate = function() {
$("#queryValidatorCheckButton_" + _queryValidatorCode).trigger("click");
};
let _queryValidator = new QueryValidator(_queryValidatorCode, _queryValidatorCallback, _queryValidatorParam);
$(document).on("click", "#queryValidatorCheck_" + _queryValidatorCode + " tbody tr[role='row']", _statRowClickHandler);
return {
reload: _queryValidator.reload,
enable: _queryValidator.enable,
disable: _queryValidator.disable,
data: _queryValidator.data,
getCode: _getCode,
getCurrentStatRow: _getCurrentStatRow,
validate: _validate,
reloadQueryValidatorCheck: _reloadQueryValidatorCheck
};
}
</script>
<script type="text/javascript">
$(function() {
const STATUS_CREATED = 10; // Создан
const STATUS_ACCEPTED = 20; // Принят
const STATUS_DELETED = 40; // Удален
$("#filter_type_of_activity, #param_type_of_activity").select2({
placeholder: "Вид деятельности",
allowClear: true,
minimumInputLength: 0,
id: function (e) {
return e.id;
},
ajax: {
url: "queryModel?queryModelCode=m_service_type",
dataType: "json",
results: function (data, page) {
let results = [];
data.list.forEach(function(v) {
if (v.id !== 'OPS') {
results.push({
id: v.id,
text: v.name
});
}
});
return {results: results};
}
}
});
$("#filter_type_of_accrual").select2({
placeholder: "Вид начисления",
allowClear: true,
minimumInputLength: 0,
id: function (e) {
return e.id;
},
multiple: true,
ajax: {
url: "queryModel?queryModelCode=1p96noOK",
dataType: "json",
data: function (params) {
var query = {
search: params,
hb_pens_product_kind_code: $("#filter_type_of_activity").select2('val')
}
return query;
},
results: function (data, page) {
return {
results: data.list.map(function(v) {return {
// id: v.id,
id: v.code,
text: v.name
}})
};
}
}
});
$("#param_type_of_accrual").select2({
placeholder: "Вид начисления",
allowClear: true,
minimumInputLength: 0,
id: function (e) {
return e.id;
},
ajax: {
url: "queryModel?queryModelCode=1p96noOK",
dataType: "json",
data: function (params) {
var query = {
search: params,
hb_pens_product_kind_code: $("#param_type_of_activity").select2('val')
}
return query;
},
results: function (data, page) {
return {
results: data.list.map(function(v) {return {
// id: v.id,
id: v.code,
text: v.name
}})
};
}
}
});
$("#filter_status").select2({
placeholder: "Статус",
allowClear: true,
minimumInputLength: 0,
id: function (e) {
return e.id;
},
ajax: {
url: "queryModel?queryModelCode=4eqIk7o0",
dataType: "json",
results: function (data, page) {
return {
results: data.list.map(function(v) {return {
id: v.id,
text: v.name
}})
};
}
}
});
let periodSelectionTypeSwitch = function() {
let periodSelectionType = +$("input[name=filter_type_of_period_selection]:checked").val();
if(periodSelectionType === 1) {
$("div.type_of_period_selection_1").removeClass("hidden");
$("div.type_of_period_selection_2").addClass("hidden");
} else {
$("div.type_of_period_selection_1").addClass("hidden");
$("div.type_of_period_selection_2").removeClass("hidden");
}
$("#filter_date_of_period_from").val(null);
$("#filter_date_of_period_to").val(null);
$("#filter_date_of_period").val(null);
paymentsTable.reload();
};
let filterTypeOfActivityChangeEvent = function(e) {
$("#filter_type_of_accrual").select2('val', null);
};
let getfilterParameters = function () {
let data = {};
$("#searchFilter").serializeArray().forEach(function(v) {
if (!v.value) return;
data[v.name] = v.value;
});
// console.log(data);
return data;
};
let geSsupplementAccrualFilterParameters = function () {
let data = {};
$("#supplement_accrual_filter_form").serializeArray().forEach(function(v) {
if (!v.value) return;
data[v.name] = v.value;
});
return data;
};
let getAccrualListParameters = function () {
let data = {};
$("#accrual_list_parameters_form").serializeArray().forEach(function(v) {
data[v.name] = v.value;
});
return data;
};
let lastDocumentId = null;
// Создать список для начисления - функционал
let accrualListParametersSave = function() {
let parameters = getAccrualListParameters();
parameters.viewCode = "fCwI2nmi";
parameters.queryActionCode = "TUK1GFn5";
console.log(parameters);
showProcessing("Создаем список для начисления...")
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
hideProcessing();
if(data){
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
if (data.data && isNumber(data.data)) {
lastDocumentId = +data.data;
}
}
paymentsTable.reload();
}
});
return true;
};
let filterClean = function() {
$("#filter_type_of_activity").select2("val", null);
$("#filter_type_of_accrual").select2("val", null);
$("#filter_date_of_period_from").val(null);
$("#filter_date_of_period_to").val(null);
$("#filter_date_of_period").val(null);
$("#filter_status").select2("val", null);
paymentsTable.reload();
};
let filterSearch = function() {
paymentsTable.reload();
};
let getPaymentDetailsIds = function() {
let data = {
checked: [],
unchecked: []
};
$("#queryTableForm_J1sbsDHH").serializeArray().forEach(v => {
if (v.name === "check_J1sbsDHH") {
data.checked.push(v.value);
}
if (v.name === "id_J1sbsDHH") {
if (!data.checked.includes(v.value)) {
data.unchecked.push(v.value);
}
}
});
return data;
};
// Создать список для начисления
let createAccrualList = function() {
$("#accrual_list_parameters").modal("show");
};
// Установить статус документу
let setDocumentStatus = function(statusId) {
let parameters = {
viewCode: "fCwI2nmi",
status_id: statusId,
queryActionCode: "ZcFwmeEp"
};
parameters = $.extend(paymentDetailsTableData(), parameters);
console.log(parameters);
showProcessing();
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
hideProcessing();
if(data){
if (data.result) {
paymentsTable.reload();
} else {
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
}
}
});
};
// Принять начисление
let acceptAccrual = function() {
setDocumentStatus(STATUS_ACCEPTED);
};
// Удалить начисление
let deleteAccrual = function() {
let i = confirm("Документ будет помечен как удаленный!");
if (i) {
setDocumentStatus(STATUS_DELETED);
}
};
// Дополнить начисление
let supplementAccrual = function() {
let appData = paymentsTable.data();
if (appData && appData.date_of_period) {
let dateStr = appData.date_of_period;
let parts = dateStr.split(".");
let formattedDate;
if (parts.length === 2) {
// Формат MM.YYYY → делаем 01.MM.YYYY
formattedDate = "01." + parts[0] + "." + parts[1];
} else if (parts.length === 3) {
// Формат уже DD.MM.YYYY → просто ставим день 01
parts[0] = '01';
formattedDate = parts.join(".");
} else {
formattedDate = dateStr;
}
$("#supplement_accrual_filter_pay_date_from").val(formattedDate);
$("#supplement_accrual_filter_pay_date_to").val(formattedDate);
}
$("#supplement_accrual_modal").modal("show");
};
/* let supplementAccrual = function() {
let appData = paymentsTable.data();
if (appData && appData.date_of_period) {
let dateElementsFrom = appData.date_of_period.split(".");
dateElementsFrom[0] = '01';
$("#supplement_accrual_filter_pay_date_from").val(dateElementsFrom.join("."));
$("#supplement_accrual_filter_pay_date_to").val(dateElementsFrom.join("."));
}
$("#supplement_accrual_modal").modal("show");
}; */
// Дополнить выбранные начисления
let supplementAccrualSave = function() {
let parameters = {
accrual_repurchase_amount_payments_id: paymentDetailsTableData().accrual_repurchase_amount_payments_id,
operation_type: "ADD_SELECTED",
viewCode: "fCwI2nmi",
queryActionCode: "SFezM9xh"
};
showProcessing();
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
hideProcessing();
if(data){
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
paymentDetailsTable.reload();
sulpplementAccrualTable.reload();
}
});
};
let deleteRowsAction = function (all) {
all = (all === undefined) ? false : all;
let parameters = {
accrual_repurchase_amount_payments_id: paymentDetailsTableData().accrual_repurchase_amount_payments_id,
operation_type: (all) ? "DELETE_ALL" : "DELETE_SELECTED",
viewCode: "fCwI2nmi",
queryActionCode: "SFezM9xh"
};
showProcessing();
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
hideProcessing();
if(data){
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
paymentDetailsTable.reload();
}
});
};
// Удалить все
let deleteAllRows = function() {
let i = confirm("Будут удалены все записи!");
if (i) {
deleteRowsAction(true);
}
};
// Удалить выбранное
let deleteSelectedRows = function() {
$.ajax({
url: "queryModel?queryModelCode=iz3AM0Kb",
dataType: 'json',
data: {
accrual_repurchase_amount_payments_id: 7,
stat_id: "NUMBER_OF_SELECTED_RECORDS"
},
success: function (data) {
if ("result" in data && !data.result) {
showMessages(data.mesages)
} else {
let n = data.number_of_selected_records;
if (n > 0) {
let i = confirm("Будет удалено записей: " + n + ".\nПродолжить?");
if (i) {
deleteRowsAction(false);
}
}
}
}
});
};
// Общая процедура подтверждения или исключения не прошедших проврку
let confirmOrExcludeAction = function(operationType) {
let data = validator.data();
if (!data) {
return;
}
let parameters = {
accrual_repurchase_amount_payments_details_id: data.id,
operation_type: operationType,
viewCode: "fCwI2nmi",
queryActionCode: "mVp4fEKY"
};
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
if(data){
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
showMessages(data.messages);
}
}
validator.validate();
paymentDetailsTable.reload();
}
});
};
// Подтвердить включение не прошедших проверку ПС в документ
let confirmFailedVerification = function(e) {
confirmOrExcludeAction("CONFIRM");
};
// Исключить не прошедшие проверку ПС из документа
let excludeFailedVerification = function(e) {
confirmOrExcludeAction("EXCLUDE");
};
// Переключить активность кнопок, зависящих от выбора документа и его состояния
let toggleButtons = function() {
let buttonIds = [
"supplement_accrual",
"supplement_accrual_2",
"delete_selected_rows",
"delete_all_rows",
"accept_accrual",
"delete_accrual"
];
let disabled = !(paymentsTable.data() && +paymentsTable.data().status_id === STATUS_CREATED);
buttonIds.forEach(function(v) {
$("#" + v).prop("disabled", disabled);
});
};
let paymentsTableEventsHandler = function() {
paymentDetailsTable.reload();
sulpplementAccrualTable.reload();
if (lastDocumentId) {
// Проверяем, не выбран ли только что созданный документ
let appData = paymentsTable.data();
if (appData && +appData.id === lastDocumentId) {
// Если да, то запускаем валидатор на этом документе
lastDocumentId = null;
validator.validate();
} else {
// Если нет, то обновляем валидатор
validator.reload();
}
} else {
validator.reload();
}
toggleButtons();
};
let paymentsTable = new QueryTable("YM9bCW3m",
{
initComplete: function (settings, json) {
paymentsTable.addActionButton("create_accrual_list", "Создать список для начисления", createAccrualList, "btn-primary", false);
paymentsTable.addActionButton("supplement_accrual", "Дополнить начисление", supplementAccrual, "btn-primary", true);
paymentsTable.addActionButton("accept_accrual", "Принять", acceptAccrual, "btn-success", true);
paymentsTable.addActionButton("delete_accrual", "Удалить", deleteAccrual, "btn-danger", true);
},
onRowSelect: function (data, index) {
paymentsTableEventsHandler();
},
onRowDeselect: function (data, index) {
paymentsTableEventsHandler();
},
drawCallback: function (settings) {
paymentsTableEventsHandler();
}
},
function() {
let docId = $.urlParam('id');
let params = getfilterParameters();
if (docId) {
params = $.extend(params, {id: docId});
}
return params;
},
{
selectFirstRow: true,
lengthChange: true,
showFilter: false,
showExportToExcelButton: true,
paginate: true
}
);
let paymentDetailsTableData = function() {
let appData = paymentsTable.data();
let data = {
accrual_repurchase_amount_payments_id: -1
};
if (appData) {
data.accrual_repurchase_amount_payments_id = appData.id;
}
return data;
};
let sulpplementAccrualTableData = function() {
let appData = paymentsTable.data();
let data = {
};
if (appData) {
data.accrual_repurchase_amount_payments_id = appData.id;
data.is_primary = $("#supplement_accrual_form input[type='radio'][name='is_primary']:checked").val() === 'true';
}
data = $.extend(data, geSsupplementAccrualFilterParameters());
return data;
};
let paymentDetailsTable = new QueryTableWithSelection("J1sbsDHH",
{
initComplete: function (settings, json) {
paymentDetailsTable.addActionButton("supplement_accrual_2", "Дополнить начисление", supplementAccrual, "btn-primary", false);
paymentDetailsTable.addActionButton("delete_selected_rows", "Удалить выбранное", deleteSelectedRows, "btn-danger", false);
paymentDetailsTable.addActionButton("delete_all_rows", "Удалить все", deleteAllRows, "btn-danger", false);
toggleButtons();
},
drawCallback: function (settings) {
}
},
paymentDetailsTableData,
{
selectFirstRow: true,
lengthChange: true,
showFilter: true,
showExportToExcelButton: true,
paginate: true
}
);
let sulpplementAccrualTable = new QueryTableWithSelection("APZrLARf",
{},
sulpplementAccrualTableData,
{
selectFirstRow: true,
lengthChange: true,
showFilter: true,
showExportToExcelButton: false,
paginate: true
}
);
let validatorActionsVisibility = function(visible) {
if (visible) {
$("#validator_U9ZusZdz_actions").show();
} else {
$("#validator_U9ZusZdz_actions").hide();
}
};
// Проверки данных
let validator = new QueryValidatorExtend("U9ZusZdz", {
initComplete: function (queryAction) {
$("#queryValidatorExportToExcelButton_U9ZusZdz").closest("div.btn-group").before($("#validator_U9ZusZdz_actions"));
validator.enable();
},
onStatRowSelect: function(row) {
validatorActionsVisibility(row.value > 0 && (row.type === "danger" || row.type === "warning"));
},
onStatRowDeselect: function(row) {
validatorActionsVisibility(false);
},
onRowSelect: function(data, rowIndex) {
$("#confirm_failed_verification").prop("disabled", false);
$("#exclude_failed_verification").prop("disabled", false);
},
onRowDeselect:function(data, rowIndex) {
$("#confirm_failed_verification").prop("disabled", true);
$("#exclude_failed_verification").prop("disabled", true);
},
checkComplete: function (data) {
let parameters = {
viewCode: "fCwI2nmi",
queryActionCode: "RS9Vv4uY"
};
// showProcessing()
$.ajax({
url: "queryAction/action",
type: "POST",
data: parameters,
dataType: "json",
success: function (data) {
// hideProcessing();
if(data){
if(data.messages){
data.messages.forEach(v => v.message = v.message.npf360FormatErrorMessage());
setTimeout(() => {showMessages(data.messages);}, 500);
}
}
// paymentsTable.reload();
}
});
}
}, paymentDetailsTableData);
$("input[name=filter_type_of_period_selection]").on("change", e => periodSelectionTypeSwitch());
$("#filter_type_of_activity").on("change", filterTypeOfActivityChangeEvent);
$("#supplement_accrual_filter_search").on("click", function() {
sulpplementAccrualTable.reload();
});
$("#supplement_accrual_modal_save").on("click", supplementAccrualSave);
$("#filter_search").on("click", filterSearch);
$("#filter_clean").on("click", filterClean);
$("#accrual_list_parameters_save").on("click", accrualListParametersSave);
$("#exclude_failed_verification").on("click", excludeFailedVerification);
$("#confirm_failed_verification").on("click", confirmFailedVerification);
});
</script>
<jsp:include page="header.jsp"/>
<jsp:include page="navbar.jsp"/>
<div class="container" id="mainContainer">
<div class="page-header">
<h1>${view.name}</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/29226/"/>
<h3>${view.name}</h3>
<div class="row">
<div class="col-sm-12">
<form id="searchFilter" class="form-vertical">
<div class="row">
<div class="col-sm-2">
<br/>
<label class="control-label">Вид деятельности</label>
<input type="text" class="form-control" id="filter_type_of_activity" name="filter_type_of_activity"/>
</div>
<div class="col-sm-3">
<br/>
<label class="control-label">Вид начисления</label>
<input type="text" class="form-control" id="filter_type_of_accrual" name="filter_type_of_accrual"/>
</div>
<div class="col-sm-4">
<div class="row">
<div class="col-sm-12" style="font-weight: 700">
<input type="radio" id="filter_type_of_period_selection_1" checked name="filter_type_of_period_selection" value="1">
За период
<input type="radio" id="filter_type_of_period_selection_2" name="filter_type_of_period_selection" value="2">
Дата периода
</div>
</div>
<div class="row">
<div class="col-sm-6 type_of_period_selection_1">
<label for="filter_date_from" class="control-label">Дата периода с</label>
<input type="text" class="form-control date-picker-on" id="filter_date_of_period_from" name="filter_date_of_period_from" value="<fmt:formatDate value='' pattern='dd.MM.yyyy' />" placeholder="Дата периода с">
</div>
<div class="col-sm-6 type_of_period_selection_1">
<label for="filter_date_to" class="control-label">Дата периода по</label>
<input type="text" class="form-control date-picker-on" id="filter_date_of_period_to" name="filter_date_of_period_to" value="<fmt:formatDate value='' pattern='dd.MM.yyyy' />" placeholder="Дата периода по">
</div>
<div class="col-sm-6 type_of_period_selection_2 hidden">
<label for="filter_sent_from" class="control-label">Дата периода</label>
<input type="text" class="form-control date-picker-on" id="filter_date_of_period" name="filter_date_of_period" value="<fmt:formatDate value='' pattern='dd.MM.yyyy' />" placeholder="Дата периода">
</div>
</div>
</div>
<div class="col-sm-3">
<br/>
<label class="control-label">Статус</label>
<input type="text" class="form-control" id="filter_status" name="filter_status"/>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="btn-group">
<button id="filter_search" name="filter_search" type="button" class="btn btn-success" data-loading-text="Отбор...">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
Найти
</button>
<button id="filter_clean" name="filter_clean" type="button" class="btn btn-warning" data-loading-text="Очистка...">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
Сбросить
</button>
</div>
</div>
</div>
</form>
</div>
</div>
<hr/>
<div class="row">
<div class="col-sm-12">
<jsp:include page="queryTable.jsp">
<jsp:param name="queryTableCode" value="YM9bCW3m"/>
</jsp:include>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<form id="queryTableForm_J1sbsDHH">
<jsp:include page="queryTable.jsp">
<jsp:param name="queryTableCode" value="J1sbsDHH"/>
</jsp:include>
</form>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<jsp:include page="queryValidator.jsp">
<jsp:param name="queryValidatorCode" value="U9ZusZdz"/>
<jsp:param name="queryValidatorStyle" value="white-space: nowrap;"/>
</jsp:include>
</div>
</div>
<div class="btn-group" id = "validator_U9ZusZdz_actions" style="display: none">
<button id="confirm_failed_verification" type="button" disabled class="btn btn-success on-selected-row">Подтвердить</button>
<button id="exclude_failed_verification" type="button" disabled class="btn btn-danger on-selected-row">Исключить</button>
</div>
</div>
</div>
</div>
</div>
<jsp:include page="footer.jsp"/>
<!-- Модальное окно формы отбора счетов по кнопки "Дополнить начисления" -->
<div class="modal fade" id="supplement_accrual_modal" tabindex="-1" role="dialog" aria-labelledby="accrual_list_parameters_label">
<div class="modal-dialog" style="width: 80%" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Дополнить начисления</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="supplement_accrual_filter_form">
<div class="row">
<div class="col-sm-12" style="font-weight: 700">
<div class="row">
<div class="col-sm-12">
<input type="radio" checked name="is_primary" value="true"/>
Решение о выплате
<input type="radio" name="is_primary" value="false"/>
Решение о доплате
</div>
</div>
<div class="row">
<div class="col-sm-2">
<label for="supplement_accrual_filter_pay_date_from" class="control-label">Дата оплаты с</label>
<input type="text" class="form-control date-picker-on" id="supplement_accrual_filter_pay_date_from" name="supplement_accrual_filter_pay_date_from" value="<fmt:formatDate value='' pattern='dd.MM.yyyy' />" placeholder="Дата оплаты с">
</div>
<div class="col-sm-2">
<label for="supplement_accrual_filter_pay_date_to" class="control-label">Дата оплаты по</label>
<input type="text" class="form-control date-picker-on" id="supplement_accrual_filter_pay_date_to" name="supplement_accrual_filter_pay_date_to" value="<fmt:formatDate value='' pattern='dd.MM.yyyy' />" placeholder="Дата оплаты по">
</div>
<div class="col-sm-5">
<div class="btn-group">
<br/>
<button id="supplement_accrual_filter_search" name="fsupplement_accrual_filter_search" type="button" class="btn btn-success" data-loading-text="Отбор...">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
Найти
</button>
<button id="supplement_accrual_filter_clean" name="supplement_accrual_filter_clean" type="button" class="btn btn-warning" data-loading-text="Очистка...">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
Сбросить
</button>
</div>
</div>
</div>
</div>
</div>
</form>
<div class="row">
<div class="col-sm-12">
<jsp:include page="queryTable.jsp">
<jsp:param name="queryTableCode" value="APZrLARf"/>
</jsp:include>
</div>
</div>
</div>
<div class="modal-footer">
<button id="supplement_accrual_modal_save" type="button" class="btn btn-primary pull-left" data-dismiss="modal">Сохранить</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>
</div>
</div>
</div>
</div>
<!-- Модальное окно формы определения параметров отбора счетов для ручного формирования документов -->
<div class="modal fade" id="accrual_list_parameters" tabindex="-1" role="dialog" aria-labelledby="accrual_list_parameters_label">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Определение параметров начисления</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" id="accrual_list_parameters_form">
<div class="row">
<div class="col-sm-4">
<label class="control-label">Вид деятельности</label>
<input type="text" class="form-control" id="param_type_of_activity" name="param_type_of_activity"/>
</div>
<div class="col-sm-5">
<label class="control-label">Вид начисления</label>
<input type="text" class="form-control" id="param_type_of_accrual" name="param_type_of_accrual"/>
</div>
<div class="col-sm-3">
<label for="param_sent_from" class="control-label">Дата периода</label>
<input type="text" class="form-control date-picker-on" id="param_date_of_period" name="param_date_of_period" value="<fmt:formatDate value='' pattern='dd.MM.yyyy' />" placeholder="Дата периода">
</div>
</div>
<div class="row">
<div class="col-sm-12">
<label for="param_comment" class="control-label">Комментарий</label>
<input type="text" class="form-control" id="param_comment" name="param_comment" placeholder="Комментарий">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button id="accrual_list_parameters_save" type="button" class="btn btn-primary pull-left" data-dismiss="modal">Сохранить</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>
</div>
</div>
</div>
</div>
</body>
</html>
SELECT
o.id as id,
'<a target="_blank" href="view?viewCode=9CNmoQeC&id=' || o.id || '" target="_blank">' || ot.name || '</a>' as name,
o.comment as comment,
to_char(o.operation_date, 'dd.MM.yyyy') as operationDate,
trim(to_char((select sum(t.value) as sumoper from back_office.transaction t where t.operation_id = o.id), '99 999 999 999 999 990D99')) as sumoper,
to_char(o.effective_date, 'dd.MM.yyyy') as effectiveDate,
to_char(o.period_date, 'dd.MM.yyyy') as periodDate,
to_char(o.created, 'DD.MM.YYYY HH24:MI:SS') as created,
c.last_name || ' ' ||substr(c.first_name,1,1) ||'.'||coalesce(substr(c.middle_name,1,1)||'.', '') as author,
to_char(o.approved, 'DD.MM.YYYY HH24:MI:SS') as approved,
a.last_name || ' ' || coalesce(substr(a.first_name,1,1)||'.', '') ||coalesce(substr(a.middle_name,1,1)||'.', '') as approver,
to_char(o.deleted, 'DD.MM.YYYY HH24:MI:SS') as deleted,
r.last_name || ' ' ||substr(r.first_name,1,1) ||'.'|| coalesce(substr(r.middle_name,1,1)||'.', '') as remover,
'<a href="queryDataSource/queryDataSourceFile/download?id='||f.id||'">'||f.name||'</a>' as file,
case
when o.pension_calculation_id is not null then '<a target="_blank" href="view?viewCode=fgcx21i8&id='||pc.id||'"target="_blank">'||'Расчет пенсии от '||to_char(pc.calculation_date, 'dd.MM.yyyy')||'</a>'
when o.termination_contract_calculation_id is not null then '<a target="_blank" href="'||'view?viewCode=Js7E4zaZ&id='||tc.id||'">'||'Расчет выкупной суммы от '||to_char(tc.version,'dd.MM.yyyy')||'</a>'
when o.inheritance_calculation_id is not null then '<a target="_blank" href="'||'view?viewCode=DZg6CX4G&id='||ic.id||'">'||'Расчет наследуемой суммы от '||to_char(ic.version,'dd.MM.yyyy')||'</a>'
end as calculation,
case
when o.payment_register_id is not null then
'<a target="_blank" href="view?viewCode=QoQTOUeG&id='||pr.id||'">'||pr.register_number||'</a>'
when o.ops_payment_register_id is not null then
'<a target="_blank" href="view?viewCode=xT40mPRG&id='||opr.id||'">'||opr.number||'</a>'
end as paymentRegister,
od.number as operationDocumentNumber,
to_char(od.date, 'dd.MM.yyyy') as operationDocumentDate,
to_char(o.version, 'DD.MM.YYYY HH24:MI:SS') as version
FROM back_office.operation o
join back_office.operation_type ot on o.operation_type_id = ot.id
join ourpension.agent c on o.author_agent_id = c.id
left join ourpension.agent r on o.remover_agent_id = r.id
left join ourpension.agent a on o.approver_agent_id = a.id
left join dev.query_datasource_file f on o.query_datasource_file_id = f.id
left join back_office.ops_payment_decision pd on o.ops_payment_decision_id = pd.id
left join back_office.payment_register pr on pr.id =o.payment_register_id
left join back_office.ops_payment_register opr on opr.id =o.ops_payment_register_id
left join back_office.pension_calculation pc on pc.id =o.pension_calculation_id
left join back_office.termination_contract_calculation tc on tc.id =o.termination_contract_calculation_id
left join back_office.inheritance_calculation ic on ic.id =o.inheritance_calculation_id
left join back_office.operation_document od on od.id = o.operation_document_id
WHERE #if ($show_date)
true
#else
false
#end
#if ( $operationId != -1 )
and o.id = :operationId
#else
and 1=1
#end
#if ($filterStartDate && !$filterStartDate.isEmpty())
and o.effective_date >= :filterStartDate
#end
#if ($filterEndDate && !$filterEndDate.isEmpty())
and o.effective_date <= :filterEndDate
#end
#if ($filterServiceType && !$filterServiceType.isEmpty())
and ot.service_type = :filterServiceType
#end
#if ($filterOperation && !$filterOperation.isEmpty())
and o.operation_type_id = :filterOperation
#end
call back_office.proc__change_status_accrual_repurchase_amount_payment(
:accrual_repurchase_amount_payments_id,
:status_id,
:user_id
)