Загрузка данных


<!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"/>

<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>

<style>
  #registerFilterBlock {
    margin-bottom: 15px;
  }
  #registerFilterBlock .filter-field {
    margin-bottom: 10px;
  }
  #registerFilterBlock .register-filter-buttons {
    margin-top: 8px;
    margin-bottom: 18px;
    padding-left: 15px;
    white-space: nowrap;
  }
  #registerFilterBlock .register-filter-buttons .btn {
    margin-right: 8px;
  }
  #filter_register_status {
    width: 100%;
  }
  #registerFilterBlock .select2-container {
    width: 100% !important;
  }
</style>

<script type="text/javascript">

  var skip_url_app = false;
  const urlParams = new URLSearchParams(window.location.search);

  function application() {
    var smevRegId = urlParams.get('id');
    if (smevRegId !== null) {
      return { id: smevRegId };
    } else {
      return { id: null };
    }
  }

  $(function () {

    // Select2 для статуса ЗЕВ (фильтр нижней таблицы)
    $("#filterStatus").select2({
      placeholder: "Статус ЗЕВ",
      allowClear: true,
      data: [
        { id: 'Удовлетворено СФР',    text: 'Удовлетворено СФР' },
        { id: 'Не удовлетворено СФР', text: 'Не удовлетворено СФР' },
        { id: 'Сформировано',         text: 'Сформировано' },
        { id: 'Отклонено',            text: 'Отклонено' },
        { id: 'Принято',              text: 'Принято' },
        { id: 'Зарегистрировано',     text: 'Зарегистрировано' },
        { id: 'Аннулировано',         text: 'Аннулировано' },
        { id: 'Удалено',              text: 'Удалено' },
        { id: 'Отказано',             text: 'Отказано' }
      ],
      multiple: false
    });

    // Select2 для статуса реестра (фильтр верхней таблицы)
    $("#filter_register_status").select2({
      placeholder: "Статус",
      allowClear: true,
      minimumInputLength: 0,
      id: function (e) { return e.id; },
      data: { results: [
        { id: 1, text: 'Сформирован' },
        { id: 2, text: 'Проверяется' },
        { id: 3, text: 'ФЛК пройден' },
        { id: 4, text: 'Ошибка ФЛК' },
        { id: 5, text: 'Отправлен' }
      ]}
    });

    // Кнопки фильтра нижней таблицы
    $("#filter_search").click(function () {
      dataTable.reload();
    });

    $('#filter_clean').click(function () {
      $('#filterForm')[0].reset();
      $('#filterStatus').select2('val', null);
      dataTable.reload();
    });

    // Кнопки фильтра верхней таблицы реестров
    $('#filter\\.search').click(function () {
      var hasFilter = $('#filter_register_status').val()
        || $('#filter\\.created_at_from').val()
        || $('#filter\\.created_at_to').val()
        || $('#filter\\.register_number').val();

      if (!hasFilter) {
        showMessages([{ messageType: 'info', message: 'Задайте хотя бы один фильтр для поиска' }]);
        return;
      }
      skip_url_app = true;
      registerTable.reload();
    });

    $('#filter\\.cleanFilter').click(function () {
      $('#filter_register_status').select2('val', '');
      $('#filter\\.created_at_from').val('');
      $('#filter\\.created_at_to').val('');
      $('#filter\\.register_number').val('');
      skip_url_app = false;
      registerTable.reload();
    });

    // Верхняя таблица реестров
    var registerTable = new QueryTable("k6uzt3IS", {

      initComplete: function (settings, json) {
        registerTable.addActionButton("addNewRegister", "Создать", addNewRegister, "btn-success", false);
        registerTable.addActionButton("exportRegister", "Сформировать xml c проверкой", exportRegister, "btn-primary", true);
        registerTable.addActionButton("uploadRegister", "Отправить в СФР", uploadRegister, "btn-primary", true);
        registerTable.addActionButton("deleteRegister", "Удалить", deleteRegister, "btn-danger", true);
      },

      onRowSelect: function (data, index) {
        dataTable.reload();
      },

      onRowDeselect: function (data, index) {
        dataTable.reload();
      },

      drawCallback: function (settings) {
        skip_url_app = (settings.oAjaxData.queryTableFilter.size != 0);
        dataTable.reload();
      }
    },
    function () {
      var data = {};
      data.registerType = "УЗЕВО-ДДС-НПФ";
      var id_register = application().id;
      if (skip_url_app) {
        data.id = -1;
      } else {
        data.id = id_register;
      }
      data.filter_status    = $("#filter_register_status").val();
      data.filter_date_from = $("#filter\\.created_at_from").val();
      data.filter_date_to   = $("#filter\\.created_at_to").val();
      data.filter_number    = $("#filter\\.register_number").val();
      return data;
    });

    // Нижняя таблица
    var dataTable = new QueryTable("izy68kjJ", {},
    function () {
      var appData = registerTable.data();
      var data = {};
      data.registerId = (appData ? appData.id : -1);
      if ($("#filterStatus").val())   { data.filterStatus   = $("#filterStatus").val(); }
      if ($("#filterDateFrom").val()) { data.filterDateFrom = $("#filterDateFrom").val(); }
      if ($("#filterDateTo").val())   { data.filterDateTo   = $("#filterDateTo").val(); }
      return data;
    });

    function uploadRegister() {
      var validationResult = [];
      var mes = {};
      var message_level = 'info';
      var appData = registerTable.data();
      if (appData.verified_file_id == '' || appData.verified_file_id == null) {
        mes = { messageType: message_level, message: 'Отсутствует документ в СФР' };
        validationResult.push(mes);
        showMessages(validationResult);
        return;
      }
      if (!appData.ready_to_upload) {
        mes = { messageType: message_level, message: 'Документ в СФР не прошёл форматно-логический контроль' };
        validationResult.push(mes);
        showMessages(validationResult);
        return;
      }
      var archiveName = appData.sfr_file_name;
      var dotPosition = archiveName.lastIndexOf('.');
      if (dotPosition != -1) { archiveName = archiveName.slice(0, dotPosition); }
      archiveName = archiveName + '.tar.gz';
      $.ajax({
        url: "queryAction/action",
        type: "POST",
        async: false,
        data: {
          viewCode: 'qAQLbhCV',
          queryActionCode: 'DaizGytc',
          record_id: appData.v_file_id,
          unload_mode: 1,
          unload_format: 'gzp',
          unload_archive_name: archiveName
        },
        dataType: "json",
        success: function (data) {
          if (data) {
            if (data.data == 0) {
              mes = { messageType: message_level, message: 'Файл выгружен.' };
              validationResult.push(mes);
            }
            if (data.data == 1) {
              mes = { messageType: message_level, message: 'Файл с таким именем уже существует во внешнем хранилище.' };
              validationResult.push(mes);
            }
            if (data.data != 0 && data.data != 1) {
              mes = { messageType: message_level, message: 'Ошибка: код процесса выгрузки ' + data };
              validationResult.push(mes);
            }
            showMessages(validationResult);
          }
        }
      });
    }

    function deleteRegister() {
      var result = confirm("Вы хотите удалить реестр?");
      if (!result) { return; }
      var appData = registerTable.data();
      $.ajax({
        url: "queryAction/action",
        type: "POST",
        async: false,
        data: {
          viewCode: 'qAQLbhCV',
          queryActionCode: 'A9hf5fRI',
          id: appData.id
        },
        dataType: "json",
        success: function (data) {
          if (data && data.messages) { showMessages(data.messages); }
          registerTable.reload();
        }
      });
    }

    function addNewRegister() {
      openNewWindow("view?viewCode=JAg6SDSf");
    }

    function exportRegister() {
      var data = registerTable.data();
      var registerId = (data ? data.id : -1);
      var param = 'registerId=' + registerId + '&id=' + registerId;
      window.open("queryModel/file?queryModelCode=1AgUzS5Y&queryModelCharset=UTF-8&viewCode=qAQLbhCV&" + param, '_blank');
    }

  });
