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


<!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"/>
<jsp:useBean id="currentDate" class="java.util.Date"/>	

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

  #registerTableBlock {
    clear: both;
    margin-top: 10px;
  }

  #filter_status {
    width: 100%;
  }

  #registerFilterBlock .select2-container {
    width: 100% !important;
  }
</style>
<script type="text/javascript">
	
	var ruFormatter = new Intl.NumberFormat('ru');
	var defaultBatches = true;
	var BatchesPeopleCount = -1;
	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 clickSecondaryTable() {									
						var sid = urlParams.get('sid');
						var id = urlParams.get('id')
						if (sid && id) {
							$('#queryTable_4PjxV0uP td').filter(function() {
								return $(this).text().trim().toLowerCase().includes(sid);
							}).click();
						}
					}

	$(function () {

		var registerTable = new QueryTable("KDYy3nAd", { //"BM4gpvF2"

			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); 
				registerTable.addActionButton("exportSettings", ' ', exportSettings, "btn-primary", true);
				
				$('#exportSettings').css('display', 'inline-block').append($('<i></i>')
														.addClass('glyphicon glyphicon-wrench icon-white')); // glyphicon glyphicon-cog
							

			},

			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 appData = registerTable.data();
			var data = {};
			data.registerType ="АСЛС";
			let id_register = application().id;
			if(skip_url_app) {
				data.id = -1;
			}else{
				data.id = id_register;
			}	
			return data;
		},{selectFirstRow: true});	


		var dataTable = new QueryTable("4PjxV0uP",{
			onRowSelect: function (data, index) {
			},
			onRowDeselect: function (data, index) {
			},
			drawCallback: function (settings) {
				clickSecondaryTable();
			}
		},																					
		function () {
			var appData = registerTable.data();
			var data = {};
			data.registerId = (appData ? appData.id : -1);
			var sid = urlParams.get('sid');
			if (sid) {
				data.id = sid;
			}
			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;
			}
			// remove the extension from the file name (as we constructing archive name)
			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: 'wolUtqQA',
					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: 'wolUtqQA',
					queryActionCode: 'gLEAthpI',  //'jLc7z1h4',
					id: appData.id,
				},
				dataType: "json",
				success: function (data) {
					if(data){
						if(data.messages){
							showMessages(data.messages);
						}
					}
					registerTable.reload();
				}
			});
		}
		
		function exportSettings(){
			let exportSettingsDialog = $("#exportSettingsDialog");
			exportSettingsDialogForeground(registerTable.data());
			exportSettingsDialog.modal('show');
		}
		
		function addNewRegister(){
			$.ajax({
				url: "queryModel.json",
				type: "POST",
				data: {
					viewCode: 'wolUtqQA',
					queryModelCode:'qJmlPzPm',
					seq_name: "'report.smev_register_id_sequence'"
				},
				dataType: "json",
				success: function (data) {
					QueryAction.action("HfRcAyiY", {
						actionComplete: function (data) {
							registerTable.reload();
						}
					},
					function () {
						var appData = registerTable.data();
						var operationData = {};
						$("#paramForm").serializeArray().map(function (x) {
						operationData[x.name] = x.value;
						});
						operationData.registerType ="АСЛС";				
						operationData.registerId = data.id;
						operationData.guid = uuid();

						return operationData;
					});
				}	
			});
		}
		
		function exportRegister(){
			var data = registerTable.data();
			var registerId = (data ? data.id : -1);
			var param ='';	
			var param ='registerId=' + registerId + '&'; 
			param = param + "id=" + registerId ;
			if(!defaultBatches){ 
				param = param + "&batchsize=" + BatchesPeopleCount;
			}
			window.open("queryModel/loop?queryModelCode=0i4oRtb5&queryModelCharset=UTF-8&viewCode=wolUtqQA&"+param, '_blank');
		}

		function uuid() {
			function randomDigit() {
				if (crypto && crypto.getRandomValues) {
					var rands = new Uint8Array(1);
					crypto.getRandomValues(rands);
					return (rands[0] % 16).toString(16);
				} else {
					return ((Math.random() * 16) | 0).toString(16);
				}
			}
			var crypto = window.crypto || window.msCrypto;
			return 'xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx'.replace(/x/g, randomDigit);
		}
		
		function exportSettingsDialogForeground(ctx){
			if(Object.keys(ctx).length != 0){
				var rez = getRegisterInfo(ctx.id);
				var nCount = rez.count;
				var peopleCount = nCount;
				var nBatches = 1;
				$('#register_count').val(ruFormatter.format(nCount));
				$('#register_info').val('ИД: '+ rez.register_id + ' Тип: ' + rez.register_type + ' Номер: ' + rez.register_number);
				
			  if (nCount > 0  && nCount < 99){
					nBatches = 1;
			  }else if (nCount > 99  && nCount < 999){
					nBatches = 2;
					peopleCount = Math.ceil( nCount/ nBatches);
				}else if (nCount > 999 && nCount < 9999){
					nBatches = 5;
					peopleCount = Math.ceil( nCount/ nBatches);
				}else if (nCount > 9999 && nCount < 999999){
					nBatches = 10;
					peopleCount = Math.ceil( nCount/ nBatches);
				}else if (nCount > 999999 && nCount < 5000000){
					nBatches = 10;
					peopleCount = Math.ceil( nCount / nBatches);					
					if(peopleCount > 100000){
						peopleCount = 100000;
						nBatches = Math.ceil(nCount / peopleCount); 
					} 
				}else{
					nBatches = 50;
					peopleCount = Math.ceil( nCount / nBatches)
					if(peopleCount > 200000){
						peopleCount = 200000;
						nBatches = Math.ceil(nCount / peopleCount); 
					} 
				}
				$('#register_batches').val(nBatches);
				$('#register_people').val(peopleCount);	
				$('#smev_register_id').val(rez.register_id);
				$('#smev_register_type').val(rez.register_type);
				$('#smev_register_count').val(nCount);				
			}else{
				$('#register_count').val('');
				$('#register_info').val('ИД: '+ ' ' + ' Тип: ' + ' ' + ' Номер: ' + ' ');
				$('#register_batches').val('');
				$('#register_people').val('');	
				$('#smev_register_id').val('');
				$('#smev_register_type').val('');
				$('#smev_register_count').val('');
			}
		}
		
		function getRegisterInfo(register_id){
				var result = {};
				$.ajax({
					url: "queryModel.json",
					type: "POST",
					async: false,
					data: {
							queryModelCode: 'goEsuxQK',
							register_id: register_id
					},
					dataType: "json",
					success: function (data) {
						result = Object.assign({}, data.list[0]);
					}
			});
			return result;
		}
	});
	
	function updateCalculationBatches(){
		var nCount = $('#smev_register_count').val();
		var peopleCount = $('#register_people').val();
		if(!isNaN(Number(peopleCount))){
			$('#register_batches').val( Math.ceil(nCount / peopleCount));
		}
	}
	
	function updateCalculationPeople(){
		var nCount = $('#smev_register_count').val();
		var nBatches = $('#register_batches').val();
		if(!isNaN(Number(nBatches))){
			$('#register_people').val( Math.ceil(nCount / nBatches));
		}		
	}
	
	function saveBatchesParameters(){
		defaultBatches = false;
		BatchesPeopleCount = $('#register_people').val();
		$("#exportSettingsDialog").modal('hide');
	}

