您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Добавляет кнопки вывоза остатков в отчет "Движение товаров - Запасы"
// ==UserScript== // @name Virtonomica: вывоз остатков через отчет "Движение товаров - Запасы" // @version 0.6 // @include http*://*virtonomic*.*/*/main/company/view/*/sales_report/by_storages // @description Добавляет кнопки вывоза остатков в отчет "Движение товаров - Запасы" // @author cobra3125 // @namespace virtonomica // ==/UserScript== var run = function() { var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window); $ = win.$; function getLocale() { return (document.location.hostname === 'virtonomica.ru') ? 'ru' : 'en'; } function getRealm(){ var svHref = window.location.href; var matches = svHref.match(/\/(\w+)\/main\/company\/view\//); return matches[1]; } function getLast(str){ var matches = str.match(/\/(\d+)$/); return matches[1]; } function addStockList(opCell, idapUnit, idpProduct, idpBrand){ if(idapUnit.length === 0){ console.log( "idapUnit.length === 0" ); return; } var idvUnit = idapUnit.pop(); $.get('/'+ getRealm() +'/window/unit/view/'+ idvUnit +'/product_move_to_warehouse/'+ idpProduct +'/' + idpBrand, function(data){ var stockSelectorOptions = ''; $('table.list > tbody > tr > td:nth-child(3) > a:has(img)', data).each(function(){ var link = $(this); var idvStock = getLast(link.attr('href')); var svPlace = $('> td:nth-child(2)', link.parent().parent()).text(); var svOnStockHeader = $('> tr:nth-child(1) > th:nth-child(5) > div > table > tbody > tr > td.title-ordertool', link.parent().parent().parent()).text(); var svOnStock = $('> td:nth-child(5)', link.parent().parent()).text(); stockSelectorOptions = stockSelectorOptions + '<option stock="'+ idvStock + '">'+ svPlace +', '+ svOnStockHeader +': '+ svOnStock +'</option>'; }); if(stockSelectorOptions === '' && idapUnit.length > 0){ console.log( "stockSelectorOptions === '', idapUnit.length = " + idapUnit.length); addStockList(opCell, idapUnit, idpProduct, idpBrand); } else { stockSelectorOptions = stockSelectorOptions || '<option stock="">У вашей компании нет складов, на которые можно было бы вывезти этот товар!</option>'; opCell.append('<select name="stock_list">'+ stockSelectorOptions +'</select>'); } }); } function returnToStock(idpUnitFrom, idpStockTo, idpProduct, idpBrand, npQtyToMove){ if (npQtyToMove > 0 && idpStockTo != ''){ var svUrl = '/'+ getRealm() +'/window/unit/view/'+ idpUnitFrom +'/product_move_to_warehouse/'+ idpProduct +'/'+ idpBrand; var data = {}; data['qty'] = npQtyToMove; data['unit'] = idpStockTo; $.post( svUrl, data ) .done(function() { console.log( "returnToStock success" ); }) .fail(function() { console.log( "returnToStock error" ); }); } else { console.log('npQtyToMove < 0; '+ npQtyToMove); console.log('idpStockTo = "'+ idpStockTo +'"'); } } function toNumber(spSum){ return parseFloat(spSum.replace('$','').replace(/\s+/g,''),10); } //резделитель разрядов function commaSeparateNumber(val, sep){ var separator = sep || ' '; while (/(\d+)(\d{3})/.test(val.toString())){ val = val.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1"+separator); } return val; } //убираем с названия товара обработчик клика, чтобы не скрывался список при выборе склада $('div > a.c_row > div > span.c_name').click(function(){ var row = $(this).parent().parent().parent(); var listVisible = $('> div.c_row_l', row).is(':visible'); if(listVisible){ return false; } else { return true; } }); //кнопки перед таблицей var btnPanel = $('<div id="btns_before_table">'); var btn_select_visible_unit_rows = $('<input id="btn_select_visible_unit_rows" type="button" value="Выделить подразделения для вывоза остатков на склад">'); btn_select_visible_unit_rows.click(function(){ $('a.c_row > div:visible:has(span:nth-child(3):not(:has(input)))').each(function(){ var parentRow = $(this); var parentParentRow = parentRow.parent().parent(); if($('> div.c_row_l:visible > div', parentParentRow).length > 0){ var nameCell = $('> span:nth-child(3)', parentRow); var matches = $('> div.c_row_l:visible', parentParentRow).attr('id').match(/(\d+)_(\d+)/); var idvProduct = matches[1]; var idvBrand = matches[2]; var idavUnit = []; $('> div.c_row_l:visible > div > span:nth-child(3) > a', parentParentRow).each(function(){ var unitRow = $(this).parent().parent(); if($('> span:nth-child(2) > a > img', unitRow).attr('src').indexOf('warehouse') === -1){ var idvUnit = getLast($(this).attr('href')); idavUnit.push(idvUnit); } }); console.log(idvProduct +'_'+ idvBrand +'_'+ idavUnit.length); //nameCell.append(' <input name="parent_unit_for_return" type="checkbox" checked>') nameCell.append(', оставить кол-во <input name="parent_qty_for_leave" type="number" value="0" style="width: 6em;">'); addStockList(nameCell, idavUnit, idvProduct, idvBrand); } }); $('div.c_row_l:visible > div:has(span:nth-child(1):not(:has(input)))').each(function(){ var unitRow = $(this); if($('> span:nth-child(2) > a > img', unitRow).attr('src').indexOf('warehouse') === -1){ $('> span:nth-child(1)', unitRow).append(' <input name="unit_for_return" type="checkbox">'); $('> span:nth-child(3)', unitRow).append(', оставить кол-во <input name="qty_for_leave" type="number" value="0" style="width: 6em;">'); } }); /*$('input[name="parent_unit_for_return"]').click(function(){ console.log('click'); var newVal = $(this).is(':checked'); var parentRow = $(this).parent().parent().parent().parent(); $('> div.c_row_l:visible > div > span:nth-child(1) > input[name="unit_for_return"]', parentRow).each(function(){ $(this).attr('checked', newVal); }); });*/ $('input[name="parent_qty_for_leave"]').change(function(){ var newVal = parseFloat($(this).val(),10) || 0; var parentRow = $(this).parent().parent().parent().parent(); $('> div.c_row_l:visible > div > span:nth-child(3) > input[name="qty_for_leave"]', parentRow).each(function(){ $(this).val(newVal); }); }); }); btnPanel.append(btn_select_visible_unit_rows); var btn_return_from_selected_units = $('<input id="btn_return_from_selected_units" type="button" value="Вывезти остатки на склад">'); btn_return_from_selected_units.click(function(){ var checkedRows = $('div.c_row_l:visible:has(div > span:nth-child(1) > input:checked)'); if(checkedRows.length > 0 && confirm('Переместить запасы "'+ checkedRows.length +'" товаров(а) на склад?')){ checkedRows.each(function(){ var row = $(this); var idvStockTo = $('> a.c_row > div > span.c_name > select[name="stock_list"] > option:selected', row.parent()).attr('stock'); var matches = row.attr('id').match(/(\d+)_(\d+)/); var idvProduct = matches[1]; var idvBrand = matches[2]; $('> div:has(span:nth-child(3) > a)', row).each(function(){ var subRow = $(this); if($('> span:nth-child(1) > input[name="unit_for_return"]', subRow).is(':checked')){ var idvUnitFrom = getLast($('> span:nth-child(3) > a', subRow).first().attr('href')); var nvQtyToLeave = toNumber($('> span:nth-child(3) > input[name="qty_for_leave"]', subRow).val()); var nvQtyToMove = toNumber($('> span:nth-child(4)', subRow).text()) - nvQtyToLeave; returnToStock(idvUnitFrom, idvStockTo, idvProduct, idvBrand, nvQtyToMove); $('> span:nth-child(4)', subRow).html('<b>'+ commaSeparateNumber(nvQtyToLeave) +'</b>'); } }); }); } }); btnPanel.append(' ').append(btn_return_from_selected_units); $('div:nth-child(9) > span.c_qty').first().parent().before(btnPanel); /* var path1 = '> a.c_row > div:nth-child(1) > span:nth-child(2)'; var path2 = '> a.c_row_1 > div:nth-child(1) > span:nth-child(2)'; $('div:has(a.c_row):has(div):has(span.c_qty)').each(function(){ var row = $(this); //var id_product = avProductIdByImgSrc[$(path3, row).attr('src')]; $(path1, row).append(' <input name="select_all_for_return" type="checkbox">'); $(path2, row).append(' <input name="select_all_for_return" type="checkbox">'); }); $('input[name="select_all_for_return"]').click(function(){ var row = $(this).closest('tr'); var checked = $(this).is(':checked'); var href = $(this).attr('href'); var next = row.next(); while (next.length > 0 && !next.hasClass('p_title')) { $('> td:nth-child(1) > input[type="checkbox"]', next).attr('checked', checked); next = next.next(); } }); $('#mainContent > div:nth-child(10) > a > div:nth-child(2) > span:nth-child(2) > img').each(function(){ var img = $(this); var box = $('<input name="select_all_for_return" type="checkbox" style="float:left;">').click(function(){ var row = $(this).closest('tr'); var checked = $(this).is(':checked'); var next = row.next(); while (next.length > 0 && !next.hasClass('p_title')) { $('> td:nth-child(1) > input[type="checkbox"]', next).attr('checked', checked); next = next.next(); } }); img.after(box); }); */ } if(window.top == window) { var script = document.createElement("script"); script.textContent = '(' + run.toString() + ')();'; document.documentElement.appendChild(script); }