</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/30252/"/>

        <%-- Верхний блок: фильтры реестра + таблица реестров --%>
        <div class="row">
          <div class="col-sm-12">

            <div id="registerFilterBlock">
              <div class="col-sm-3 filter-field">
                <label class="control-label">Статус</label>
                <input type="text" class="form-control" id="filter_register_status" name="filter_register_status"/>
              </div>
              <div class="col-sm-3 filter-field">
                <label for="filter.created_at_from">Дата реестра с</label>
                <input type="date" id="filter.created_at_from" name="filter.created_at_from" class="form-control">
              </div>
              <div class="col-sm-3 filter-field">
                <label for="filter.created_at_to">Дата реестра по</label>
                <input type="date" id="filter.created_at_to" name="filter.created_at_to" class="form-control">
              </div>
              <div class="col-sm-3 filter-field">
                <label for="filter.register_number">Номер реестра</label>
                <input type="text" id="filter.register_number" name="filter.register_number" class="form-control" placeholder="Номер реестра">
              </div>
              <div class="clearfix"></div>
              <div class="col-sm-12 register-filter-buttons">
                <button id="filter.search" type="button" class="btn btn-success">
                  <span class="glyphicon glyphicon-search" aria-hidden="true"></span> Найти
                </button>
                <button id="filter.cleanFilter" type="button" class="btn btn-warning">
                  <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Сбросить
                </button>
              </div>
              <div class="clearfix"></div>
            </div>

            <form class="form-vertical" id="paramForm">
              <input type="hidden" name="registerId" id="registerId">
              <jsp:include page="queryTable.jsp">
                <jsp:param name="queryTableCode" value="k6uzt3IS"/>
                <jsp:param name="queryTableStyle" value="white-space:nowrap;"/>
              </jsp:include>
            </form>

          </div>
        </div>

        <hr>

        <%-- Нижний блок: фильтры ЗЕВ + таблица --%>
        <div class="row">
          <div class="col-sm-12">

            <form id="filterForm" class="form-horizontal" style="margin-bottom:15px;">
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Статус ЗЕВ</label>
                  <div type="text" class="form-control" id="filterStatus" name="filterStatus"></div>
                </div>
                <div class="col-sm-2">
                  <label for="filterDateFrom">Дата регистрации С</label>
                  <input type="text"
                         class="form-control date-picker-on"
                         name="filterDateFrom"
                         value="<fmt:formatDate value='${currentDate}' pattern='dd.MM.yyyy' />"
                         id="filterDateFrom" placeholder="Дата">
                </div>
                <div class="col-sm-2">
                  <label for="filterDateTo">Дата регистрации ПО</label>
                  <input type="text"
                         class="form-control date-picker-on"
                         name="filterDateTo"
                         value="<fmt:formatDate value='${currentDate}' pattern='dd.MM.yyyy' />"
                         id="filterDateTo" placeholder="Дата">
                </div>
              </div>
              <div class="form-group col-sm-12 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>
            </form>

            <jsp:include page="queryTable.jsp">
              <jsp:param name="queryTableCode" value="izy68kjJ"/>
              <jsp:param name="queryTableStyle" value="white-space:nowrap;"/>
            </jsp:include>

          </div>
        </div>

      </div>
    </div>
  </div>
</div>

<jsp:include page="footer.jsp"/>

</body>
</html>