Virtonomica: фильтр по количеству фактически нанятого персонала.

Фильтр по количеству фактически нанятого персонала на странице Управление -> Персонал.

// ==UserScript==
// @name           Virtonomica: фильтр по количеству фактически нанятого персонала.
// @namespace      virtonomica
// @version        1.4
// @description    Фильтр по количеству фактически нанятого персонала на странице Управление -> Персонал.
// @include        http*://virtonomic*.*/*/main/company/view/*/unit_list/employee
// @include        http*://virtonomic*.*/*/main/company/view/*/unit_list/employee/salary
// ==/UserScript==
var run = function() {

	var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
	$ = win.$;

	function getRealm(){
		var svHref = window.location.href;
        var matches = svHref.match(/\/(\w+)\/main\/unit\/view\//);
		return matches[1];
	}	
	function getUnitId(){
		var svHref = window.location.href;
        var matches = svHref.match(/\/main\/unit\/view\/(\d+)\//);
		return matches[1];
	}
	function getLast(str){
        var matches = str.match(/\/(\d+)$/);
		return matches[1];
	}
	Object.size = function(obj) {
		var size = 0, key;
		for (key in obj) {
			if (obj.hasOwnProperty(key)) size++;
		}
		return size;
	};
	function isObject(item) {
		//console.log("item = " + (typeof item === "object" && Object.size(item) == 1 && item !== null));
		return (typeof item === "object" && Object.size(item) == 1 && item !== null);
	}
	function checkAll(chVal){
		//console.log("chVal = " + chVal);
		$('table.list > tbody > tr > td:nth-child(1) > input[type="checkbox"]').each(function() {
			var rowCh = $(this);
			var link = $('> td > input[name^="qnt["]', rowCh.parent().parent());
			var selVal = $('#actual_worker_cnt').val();
			if(selVal === '' || parseFloat(selVal) === parseFloat(link.val())){
				//console.log("rowCh = " + rowCh.prop('checked'));
				//console.log("link = " + link.val());
				rowCh.prop('checked', chVal);
			} else {
				rowCh.prop('checked', !chVal);
			}
		});
	}
	var panel = $('<td colspan="2" cellpadding="0" cellspacing="0" height="0" width="0">');
	var ops = '';
	var vals = [];
	var counts = [];
	$('table.list > tbody > tr > td > input[name^="qnt["]').each(function() {
		var link = $(this);
		//console.log("link = " + link.val());
		if($.inArray(link.val(), vals) == -1){
			vals.push(link.val());
			counts[link.val()] = 1;
		} else {
			counts[link.val()] += 1;
		}
	});
	vals.sort(function(a, b) {
		return parseFloat(a) - parseFloat(b);
	});
	var valsLength = vals.length;
	for (var i = 0; i < valsLength; i++) {
		ops += '<option value="'+vals[i]+'">'+vals[i]+' ('+counts[vals[i]]+')</option>';
	}
	var select = $('<select id="actual_worker_cnt">').change(function() {
		var selVal = $(this).val();
		//console.log("selVal = " + selVal);
		$('table.list > tbody > tr > td > input[name^="qnt["]').each(function() {
			var link = $(this);
			//console.log("link = " + link.val());
			if(selVal === '' || parseFloat(selVal) === parseFloat(link.val())){
				link.parent().parent().show();
			} else {
				link.parent().parent().hide();
			}
		});
		if(selVal === ''){
			checkAll(false);
		} else{
			checkAll(true);
		}
	}).append('<option value=""></option>' + ops);
	
	var checker = $('<input type=checkbox>').change(function() {
		var chVal = $(this).prop('checked');
		checkAll(chVal);
	});
	panel.append(select);
	//panel.append(checker);
	var row = $('<tr>');
	row.append(panel);
	$('table.list > tbody > tr:nth-child(3) > th:nth-child(2) > div > table > tbody > tr > td.title-ordertool').parent().parent().append(row);
}

if(window.top == window) {
	var script = document.createElement("script");
	script.textContent = '(' + run.toString() + ')();';
	document.documentElement.appendChild(script);
}