</script>

<jsp:include page="header.jsp"/>
<jsp:include page="navbar.jsp"/>
	
		<!-- Настройки выгрузки реестра-->
	
	<div id="exportSettingsDialog" 
			 class="modal fade" 
			 tabindex="-1" 
			 role="dialog" 
			 data-backdrop="static"
			 aria-labelledby="exportSettingsDialogLabel" 
			 aria-hidden="true">
		<div class="modal-dialog">
			<div class="modal-content">

				<div class="modal-header">
					<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span>
						<span	class="sr-only"><s:message code="dialog.close" />
						</span></button>
					<h4 class="modal-title" id="exportSettingsDialogLabel">Параметры выгрузки реестра</h4>
				</div>

				<div class="modal-body">
					<form id="exportSettingsForm" class="form-vertical" role="form">

						<input type="hidden" name="smev_register_id" id="smev_register_id">
						<input type="hidden" name="smev_register_type" id="smev_register_type">
						<input type="hidden" name="smev_register_count" id="smev_register_count">
						
						<div class="form-group">
							<label class="control-label" for="register_info">ИД реестра, тип, номер</label>
							<input type="text" id="register_info" class="form-control" name="register_info" 
										 placeholder="Информация о реестре" readonly="true">
						</div>
						<div class="form-group">
							<label class="control-label" for="register_count">Количество записей</label>
							<input type="text" id="register_count" class="form-control" name="register_count" 
										 placeholder="Записей в реестре" readonly="true">
						</div>
						<div class="form-group">
							<label class="control-label" for="register_batches">Количество пачек</label>
							<input type="text" id="register_batches" class="form-control" 
										 name="register_batches" onchange="updateCalculationPeople()" placeholder="На сколько пачек разбить реестр">
						</div>
						<div class="form-group">
							<label class="control-label" for="register_people">Количество людей в пачке</label>
							<input type="text" id="register_people" class="form-control" 
										 name="register_people" onchange="updateCalculationBatches()" placeholder="Сколько людей в пачке">
						</div>
					</form>
				</div>			
				
				<div class="modal-footer">					
					<button class="btn btn-success" type="button" onclick="saveBatchesParameters()">
		 			  <s:message code="button.save" />
					</button>					
					<button class="btn btn-default" type="button" data-dismiss="modal">
						<s:message code="button.cancel" />
					</button>
				</div>

			</div>
		</div>
	</div> <!-- Настройки выгрузки реестра конец-->

	<!-- Главная страница-->

<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/29346/"/>
	
				<div class="row">
					<h4 class="col-sm-12">Ежегодный акт сверки состояния лицевых счетов ЗЛ</h4>

					<form class="form-vertical" id="paramForm">
						<input type="hidden" name="registerId" id="registerId">
						<div class="col-sm-2">
							<label for="report_date">Дата отбора</label>
							<input type="text" class="form-control date-picker-on" name ="report_date" 
										 value="<fmt:formatDate value='${currentDate}' pattern='dd.MM.yyyy' />"
										 id="report_date" placeholder="Дата">
								<p class="help-block">Дата отбора для нового реестра</p>
						</div>
						
						<div id="registerFilterBlock">

    <div class="col-sm-3 filter-field">
      <label class="control-label">Статус</label>
      <input type="text" class="form-control" id="filter_status" name="filter_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" name="filter.search" type="button" class="btn btn-success">
        <span class="glyphicon glyphicon-search" aria-hidden="true"></span> Найти
      </button>

      <button id="filter.cleanFilter" name="filter.cleanFilter" type="button" class="btn btn-warning">
        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Сбросить
      </button>
    </div>
							
							
												<div class="col-sm-12">
							<jsp:include page="queryTable.jsp">
								<jsp:param name="queryTableCode" value="KDYy3nAd"/>
								<jsp:param name="queryTableStyle" value="white-space:nowrap;"/>
							</jsp:include>
							</div>							
						</form>
					</div>			
				<hr>
				<hr>
				<div class="row">
					<div class="col-sm-12">
						<jsp:include page="queryTable.jsp">				
							<jsp:param name="queryTableCode" value="4PjxV0uP"/>
							<jsp:param name="queryTableStyle" value="white-space:nowrap;"/>
						</jsp:include>
					</div>
				</div>		
			</div>
		</div>
	</div>

	</div>

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

</body>
</html>