From 49f9cc7edc531d2407b76baa44725216d120a1c1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 6 Dec 2021 01:33:41 +0100 Subject: [PATCH 01/35] modifiy sidebar code --- .../InvenTree/static/script/jstree/jstree.js | 8681 +++++++++++++++++ .../static/script/jstree/jstree.min.js | 6 + .../jstree/themes/default-dark/32px.png | Bin 0 -> 1525 bytes .../jstree/themes/default-dark/40px.png | Bin 0 -> 6526 bytes .../jstree/themes/default-dark/style.css | 1150 +++ .../jstree/themes/default-dark/style.min.css | 1 + .../jstree/themes/default-dark/throbber.gif | Bin 0 -> 1464 bytes .../script/jstree/themes/default/32px.png | Bin 0 -> 5660 bytes .../script/jstree/themes/default/40px.png | Bin 0 -> 2215 bytes .../script/jstree/themes/default/style.css | 1106 +++ .../jstree/themes/default/style.min.css | 1 + .../script/jstree/themes/default/throbber.gif | Bin 0 -> 1464 bytes .../part/templates/part/part_sidebar.html | 1 + InvenTree/templates/base.html | 8 +- InvenTree/templates/sidebar_toggle.html | 4 +- 15 files changed, 10955 insertions(+), 3 deletions(-) create mode 100644 InvenTree/InvenTree/static/script/jstree/jstree.js create mode 100644 InvenTree/InvenTree/static/script/jstree/jstree.min.js create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default-dark/32px.png create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default-dark/40px.png create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.css create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.min.css create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default-dark/throbber.gif create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default/32px.png create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default/40px.png create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default/style.css create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default/style.min.css create mode 100644 InvenTree/InvenTree/static/script/jstree/themes/default/throbber.gif diff --git a/InvenTree/InvenTree/static/script/jstree/jstree.js b/InvenTree/InvenTree/static/script/jstree/jstree.js new file mode 100644 index 0000000000..0e59fc7642 --- /dev/null +++ b/InvenTree/InvenTree/static/script/jstree/jstree.js @@ -0,0 +1,8681 @@ +/*globals jQuery, define, module, exports, require, window, document, postMessage */ +(function (factory) { + "use strict"; + if (typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } + else if(typeof module !== 'undefined' && module.exports) { + module.exports = factory(require('jquery')); + } + else { + factory(jQuery); + } +}(function ($, undefined) { + "use strict"; +/*! + * jsTree 3.3.12 + * http://jstree.com/ + * + * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com) + * + * Licensed same as jquery - under the terms of the MIT License + * http://www.opensource.org/licenses/mit-license.php + */ +/*! + * if using jslint please allow for the jQuery global and use following options: + * jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true + */ +/*jshint -W083 */ + + // prevent another load? maybe there is a better way? + if($.jstree) { + return; + } + + /** + * ### jsTree core functionality + */ + + // internal variables + var instance_counter = 0, + ccp_node = false, + ccp_mode = false, + ccp_inst = false, + themes_loaded = [], + src = $('script:last').attr('src'), + document = window.document; // local variable is always faster to access then a global + + var setImmediate = window.setImmediate; + var Promise = window.Promise; + if (!setImmediate && Promise) { + // Good enough approximation of setImmediate + setImmediate = function (cb, arg) { + Promise.resolve(arg).then(cb); + }; + } + + /** + * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances. + * @name $.jstree + */ + $.jstree = { + /** + * specifies the jstree version in use + * @name $.jstree.version + */ + version : '3.3.12', + /** + * holds all the default options used when creating new instances + * @name $.jstree.defaults + */ + defaults : { + /** + * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]` + * @name $.jstree.defaults.plugins + */ + plugins : [] + }, + /** + * stores all loaded jstree plugins (used internally) + * @name $.jstree.plugins + */ + plugins : {}, + path : src && src.indexOf('/') !== -1 ? src.replace(/\/[^\/]+$/,'') : '', + idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g, + root : '#' + }; + + /** + * creates a jstree instance + * @name $.jstree.create(el [, options]) + * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector + * @param {Object} options options for this instance (extends `$.jstree.defaults`) + * @return {jsTree} the new instance + */ + $.jstree.create = function (el, options) { + var tmp = new $.jstree.core(++instance_counter), + opt = options; + options = $.extend(true, {}, $.jstree.defaults, options); + if(opt && opt.plugins) { + options.plugins = opt.plugins; + } + $.each(options.plugins, function (i, k) { + if(i !== 'core') { + tmp = tmp.plugin(k, options[k]); + } + }); + $(el).data('jstree', tmp); + tmp.init(el, options); + return tmp; + }; + /** + * remove all traces of jstree from the DOM and destroy all instances + * @name $.jstree.destroy() + */ + $.jstree.destroy = function () { + $('.jstree:jstree').jstree('destroy'); + $(document).off('.jstree'); + }; + /** + * the jstree class constructor, used only internally + * @private + * @name $.jstree.core(id) + * @param {Number} id this instance's index + */ + $.jstree.core = function (id) { + this._id = id; + this._cnt = 0; + this._wrk = null; + this._data = { + core : { + themes : { + name : false, + dots : false, + icons : false, + ellipsis : false + }, + selected : [], + last_error : {}, + working : false, + worker_queue : [], + focused : null + } + }; + }; + /** + * get a reference to an existing instance + * + * __Examples__ + * + * // provided a container with an ID of "tree", and a nested node with an ID of "branch" + * // all of there will return the same instance + * $.jstree.reference('tree'); + * $.jstree.reference('#tree'); + * $.jstree.reference($('#tree')); + * $.jstree.reference(document.getElementByID('tree')); + * $.jstree.reference('branch'); + * $.jstree.reference('#branch'); + * $.jstree.reference($('#branch')); + * $.jstree.reference(document.getElementByID('branch')); + * + * @name $.jstree.reference(needle) + * @param {DOMElement|jQuery|String} needle + * @return {jsTree|null} the instance or `null` if not found + */ + $.jstree.reference = function (needle) { + var tmp = null, + obj = null; + if(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; } + + if(!obj || !obj.length) { + try { obj = $(needle); } catch (ignore) { } + } + if(!obj || !obj.length) { + try { obj = $('#' + needle.replace($.jstree.idregex,'\\$&')); } catch (ignore) { } + } + if(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) { + tmp = obj; + } + else { + $('.jstree').each(function () { + var inst = $(this).data('jstree'); + if(inst && inst._model.data[needle]) { + tmp = inst; + return false; + } + }); + } + return tmp; + }; + /** + * Create an instance, get an instance or invoke a command on a instance. + * + * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken). + * + * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function). + * + * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`). + * + * In any other case - nothing is returned and chaining is not broken. + * + * __Examples__ + * + * $('#tree1').jstree(); // creates an instance + * $('#tree2').jstree({ plugins : [] }); // create an instance with some options + * $('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments + * $('#tree2').jstree(); // get an existing instance (or create an instance) + * $('#tree2').jstree(true); // get an existing instance (will not create new instance) + * $('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method) + * + * @name $().jstree([arg]) + * @param {String|Object} arg + * @return {Mixed} + */ + $.fn.jstree = function (arg) { + // check for string argument + var is_method = (typeof arg === 'string'), + args = Array.prototype.slice.call(arguments, 1), + result = null; + if(arg === true && !this.length) { return false; } + this.each(function () { + // get the instance (if there is one) and method (if it exists) + var instance = $.jstree.reference(this), + method = is_method && instance ? instance[arg] : null; + // if calling a method, and method is available - execute on the instance + result = is_method && method ? + method.apply(instance, args) : + null; + // if there is no instance and no method is being called - create one + if(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) { + $.jstree.create(this, arg); + } + // if there is an instance and no method is called - return the instance + if( (instance && !is_method) || arg === true ) { + result = instance || false; + } + // if there was a method call which returned a result - break and return the value + if(result !== null && result !== undefined) { + return false; + } + }); + // if there was a method call with a valid return value - return that, otherwise continue the chain + return result !== null && result !== undefined ? + result : this; + }; + /** + * used to find elements containing an instance + * + * __Examples__ + * + * $('div:jstree').each(function () { + * $(this).jstree('destroy'); + * }); + * + * @name $(':jstree') + * @return {jQuery} + */ + $.expr.pseudos.jstree = $.expr.createPseudo(function(search) { + return function(a) { + return $(a).hasClass('jstree') && + $(a).data('jstree') !== undefined; + }; + }); + + /** + * stores all defaults for the core + * @name $.jstree.defaults.core + */ + $.jstree.defaults.core = { + /** + * data configuration + * + * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items). + * + * You can also pass in a HTML string or a JSON array here. + * + * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree. + * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used. + * + * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result. + * + * __Examples__ + * + * // AJAX + * $('#tree').jstree({ + * 'core' : { + * 'data' : { + * 'url' : '/get/children/', + * 'data' : function (node) { + * return { 'id' : node.id }; + * } + * } + * }); + * + * // direct data + * $('#tree').jstree({ + * 'core' : { + * 'data' : [ + * 'Simple root node', + * { + * 'id' : 'node_2', + * 'text' : 'Root node with options', + * 'state' : { 'opened' : true, 'selected' : true }, + * 'children' : [ { 'text' : 'Child 1' }, 'Child 2'] + * } + * ] + * } + * }); + * + * // function + * $('#tree').jstree({ + * 'core' : { + * 'data' : function (obj, callback) { + * callback.call(this, ['Root 1', 'Root 2']); + * } + * }); + * + * @name $.jstree.defaults.core.data + */ + data : false, + /** + * configure the various strings used throughout the tree + * + * You can use an object where the key is the string you need to replace and the value is your replacement. + * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement. + * If left as `false` no replacement is made. + * + * __Examples__ + * + * $('#tree').jstree({ + * 'core' : { + * 'strings' : { + * 'Loading ...' : 'Please wait ...' + * } + * } + * }); + * + * @name $.jstree.defaults.core.strings + */ + strings : false, + /** + * determines what happens when a user tries to modify the structure of the tree + * If left as `false` all operations like create, rename, delete, move or copy are prevented. + * You can set this to `true` to allow all interactions or use a function to have better control. + * + * __Examples__ + * + * $('#tree').jstree({ + * 'core' : { + * 'check_callback' : function (operation, node, node_parent, node_position, more) { + * // operation can be 'create_node', 'rename_node', 'delete_node', 'move_node', 'copy_node' or 'edit' + * // in case of 'rename_node' node_position is filled with the new node name + * return operation === 'rename_node' ? true : false; + * } + * } + * }); + * + * @name $.jstree.defaults.core.check_callback + */ + check_callback : false, + /** + * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc) + * @name $.jstree.defaults.core.error + */ + error : $.noop, + /** + * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`) + * @name $.jstree.defaults.core.animation + */ + animation : 200, + /** + * a boolean indicating if multiple nodes can be selected + * @name $.jstree.defaults.core.multiple + */ + multiple : true, + /** + * theme configuration object + * @name $.jstree.defaults.core.themes + */ + themes : { + /** + * the name of the theme to use (if left as `false` the default theme is used) + * @name $.jstree.defaults.core.themes.name + */ + name : false, + /** + * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme. + * @name $.jstree.defaults.core.themes.url + */ + url : false, + /** + * the location of all jstree themes - only used if `url` is set to `true` + * @name $.jstree.defaults.core.themes.dir + */ + dir : false, + /** + * a boolean indicating if connecting dots are shown + * @name $.jstree.defaults.core.themes.dots + */ + dots : true, + /** + * a boolean indicating if node icons are shown + * @name $.jstree.defaults.core.themes.icons + */ + icons : true, + /** + * a boolean indicating if node ellipsis should be shown - this only works with a fixed with on the container + * @name $.jstree.defaults.core.themes.ellipsis + */ + ellipsis : false, + /** + * a boolean indicating if the tree background is striped + * @name $.jstree.defaults.core.themes.stripes + */ + stripes : false, + /** + * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants) + * @name $.jstree.defaults.core.themes.variant + */ + variant : false, + /** + * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`. + * @name $.jstree.defaults.core.themes.responsive + */ + responsive : false + }, + /** + * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user) + * @name $.jstree.defaults.core.expand_selected_onload + */ + expand_selected_onload : true, + /** + * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true` + * @name $.jstree.defaults.core.worker + */ + worker : true, + /** + * Force node text to plain text (and escape HTML). Defaults to `false` + * @name $.jstree.defaults.core.force_text + */ + force_text : false, + /** + * Should the node be toggled if the text is double clicked. Defaults to `true` + * @name $.jstree.defaults.core.dblclick_toggle + */ + dblclick_toggle : true, + /** + * Should the loaded nodes be part of the state. Defaults to `false` + * @name $.jstree.defaults.core.loaded_state + */ + loaded_state : false, + /** + * Should the last active node be focused when the tree container is blurred and the focused again. This helps working with screen readers. Defaults to `true` + * @name $.jstree.defaults.core.restore_focus + */ + restore_focus : true, + /** + * Force to compute and set "aria-setsize" and "aria-posinset" explicitly for each treeitem. + * Some browsers may compute incorrect elements position and produce wrong announcements for screen readers. Defaults to `false` + * @name $.jstree.defaults.core.compute_elements_positions + */ + compute_elements_positions : false, + /** + * Default keyboard shortcuts (an object where each key is the button name or combo - like 'enter', 'ctrl-space', 'p', etc and the value is the function to execute in the instance's scope) + * @name $.jstree.defaults.core.keyboard + */ + keyboard : { + 'ctrl-space': function (e) { + // aria defines space only with Ctrl + e.type = "click"; + $(e.currentTarget).trigger(e); + }, + 'enter': function (e) { + // enter + e.type = "click"; + $(e.currentTarget).trigger(e); + }, + 'left': function (e) { + // left + e.preventDefault(); + if(this.is_open(e.currentTarget)) { + this.close_node(e.currentTarget); + } + else { + var o = this.get_parent(e.currentTarget); + if(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').trigger('focus'); } + } + }, + 'up': function (e) { + // up + e.preventDefault(); + var o = this.get_prev_dom(e.currentTarget); + if(o && o.length) { o.children('.jstree-anchor').trigger('focus'); } + }, + 'right': function (e) { + // right + e.preventDefault(); + if(this.is_closed(e.currentTarget)) { + this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').trigger('focus'); }); + } + else if (this.is_open(e.currentTarget)) { + var o = this.get_node(e.currentTarget, true).children('.jstree-children')[0]; + if(o) { $(this._firstChild(o)).children('.jstree-anchor').trigger('focus'); } + } + }, + 'down': function (e) { + // down + e.preventDefault(); + var o = this.get_next_dom(e.currentTarget); + if(o && o.length) { o.children('.jstree-anchor').trigger('focus'); } + }, + '*': function (e) { + // aria defines * on numpad as open_all - not very common + this.open_all(); + }, + 'home': function (e) { + // home + e.preventDefault(); + var o = this._firstChild(this.get_container_ul()[0]); + if(o) { $(o).children('.jstree-anchor').filter(':visible').trigger('focus'); } + }, + 'end': function (e) { + // end + e.preventDefault(); + this.element.find('.jstree-anchor').filter(':visible').last().trigger('focus'); + }, + 'f2': function (e) { + // f2 - safe to include - if check_callback is false it will fail + e.preventDefault(); + this.edit(e.currentTarget); + } + } + }; + $.jstree.core.prototype = { + /** + * used to decorate an instance with a plugin. Used internally. + * @private + * @name plugin(deco [, opts]) + * @param {String} deco the plugin to decorate with + * @param {Object} opts options for the plugin + * @return {jsTree} + */ + plugin : function (deco, opts) { + var Child = $.jstree.plugins[deco]; + if(Child) { + this._data[deco] = {}; + Child.prototype = this; + return new Child(opts, this); + } + return this; + }, + /** + * initialize the instance. Used internally. + * @private + * @name init(el, optons) + * @param {DOMElement|jQuery|String} el the element we are transforming + * @param {Object} options options for this instance + * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree + */ + init : function (el, options) { + this._model = { + data : {}, + changed : [], + force_full_redraw : false, + redraw_timeout : false, + default_state : { + loaded : true, + opened : false, + selected : false, + disabled : false + } + }; + this._model.data[$.jstree.root] = { + id : $.jstree.root, + parent : null, + parents : [], + children : [], + children_d : [], + state : { loaded : false } + }; + + this.element = $(el).addClass('jstree jstree-' + this._id); + this.settings = options; + + this._data.core.ready = false; + this._data.core.loaded = false; + this._data.core.rtl = (this.element.css("direction") === "rtl"); + this.element[this._data.core.rtl ? 'addClass' : 'removeClass']("jstree-rtl"); + this.element.attr('role','tree'); + if(this.settings.core.multiple) { + this.element.attr('aria-multiselectable', true); + } + if(!this.element.attr('tabindex')) { + this.element.attr('tabindex','0'); + } + + this.bind(); + /** + * triggered after all events are bound + * @event + * @name init.jstree + */ + this.trigger("init"); + + this._data.core.original_container_html = this.element.find(" > ul > li").clone(true); + this._data.core.original_container_html + .find("li").addBack() + .contents().filter(function() { + return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue)); + }) + .remove(); + this.element.html("<"+"ul class='jstree-container-ul jstree-children' role='group'><"+"li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='none'><"+"a class='jstree-anchor' role='treeitem' href='#'>" + this.get_string("Loading ...") + ""); + this.element.attr('aria-activedescendant','j' + this._id + '_loading'); + this._data.core.li_height = this.get_container_ul().children("li").first().outerHeight() || 24; + this._data.core.node = this._create_prototype_node(); + /** + * triggered after the loading text is shown and before loading starts + * @event + * @name loading.jstree + */ + this.trigger("loading"); + this.load_node($.jstree.root); + }, + /** + * destroy an instance + * @name destroy() + * @param {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact + */ + destroy : function (keep_html) { + /** + * triggered before the tree is destroyed + * @event + * @name destroy.jstree + */ + this.trigger("destroy"); + if(this._wrk) { + try { + window.URL.revokeObjectURL(this._wrk); + this._wrk = null; + } + catch (ignore) { } + } + if(!keep_html) { this.element.empty(); } + this.teardown(); + }, + /** + * Create a prototype node + * @name _create_prototype_node() + * @return {DOMElement} + */ + _create_prototype_node : function () { + var _node = document.createElement('LI'), _temp1, _temp2; + _node.setAttribute('role', 'none'); + _temp1 = document.createElement('I'); + _temp1.className = 'jstree-icon jstree-ocl'; + _temp1.setAttribute('role', 'presentation'); + _node.appendChild(_temp1); + _temp1 = document.createElement('A'); + _temp1.className = 'jstree-anchor'; + _temp1.setAttribute('href','#'); + _temp1.setAttribute('tabindex','-1'); + _temp1.setAttribute('role', 'treeitem'); + _temp2 = document.createElement('I'); + _temp2.className = 'jstree-icon jstree-themeicon'; + _temp2.setAttribute('role', 'presentation'); + _temp1.appendChild(_temp2); + _node.appendChild(_temp1); + _temp1 = _temp2 = null; + + return _node; + }, + _kbevent_to_func : function (e) { + var keys = { + 8: "Backspace", 9: "Tab", 13: "Enter", 19: "Pause", 27: "Esc", + 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", + 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "Print", 45: "Insert", + 46: "Delete", 96: "Numpad0", 97: "Numpad1", 98: "Numpad2", 99 : "Numpad3", + 100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7", + 104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1", + 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", + 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock", + 145: "Scrolllock", 16: 'Shift', 17: 'Ctrl', 18: 'Alt', + 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', + 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a', + 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', + 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', + 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', + 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.', + 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', + 219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*', 173: '-' + }; + var parts = []; + if (e.ctrlKey) { parts.push('ctrl'); } + if (e.altKey) { parts.push('alt'); } + if (e.shiftKey) { parts.push('shift'); } + parts.push(keys[e.which] || e.which); + parts = parts.sort().join('-').toLowerCase(); + if (parts === 'shift-shift' || parts === 'ctrl-ctrl' || parts === 'alt-alt') { + return null; + } + + var kb = this.settings.core.keyboard, i, tmp; + for (i in kb) { + if (kb.hasOwnProperty(i)) { + tmp = i; + if (tmp !== '-' && tmp !== '+') { + tmp = tmp.replace('--', '-MINUS').replace('+-', '-MINUS').replace('++', '-PLUS').replace('-+', '-PLUS'); + tmp = tmp.split(/-|\+/).sort().join('-').replace('MINUS', '-').replace('PLUS', '+').toLowerCase(); + } + if (tmp === parts) { + return kb[i]; + } + } + } + return null; + }, + /** + * part of the destroying of an instance. Used internally. + * @private + * @name teardown() + */ + teardown : function () { + this.unbind(); + this.element + .removeClass('jstree') + .removeData('jstree') + .find("[class^='jstree']") + .addBack() + .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); }); + this.element = null; + }, + /** + * bind all events. Used internally. + * @private + * @name bind() + */ + bind : function () { + var word = '', + tout = null, + was_click = 0; + this.element + .on("dblclick.jstree", function (e) { + if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; } + if(document.selection && document.selection.empty) { + document.selection.empty(); + } + else { + if(window.getSelection) { + var sel = window.getSelection(); + try { + sel.removeAllRanges(); + sel.collapse(); + } catch (ignore) { } + } + } + }) + .on("mousedown.jstree", function (e) { + if(e.target === this.element[0]) { + e.preventDefault(); // prevent losing focus when clicking scroll arrows (FF, Chrome) + was_click = +(new Date()); // ie does not allow to prevent losing focus + } + }.bind(this)) + .on("mousedown.jstree", ".jstree-ocl", function (e) { + e.preventDefault(); // prevent any node inside from losing focus when clicking the open/close icon + }) + .on("click.jstree", ".jstree-ocl", function (e) { + this.toggle_node(e.target); + }.bind(this)) + .on("dblclick.jstree", ".jstree-anchor", function (e) { + if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; } + if(this.settings.core.dblclick_toggle) { + this.toggle_node(e.target); + } + }.bind(this)) + .on("click.jstree", ".jstree-anchor", function (e) { + e.preventDefault(); + if(e.currentTarget !== document.activeElement) { $(e.currentTarget).trigger('focus'); } + this.activate_node(e.currentTarget, e); + }.bind(this)) + .on('keydown.jstree', '.jstree-anchor', function (e) { + if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; } + if(this._data.core.rtl) { + if(e.which === 37) { e.which = 39; } + else if(e.which === 39) { e.which = 37; } + } + var f = this._kbevent_to_func(e); + if (f) { + var r = f.call(this, e); + if (r === false || r === true) { + return r; + } + } + }.bind(this)) + .on("load_node.jstree", function (e, data) { + if(data.status) { + if(data.node.id === $.jstree.root && !this._data.core.loaded) { + this._data.core.loaded = true; + if(this._firstChild(this.get_container_ul()[0])) { + this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id); + } + /** + * triggered after the root node is loaded for the first time + * @event + * @name loaded.jstree + */ + this.trigger("loaded"); + } + if(!this._data.core.ready) { + setTimeout(function() { + if(this.element && !this.get_container_ul().find('.jstree-loading').length) { + this._data.core.ready = true; + if(this._data.core.selected.length) { + if(this.settings.core.expand_selected_onload) { + var tmp = [], i, j; + for(i = 0, j = this._data.core.selected.length; i < j; i++) { + tmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents); + } + tmp = $.vakata.array_unique(tmp); + for(i = 0, j = tmp.length; i < j; i++) { + this.open_node(tmp[i], false, 0); + } + } + this.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected }); + } + /** + * triggered after all nodes are finished loading + * @event + * @name ready.jstree + */ + this.trigger("ready"); + } + }.bind(this), 0); + } + } + }.bind(this)) + // quick searching when the tree is focused + .on('keypress.jstree', function (e) { + if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; } + if(tout) { clearTimeout(tout); } + tout = setTimeout(function () { + word = ''; + }, 500); + + var chr = String.fromCharCode(e.which).toLowerCase(), + col = this.element.find('.jstree-anchor').filter(':visible'), + ind = col.index(document.activeElement) || 0, + end = false; + word += chr; + + // match for whole word from current node down (including the current node) + if(word.length > 1) { + col.slice(ind).each(function (i, v) { + if($(v).text().toLowerCase().indexOf(word) === 0) { + $(v).trigger('focus'); + end = true; + return false; + } + }.bind(this)); + if(end) { return; } + + // match for whole word from the beginning of the tree + col.slice(0, ind).each(function (i, v) { + if($(v).text().toLowerCase().indexOf(word) === 0) { + $(v).trigger('focus'); + end = true; + return false; + } + }.bind(this)); + if(end) { return; } + } + // list nodes that start with that letter (only if word consists of a single char) + if(new RegExp('^' + chr.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '+$').test(word)) { + // search for the next node starting with that letter + col.slice(ind + 1).each(function (i, v) { + if($(v).text().toLowerCase().charAt(0) === chr) { + $(v).trigger('focus'); + end = true; + return false; + } + }.bind(this)); + if(end) { return; } + + // search from the beginning + col.slice(0, ind + 1).each(function (i, v) { + if($(v).text().toLowerCase().charAt(0) === chr) { + $(v).trigger('focus'); + end = true; + return false; + } + }.bind(this)); + if(end) { return; } + } + }.bind(this)) + // THEME RELATED + .on("init.jstree", function () { + var s = this.settings.core.themes; + this._data.core.themes.dots = s.dots; + this._data.core.themes.stripes = s.stripes; + this._data.core.themes.icons = s.icons; + this._data.core.themes.ellipsis = s.ellipsis; + this.set_theme(s.name || "default", s.url); + this.set_theme_variant(s.variant); + }.bind(this)) + .on("loading.jstree", function () { + this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ](); + this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ](); + this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ](); + this[ this._data.core.themes.ellipsis ? "show_ellipsis" : "hide_ellipsis" ](); + }.bind(this)) + .on('blur.jstree', '.jstree-anchor', function (e) { + this._data.core.focused = null; + $(e.currentTarget).filter('.jstree-hovered').trigger('mouseleave'); + this.element.attr('tabindex', '0'); + }.bind(this)) + .on('focus.jstree', '.jstree-anchor', function (e) { + var tmp = this.get_node(e.currentTarget); + if(tmp && tmp.id) { + this._data.core.focused = tmp.id; + } + this.element.find('.jstree-hovered').not(e.currentTarget).trigger('mouseleave'); + $(e.currentTarget).trigger('mouseenter'); + this.element.attr('tabindex', '-1'); + }.bind(this)) + .on('focus.jstree', function () { + if(+(new Date()) - was_click > 500 && !this._data.core.focused && this.settings.core.restore_focus) { + was_click = 0; + var act = this.get_node(this.element.attr('aria-activedescendant'), true); + if(act) { + act.find('> .jstree-anchor').trigger('focus'); + } + } + }.bind(this)) + .on('mouseenter.jstree', '.jstree-anchor', function (e) { + this.hover_node(e.currentTarget); + }.bind(this)) + .on('mouseleave.jstree', '.jstree-anchor', function (e) { + this.dehover_node(e.currentTarget); + }.bind(this)); + }, + /** + * part of the destroying of an instance. Used internally. + * @private + * @name unbind() + */ + unbind : function () { + this.element.off('.jstree'); + $(document).off('.jstree-' + this._id); + }, + /** + * trigger an event. Used internally. + * @private + * @name trigger(ev [, data]) + * @param {String} ev the name of the event to trigger + * @param {Object} data additional data to pass with the event + */ + trigger : function (ev, data) { + if(!data) { + data = {}; + } + data.instance = this; + this.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data); + }, + /** + * returns the jQuery extended instance container + * @name get_container() + * @return {jQuery} + */ + get_container : function () { + return this.element; + }, + /** + * returns the jQuery extended main UL node inside the instance container. Used internally. + * @private + * @name get_container_ul() + * @return {jQuery} + */ + get_container_ul : function () { + return this.element.children(".jstree-children").first(); + }, + /** + * gets string replacements (localization). Used internally. + * @private + * @name get_string(key) + * @param {String} key + * @return {String} + */ + get_string : function (key) { + var a = this.settings.core.strings; + if($.vakata.is_function(a)) { return a.call(this, key); } + if(a && a[key]) { return a[key]; } + return key; + }, + /** + * gets the first child of a DOM node. Used internally. + * @private + * @name _firstChild(dom) + * @param {DOMElement} dom + * @return {DOMElement} + */ + _firstChild : function (dom) { + dom = dom ? dom.firstChild : null; + while(dom !== null && dom.nodeType !== 1) { + dom = dom.nextSibling; + } + return dom; + }, + /** + * gets the next sibling of a DOM node. Used internally. + * @private + * @name _nextSibling(dom) + * @param {DOMElement} dom + * @return {DOMElement} + */ + _nextSibling : function (dom) { + dom = dom ? dom.nextSibling : null; + while(dom !== null && dom.nodeType !== 1) { + dom = dom.nextSibling; + } + return dom; + }, + /** + * gets the previous sibling of a DOM node. Used internally. + * @private + * @name _previousSibling(dom) + * @param {DOMElement} dom + * @return {DOMElement} + */ + _previousSibling : function (dom) { + dom = dom ? dom.previousSibling : null; + while(dom !== null && dom.nodeType !== 1) { + dom = dom.previousSibling; + } + return dom; + }, + /** + * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc) + * @name get_node(obj [, as_dom]) + * @param {mixed} obj + * @param {Boolean} as_dom + * @return {Object|jQuery} + */ + get_node : function (obj, as_dom) { + if(obj && obj.id) { + obj = obj.id; + } + if (obj instanceof $ && obj.length && obj[0].id) { + obj = obj[0].id; + } + var dom; + try { + if(this._model.data[obj]) { + obj = this._model.data[obj]; + } + else if(typeof obj === "string" && this._model.data[obj.replace(/^#/, '')]) { + obj = this._model.data[obj.replace(/^#/, '')]; + } + else if(typeof obj === "string" && (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) { + obj = this._model.data[dom.closest('.jstree-node').attr('id')]; + } + else if((dom = this.element.find(obj)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) { + obj = this._model.data[dom.closest('.jstree-node').attr('id')]; + } + else if((dom = this.element.find(obj)).length && dom.hasClass('jstree')) { + obj = this._model.data[$.jstree.root]; + } + else { + return false; + } + + if(as_dom) { + obj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element); + } + return obj; + } catch (ex) { return false; } + }, + /** + * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array) + * @name get_path(obj [, glue, ids]) + * @param {mixed} obj the node + * @param {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned + * @param {Boolean} ids if set to true build the path using ID, otherwise node text is used + * @return {mixed} + */ + get_path : function (obj, glue, ids) { + obj = obj.parents ? obj : this.get_node(obj); + if(!obj || obj.id === $.jstree.root || !obj.parents) { + return false; + } + var i, j, p = []; + p.push(ids ? obj.id : obj.text); + for(i = 0, j = obj.parents.length; i < j; i++) { + p.push(ids ? obj.parents[i] : this.get_text(obj.parents[i])); + } + p = p.reverse().slice(1); + return glue ? p.join(glue) : p; + }, + /** + * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned. + * @name get_next_dom(obj [, strict]) + * @param {mixed} obj + * @param {Boolean} strict + * @return {jQuery} + */ + get_next_dom : function (obj, strict) { + var tmp; + obj = this.get_node(obj, true); + if(obj[0] === this.element[0]) { + tmp = this._firstChild(this.get_container_ul()[0]); + while (tmp && tmp.offsetHeight === 0) { + tmp = this._nextSibling(tmp); + } + return tmp ? $(tmp) : false; + } + if(!obj || !obj.length) { + return false; + } + if(strict) { + tmp = obj[0]; + do { + tmp = this._nextSibling(tmp); + } while (tmp && tmp.offsetHeight === 0); + return tmp ? $(tmp) : false; + } + if(obj.hasClass("jstree-open")) { + tmp = this._firstChild(obj.children('.jstree-children')[0]); + while (tmp && tmp.offsetHeight === 0) { + tmp = this._nextSibling(tmp); + } + if(tmp !== null) { + return $(tmp); + } + } + tmp = obj[0]; + do { + tmp = this._nextSibling(tmp); + } while (tmp && tmp.offsetHeight === 0); + if(tmp !== null) { + return $(tmp); + } + return obj.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first(); + }, + /** + * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned. + * @name get_prev_dom(obj [, strict]) + * @param {mixed} obj + * @param {Boolean} strict + * @return {jQuery} + */ + get_prev_dom : function (obj, strict) { + var tmp; + obj = this.get_node(obj, true); + if(obj[0] === this.element[0]) { + tmp = this.get_container_ul()[0].lastChild; + while (tmp && tmp.offsetHeight === 0) { + tmp = this._previousSibling(tmp); + } + return tmp ? $(tmp) : false; + } + if(!obj || !obj.length) { + return false; + } + if(strict) { + tmp = obj[0]; + do { + tmp = this._previousSibling(tmp); + } while (tmp && tmp.offsetHeight === 0); + return tmp ? $(tmp) : false; + } + tmp = obj[0]; + do { + tmp = this._previousSibling(tmp); + } while (tmp && tmp.offsetHeight === 0); + if(tmp !== null) { + obj = $(tmp); + while(obj.hasClass("jstree-open")) { + obj = obj.children(".jstree-children").first().children(".jstree-node:visible:last"); + } + return obj; + } + tmp = obj[0].parentNode.parentNode; + return tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false; + }, + /** + * get the parent ID of a node + * @name get_parent(obj) + * @param {mixed} obj + * @return {String} + */ + get_parent : function (obj) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + return obj.parent; + }, + /** + * get a jQuery collection of all the children of a node (node must be rendered), returns false on error + * @name get_children_dom(obj) + * @param {mixed} obj + * @return {jQuery} + */ + get_children_dom : function (obj) { + obj = this.get_node(obj, true); + if(obj[0] === this.element[0]) { + return this.get_container_ul().children(".jstree-node"); + } + if(!obj || !obj.length) { + return false; + } + return obj.children(".jstree-children").children(".jstree-node"); + }, + /** + * checks if a node has children + * @name is_parent(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_parent : function (obj) { + obj = this.get_node(obj); + return obj && (obj.state.loaded === false || obj.children.length > 0); + }, + /** + * checks if a node is loaded (its children are available) + * @name is_loaded(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_loaded : function (obj) { + obj = this.get_node(obj); + return obj && obj.state.loaded; + }, + /** + * check if a node is currently loading (fetching children) + * @name is_loading(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_loading : function (obj) { + obj = this.get_node(obj); + return obj && obj.state && obj.state.loading; + }, + /** + * check if a node is opened + * @name is_open(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_open : function (obj) { + obj = this.get_node(obj); + return obj && obj.state.opened; + }, + /** + * check if a node is in a closed state + * @name is_closed(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_closed : function (obj) { + obj = this.get_node(obj); + return obj && this.is_parent(obj) && !obj.state.opened; + }, + /** + * check if a node has no children + * @name is_leaf(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_leaf : function (obj) { + return !this.is_parent(obj); + }, + /** + * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array. + * @name load_node(obj [, callback]) + * @param {mixed} obj + * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status + * @return {Boolean} + * @trigger load_node.jstree + */ + load_node : function (obj, callback) { + var k, l, i, j, c; + if($.vakata.is_array(obj)) { + this._load_nodes(obj.slice(), callback); + return true; + } + obj = this.get_node(obj); + if(!obj) { + if(callback) { callback.call(this, obj, false); } + return false; + } + // if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again? + if(obj.state.loaded) { + obj.state.loaded = false; + for(i = 0, j = obj.parents.length; i < j; i++) { + this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) { + return $.inArray(v, obj.children_d) === -1; + }); + } + for(k = 0, l = obj.children_d.length; k < l; k++) { + if(this._model.data[obj.children_d[k]].state.selected) { + c = true; + } + delete this._model.data[obj.children_d[k]]; + } + if (c) { + this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) { + return $.inArray(v, obj.children_d) === -1; + }); + } + obj.children = []; + obj.children_d = []; + if(c) { + this.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected }); + } + } + obj.state.failed = false; + obj.state.loading = true; + this.get_node(obj, true).addClass("jstree-loading").attr('aria-busy',true); + this._load_node(obj, function (status) { + obj = this._model.data[obj.id]; + obj.state.loading = false; + obj.state.loaded = status; + obj.state.failed = !obj.state.loaded; + var dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false; + for(i = 0, j = obj.children.length; i < j; i++) { + if(m[obj.children[i]] && !m[obj.children[i]].state.hidden) { + has_children = true; + break; + } + } + if(obj.state.loaded && dom && dom.length) { + dom.removeClass('jstree-closed jstree-open jstree-leaf'); + if (!has_children) { + dom.addClass('jstree-leaf'); + } + else { + if (obj.id !== '#') { + dom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed'); + } + } + } + dom.removeClass("jstree-loading").attr('aria-busy',false); + /** + * triggered after a node is loaded + * @event + * @name load_node.jstree + * @param {Object} node the node that was loading + * @param {Boolean} status was the node loaded successfully + */ + this.trigger('load_node', { "node" : obj, "status" : status }); + if(callback) { + callback.call(this, obj, status); + } + }.bind(this)); + return true; + }, + /** + * load an array of nodes (will also load unavailable nodes as soon as they appear in the structure). Used internally. + * @private + * @name _load_nodes(nodes [, callback]) + * @param {array} nodes + * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes + */ + _load_nodes : function (nodes, callback, is_callback, force_reload) { + var r = true, + c = function () { this._load_nodes(nodes, callback, true); }, + m = this._model.data, i, j, tmp = []; + for(i = 0, j = nodes.length; i < j; i++) { + if(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) { + if(!this.is_loading(nodes[i])) { + this.load_node(nodes[i], c); + } + r = false; + } + } + if(r) { + for(i = 0, j = nodes.length; i < j; i++) { + if(m[nodes[i]] && m[nodes[i]].state.loaded) { + tmp.push(nodes[i]); + } + } + if(callback && !callback.done) { + callback.call(this, tmp); + callback.done = true; + } + } + }, + /** + * loads all unloaded nodes + * @name load_all([obj, callback]) + * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree + * @param {function} callback a function to be executed once loading all the nodes is complete, + * @trigger load_all.jstree + */ + load_all : function (obj, callback) { + if(!obj) { obj = $.jstree.root; } + obj = this.get_node(obj); + if(!obj) { return false; } + var to_load = [], + m = this._model.data, + c = m[obj.id].children_d, + i, j; + if(obj.state && !obj.state.loaded) { + to_load.push(obj.id); + } + for(i = 0, j = c.length; i < j; i++) { + if(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) { + to_load.push(c[i]); + } + } + if(to_load.length) { + this._load_nodes(to_load, function () { + this.load_all(obj, callback); + }); + } + else { + /** + * triggered after a load_all call completes + * @event + * @name load_all.jstree + * @param {Object} node the recursively loaded node + */ + if(callback) { callback.call(this, obj); } + this.trigger('load_all', { "node" : obj }); + } + }, + /** + * handles the actual loading of a node. Used only internally. + * @private + * @name _load_node(obj [, callback]) + * @param {mixed} obj + * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status + * @return {Boolean} + */ + _load_node : function (obj, callback) { + var s = this.settings.core.data, t; + var notTextOrCommentNode = function notTextOrCommentNode () { + return this.nodeType !== 3 && this.nodeType !== 8; + }; + // use original HTML + if(!s) { + if(obj.id === $.jstree.root) { + return this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) { + callback.call(this, status); + }); + } + else { + return callback.call(this, false); + } + // return callback.call(this, obj.id === $.jstree.root ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false); + } + if($.vakata.is_function(s)) { + return s.call(this, obj, function (d) { + if(d === false) { + callback.call(this, false); + } + else { + this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) { + callback.call(this, status); + }); + } + // return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d)); + }.bind(this)); + } + if(typeof s === 'object') { + if(s.url) { + s = $.extend(true, {}, s); + if($.vakata.is_function(s.url)) { + s.url = s.url.call(this, obj); + } + if($.vakata.is_function(s.data)) { + s.data = s.data.call(this, obj); + } + return $.ajax(s) + .done(function (d,t,x) { + var type = x.getResponseHeader('Content-Type'); + if((type && type.indexOf('json') !== -1) || typeof d === "object") { + return this._append_json_data(obj, d, function (status) { callback.call(this, status); }); + //return callback.call(this, this._append_json_data(obj, d)); + } + if((type && type.indexOf('html') !== -1) || typeof d === "string") { + return this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); }); + // return callback.call(this, this._append_html_data(obj, $(d))); + } + this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) }; + this.settings.core.error.call(this, this._data.core.last_error); + return callback.call(this, false); + }.bind(this)) + .fail(function (f) { + this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) }; + callback.call(this, false); + this.settings.core.error.call(this, this._data.core.last_error); + }.bind(this)); + } + if ($.vakata.is_array(s)) { + t = $.extend(true, [], s); + } else if ($.isPlainObject(s)) { + t = $.extend(true, {}, s); + } else { + t = s; + } + if(obj.id === $.jstree.root) { + return this._append_json_data(obj, t, function (status) { + callback.call(this, status); + }); + } + else { + this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) }; + this.settings.core.error.call(this, this._data.core.last_error); + return callback.call(this, false); + } + //return callback.call(this, (obj.id === $.jstree.root ? this._append_json_data(obj, t) : false) ); + } + if(typeof s === 'string') { + if(obj.id === $.jstree.root) { + return this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) { + callback.call(this, status); + }); + } + else { + this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) }; + this.settings.core.error.call(this, this._data.core.last_error); + return callback.call(this, false); + } + //return callback.call(this, (obj.id === $.jstree.root ? this._append_html_data(obj, $(s)) : false) ); + } + return callback.call(this, false); + }, + /** + * adds a node to the list of nodes to redraw. Used only internally. + * @private + * @name _node_changed(obj [, callback]) + * @param {mixed} obj + */ + _node_changed : function (obj) { + obj = this.get_node(obj); + if (obj && $.inArray(obj.id, this._model.changed) === -1) { + this._model.changed.push(obj.id); + } + }, + /** + * appends HTML content to the tree. Used internally. + * @private + * @name _append_html_data(obj, data) + * @param {mixed} obj the node to append to + * @param {String} data the HTML string to parse and append + * @trigger model.jstree, changed.jstree + */ + _append_html_data : function (dom, data, cb) { + dom = this.get_node(dom); + dom.children = []; + dom.children_d = []; + var dat = data.is('ul') ? data.children() : data, + par = dom.id, + chd = [], + dpc = [], + m = this._model.data, + p = m[par], + s = this._data.core.selected.length, + tmp, i, j; + dat.each(function (i, v) { + tmp = this._parse_model_from_html($(v), par, p.parents.concat()); + if(tmp) { + chd.push(tmp); + dpc.push(tmp); + if(m[tmp].children_d.length) { + dpc = dpc.concat(m[tmp].children_d); + } + } + }.bind(this)); + p.children = chd; + p.children_d = dpc; + for(i = 0, j = p.parents.length; i < j; i++) { + m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc); + } + /** + * triggered when new data is inserted to the tree model + * @event + * @name model.jstree + * @param {Array} nodes an array of node IDs + * @param {String} parent the parent ID of the nodes + */ + this.trigger('model', { "nodes" : dpc, 'parent' : par }); + if(par !== $.jstree.root) { + this._node_changed(par); + this.redraw(); + } + else { + this.get_container_ul().children('.jstree-initial-node').remove(); + this.redraw(true); + } + if(this._data.core.selected.length !== s) { + this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected }); + } + cb.call(this, true); + }, + /** + * appends JSON content to the tree. Used internally. + * @private + * @name _append_json_data(obj, data) + * @param {mixed} obj the node to append to + * @param {String} data the JSON object to parse and append + * @param {Boolean} force_processing internal param - do not set + * @trigger model.jstree, changed.jstree + */ + _append_json_data : function (dom, data, cb, force_processing) { + if(this.element === null) { return; } + dom = this.get_node(dom); + dom.children = []; + dom.children_d = []; + // *%$@!!! + if(data.d) { + data = data.d; + if(typeof data === "string") { + data = JSON.parse(data); + } + } + if(!$.vakata.is_array(data)) { data = [data]; } + var w = null, + args = { + 'df' : this._model.default_state, + 'dat' : data, + 'par' : dom.id, + 'm' : this._model.data, + 't_id' : this._id, + 't_cnt' : this._cnt, + 'sel' : this._data.core.selected + }, + inst = this, + func = function (data, undefined) { + if(data.data) { data = data.data; } + var dat = data.dat, + par = data.par, + chd = [], + dpc = [], + add = [], + df = data.df, + t_id = data.t_id, + t_cnt = data.t_cnt, + m = data.m, + p = m[par], + sel = data.sel, + tmp, i, j, rslt, + parse_flat = function (d, p, ps) { + if(!ps) { ps = []; } + else { ps = ps.concat(); } + if(p) { ps.unshift(p); } + var tid = d.id.toString(), + i, j, c, e, + tmp = { + id : tid, + text : d.text || '', + icon : d.icon !== undefined ? d.icon : true, + parent : p, + parents : ps, + children : d.children || [], + children_d : d.children_d || [], + data : d.data, + state : { }, + li_attr : { id : false }, + a_attr : { href : '#' }, + original : false + }; + for(i in df) { + if(df.hasOwnProperty(i)) { + tmp.state[i] = df[i]; + } + } + if(d && d.data && d.data.jstree && d.data.jstree.icon) { + tmp.icon = d.data.jstree.icon; + } + if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") { + tmp.icon = true; + } + if(d && d.data) { + tmp.data = d.data; + if(d.data.jstree) { + for(i in d.data.jstree) { + if(d.data.jstree.hasOwnProperty(i)) { + tmp.state[i] = d.data.jstree[i]; + } + } + } + } + if(d && typeof d.state === 'object') { + for (i in d.state) { + if(d.state.hasOwnProperty(i)) { + tmp.state[i] = d.state[i]; + } + } + } + if(d && typeof d.li_attr === 'object') { + for (i in d.li_attr) { + if(d.li_attr.hasOwnProperty(i)) { + tmp.li_attr[i] = d.li_attr[i]; + } + } + } + if(!tmp.li_attr.id) { + tmp.li_attr.id = tid; + } + if(d && typeof d.a_attr === 'object') { + for (i in d.a_attr) { + if(d.a_attr.hasOwnProperty(i)) { + tmp.a_attr[i] = d.a_attr[i]; + } + } + } + if(d && d.children && d.children === true) { + tmp.state.loaded = false; + tmp.children = []; + tmp.children_d = []; + } + m[tmp.id] = tmp; + for(i = 0, j = tmp.children.length; i < j; i++) { + c = parse_flat(m[tmp.children[i]], tmp.id, ps); + e = m[c]; + tmp.children_d.push(c); + if(e.children_d.length) { + tmp.children_d = tmp.children_d.concat(e.children_d); + } + } + delete d.data; + delete d.children; + m[tmp.id].original = d; + if(tmp.state.selected) { + add.push(tmp.id); + } + return tmp.id; + }, + parse_nest = function (d, p, ps) { + if(!ps) { ps = []; } + else { ps = ps.concat(); } + if(p) { ps.unshift(p); } + var tid = false, i, j, c, e, tmp; + do { + tid = 'j' + t_id + '_' + (++t_cnt); + } while(m[tid]); + + tmp = { + id : false, + text : typeof d === 'string' ? d : '', + icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true, + parent : p, + parents : ps, + children : [], + children_d : [], + data : null, + state : { }, + li_attr : { id : false }, + a_attr : { href : '#' }, + original : false + }; + for(i in df) { + if(df.hasOwnProperty(i)) { + tmp.state[i] = df[i]; + } + } + if(d && d.id) { tmp.id = d.id.toString(); } + if(d && d.text) { tmp.text = d.text; } + if(d && d.data && d.data.jstree && d.data.jstree.icon) { + tmp.icon = d.data.jstree.icon; + } + if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") { + tmp.icon = true; + } + if(d && d.data) { + tmp.data = d.data; + if(d.data.jstree) { + for(i in d.data.jstree) { + if(d.data.jstree.hasOwnProperty(i)) { + tmp.state[i] = d.data.jstree[i]; + } + } + } + } + if(d && typeof d.state === 'object') { + for (i in d.state) { + if(d.state.hasOwnProperty(i)) { + tmp.state[i] = d.state[i]; + } + } + } + if(d && typeof d.li_attr === 'object') { + for (i in d.li_attr) { + if(d.li_attr.hasOwnProperty(i)) { + tmp.li_attr[i] = d.li_attr[i]; + } + } + } + if(tmp.li_attr.id && !tmp.id) { + tmp.id = tmp.li_attr.id.toString(); + } + if(!tmp.id) { + tmp.id = tid; + } + if(!tmp.li_attr.id) { + tmp.li_attr.id = tmp.id; + } + if(d && typeof d.a_attr === 'object') { + for (i in d.a_attr) { + if(d.a_attr.hasOwnProperty(i)) { + tmp.a_attr[i] = d.a_attr[i]; + } + } + } + if(d && d.children && d.children.length) { + for(i = 0, j = d.children.length; i < j; i++) { + c = parse_nest(d.children[i], tmp.id, ps); + e = m[c]; + tmp.children.push(c); + if(e.children_d.length) { + tmp.children_d = tmp.children_d.concat(e.children_d); + } + } + tmp.children_d = tmp.children_d.concat(tmp.children); + } + if(d && d.children && d.children === true) { + tmp.state.loaded = false; + tmp.children = []; + tmp.children_d = []; + } + delete d.data; + delete d.children; + tmp.original = d; + m[tmp.id] = tmp; + if(tmp.state.selected) { + add.push(tmp.id); + } + return tmp.id; + }; + + if(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) { + // Flat JSON support (for easy import from DB): + // 1) convert to object (foreach) + for(i = 0, j = dat.length; i < j; i++) { + if(!dat[i].children) { + dat[i].children = []; + } + if(!dat[i].state) { + dat[i].state = {}; + } + m[dat[i].id.toString()] = dat[i]; + } + // 2) populate children (foreach) + for(i = 0, j = dat.length; i < j; i++) { + if (!m[dat[i].parent.toString()]) { + if (typeof inst !== "undefined") { + inst._data.core.last_error = { 'error' : 'parse', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Node with invalid parent', 'data' : JSON.stringify({ 'id' : dat[i].id.toString(), 'parent' : dat[i].parent.toString() }) }; + inst.settings.core.error.call(inst, inst._data.core.last_error); + } + continue; + } + + m[dat[i].parent.toString()].children.push(dat[i].id.toString()); + // populate parent.children_d + p.children_d.push(dat[i].id.toString()); + } + // 3) normalize && populate parents and children_d with recursion + for(i = 0, j = p.children.length; i < j; i++) { + tmp = parse_flat(m[p.children[i]], par, p.parents.concat()); + dpc.push(tmp); + if(m[tmp].children_d.length) { + dpc = dpc.concat(m[tmp].children_d); + } + } + for(i = 0, j = p.parents.length; i < j; i++) { + m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc); + } + // ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true; + rslt = { + 'cnt' : t_cnt, + 'mod' : m, + 'sel' : sel, + 'par' : par, + 'dpc' : dpc, + 'add' : add + }; + } + else { + for(i = 0, j = dat.length; i < j; i++) { + tmp = parse_nest(dat[i], par, p.parents.concat()); + if(tmp) { + chd.push(tmp); + dpc.push(tmp); + if(m[tmp].children_d.length) { + dpc = dpc.concat(m[tmp].children_d); + } + } + } + p.children = chd; + p.children_d = dpc; + for(i = 0, j = p.parents.length; i < j; i++) { + m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc); + } + rslt = { + 'cnt' : t_cnt, + 'mod' : m, + 'sel' : sel, + 'par' : par, + 'dpc' : dpc, + 'add' : add + }; + } + if(typeof window === 'undefined' || typeof window.document === 'undefined') { + postMessage(rslt); + } + else { + return rslt; + } + }, + rslt = function (rslt, worker) { + if(this.element === null) { return; } + this._cnt = rslt.cnt; + var i, m = this._model.data; + for (i in m) { + if (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) { + rslt.mod[i].state.loading = true; + } + } + this._model.data = rslt.mod; // breaks the reference in load_node - careful + + if(worker) { + var j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice(); + m = this._model.data; + // if selection was changed while calculating in worker + if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) { + // deselect nodes that are no longer selected + for(i = 0, j = r.length; i < j; i++) { + if($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) { + m[r[i]].state.selected = false; + } + } + // select nodes that were selected in the mean time + for(i = 0, j = s.length; i < j; i++) { + if($.inArray(s[i], r) === -1) { + m[s[i]].state.selected = true; + } + } + } + } + if(rslt.add.length) { + this._data.core.selected = this._data.core.selected.concat(rslt.add); + } + + this.trigger('model', { "nodes" : rslt.dpc, 'parent' : rslt.par }); + + if(rslt.par !== $.jstree.root) { + this._node_changed(rslt.par); + this.redraw(); + } + else { + // this.get_container_ul().children('.jstree-initial-node').remove(); + this.redraw(true); + } + if(rslt.add.length) { + this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected }); + } + + // If no worker, try to mimic worker behavioour, by invoking cb asynchronously + if (!worker && setImmediate) { + setImmediate(function(){ + cb.call(inst, true); + }); + } + else { + cb.call(inst, true); + } + }; + if(this.settings.core.worker && window.Blob && window.URL && window.Worker) { + try { + if(this._wrk === null) { + this._wrk = window.URL.createObjectURL( + new window.Blob( + ['self.onmessage = ' + func.toString()], + {type:"text/javascript"} + ) + ); + } + if(!this._data.core.working || force_processing) { + this._data.core.working = true; + w = new window.Worker(this._wrk); + w.onmessage = function (e) { + rslt.call(this, e.data, true); + try { w.terminate(); w = null; } catch(ignore) { } + if(this._data.core.worker_queue.length) { + this._append_json_data.apply(this, this._data.core.worker_queue.shift()); + } + else { + this._data.core.working = false; + } + }.bind(this); + if(!args.par) { + if(this._data.core.worker_queue.length) { + this._append_json_data.apply(this, this._data.core.worker_queue.shift()); + } + else { + this._data.core.working = false; + } + } + else { + w.postMessage(args); + } + } + else { + this._data.core.worker_queue.push([dom, data, cb, true]); + } + } + catch(e) { + rslt.call(this, func(args), false); + if(this._data.core.worker_queue.length) { + this._append_json_data.apply(this, this._data.core.worker_queue.shift()); + } + else { + this._data.core.working = false; + } + } + } + else { + rslt.call(this, func(args), false); + } + }, + /** + * parses a node from a jQuery object and appends them to the in memory tree model. Used internally. + * @private + * @name _parse_model_from_html(d [, p, ps]) + * @param {jQuery} d the jQuery object to parse + * @param {String} p the parent ID + * @param {Array} ps list of all parents + * @return {String} the ID of the object added to the model + */ + _parse_model_from_html : function (d, p, ps) { + if(!ps) { ps = []; } + else { ps = [].concat(ps); } + if(p) { ps.unshift(p); } + var c, e, m = this._model.data, + data = { + id : false, + text : false, + icon : true, + parent : p, + parents : ps, + children : [], + children_d : [], + data : null, + state : { }, + li_attr : { id : false }, + a_attr : { href : '#' }, + original : false + }, i, tmp, tid; + for(i in this._model.default_state) { + if(this._model.default_state.hasOwnProperty(i)) { + data.state[i] = this._model.default_state[i]; + } + } + tmp = $.vakata.attributes(d, true); + $.each(tmp, function (i, v) { + v = $.vakata.trim(v); + if(!v.length) { return true; } + data.li_attr[i] = v; + if(i === 'id') { + data.id = v.toString(); + } + }); + tmp = d.children('a').first(); + if(tmp.length) { + tmp = $.vakata.attributes(tmp, true); + $.each(tmp, function (i, v) { + v = $.vakata.trim(v); + if(v.length) { + data.a_attr[i] = v; + } + }); + } + tmp = d.children("a").first().length ? d.children("a").first().clone() : d.clone(); + tmp.children("ins, i, ul").remove(); + tmp = tmp.html(); + tmp = $('
').html(tmp); + data.text = this.settings.core.force_text ? tmp.text() : tmp.html(); + tmp = d.data(); + data.data = tmp ? $.extend(true, {}, tmp) : null; + data.state.opened = d.hasClass('jstree-open'); + data.state.selected = d.children('a').hasClass('jstree-clicked'); + data.state.disabled = d.children('a').hasClass('jstree-disabled'); + if(data.data && data.data.jstree) { + for(i in data.data.jstree) { + if(data.data.jstree.hasOwnProperty(i)) { + data.state[i] = data.data.jstree[i]; + } + } + } + tmp = d.children("a").children(".jstree-themeicon"); + if(tmp.length) { + data.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel'); + } + if(data.state.icon !== undefined) { + data.icon = data.state.icon; + } + if(data.icon === undefined || data.icon === null || data.icon === "") { + data.icon = true; + } + tmp = d.children("ul").children("li"); + do { + tid = 'j' + this._id + '_' + (++this._cnt); + } while(m[tid]); + data.id = data.li_attr.id ? data.li_attr.id.toString() : tid; + if(tmp.length) { + tmp.each(function (i, v) { + c = this._parse_model_from_html($(v), data.id, ps); + e = this._model.data[c]; + data.children.push(c); + if(e.children_d.length) { + data.children_d = data.children_d.concat(e.children_d); + } + }.bind(this)); + data.children_d = data.children_d.concat(data.children); + } + else { + if(d.hasClass('jstree-closed')) { + data.state.loaded = false; + } + } + if(data.li_attr['class']) { + data.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open',''); + } + if(data.a_attr['class']) { + data.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled',''); + } + m[data.id] = data; + if(data.state.selected) { + this._data.core.selected.push(data.id); + } + return data.id; + }, + /** + * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally. + * @private + * @name _parse_model_from_flat_json(d [, p, ps]) + * @param {Object} d the JSON object to parse + * @param {String} p the parent ID + * @param {Array} ps list of all parents + * @return {String} the ID of the object added to the model + */ + _parse_model_from_flat_json : function (d, p, ps) { + if(!ps) { ps = []; } + else { ps = ps.concat(); } + if(p) { ps.unshift(p); } + var tid = d.id.toString(), + m = this._model.data, + df = this._model.default_state, + i, j, c, e, + tmp = { + id : tid, + text : d.text || '', + icon : d.icon !== undefined ? d.icon : true, + parent : p, + parents : ps, + children : d.children || [], + children_d : d.children_d || [], + data : d.data, + state : { }, + li_attr : { id : false }, + a_attr : { href : '#' }, + original : false + }; + for(i in df) { + if(df.hasOwnProperty(i)) { + tmp.state[i] = df[i]; + } + } + if(d && d.data && d.data.jstree && d.data.jstree.icon) { + tmp.icon = d.data.jstree.icon; + } + if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") { + tmp.icon = true; + } + if(d && d.data) { + tmp.data = d.data; + if(d.data.jstree) { + for(i in d.data.jstree) { + if(d.data.jstree.hasOwnProperty(i)) { + tmp.state[i] = d.data.jstree[i]; + } + } + } + } + if(d && typeof d.state === 'object') { + for (i in d.state) { + if(d.state.hasOwnProperty(i)) { + tmp.state[i] = d.state[i]; + } + } + } + if(d && typeof d.li_attr === 'object') { + for (i in d.li_attr) { + if(d.li_attr.hasOwnProperty(i)) { + tmp.li_attr[i] = d.li_attr[i]; + } + } + } + if(!tmp.li_attr.id) { + tmp.li_attr.id = tid; + } + if(d && typeof d.a_attr === 'object') { + for (i in d.a_attr) { + if(d.a_attr.hasOwnProperty(i)) { + tmp.a_attr[i] = d.a_attr[i]; + } + } + } + if(d && d.children && d.children === true) { + tmp.state.loaded = false; + tmp.children = []; + tmp.children_d = []; + } + m[tmp.id] = tmp; + for(i = 0, j = tmp.children.length; i < j; i++) { + c = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps); + e = m[c]; + tmp.children_d.push(c); + if(e.children_d.length) { + tmp.children_d = tmp.children_d.concat(e.children_d); + } + } + delete d.data; + delete d.children; + m[tmp.id].original = d; + if(tmp.state.selected) { + this._data.core.selected.push(tmp.id); + } + return tmp.id; + }, + /** + * parses a node from a JSON object and appends it to the in memory tree model. Used internally. + * @private + * @name _parse_model_from_json(d [, p, ps]) + * @param {Object} d the JSON object to parse + * @param {String} p the parent ID + * @param {Array} ps list of all parents + * @return {String} the ID of the object added to the model + */ + _parse_model_from_json : function (d, p, ps) { + if(!ps) { ps = []; } + else { ps = ps.concat(); } + if(p) { ps.unshift(p); } + var tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp; + do { + tid = 'j' + this._id + '_' + (++this._cnt); + } while(m[tid]); + + tmp = { + id : false, + text : typeof d === 'string' ? d : '', + icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true, + parent : p, + parents : ps, + children : [], + children_d : [], + data : null, + state : { }, + li_attr : { id : false }, + a_attr : { href : '#' }, + original : false + }; + for(i in df) { + if(df.hasOwnProperty(i)) { + tmp.state[i] = df[i]; + } + } + if(d && d.id) { tmp.id = d.id.toString(); } + if(d && d.text) { tmp.text = d.text; } + if(d && d.data && d.data.jstree && d.data.jstree.icon) { + tmp.icon = d.data.jstree.icon; + } + if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") { + tmp.icon = true; + } + if(d && d.data) { + tmp.data = d.data; + if(d.data.jstree) { + for(i in d.data.jstree) { + if(d.data.jstree.hasOwnProperty(i)) { + tmp.state[i] = d.data.jstree[i]; + } + } + } + } + if(d && typeof d.state === 'object') { + for (i in d.state) { + if(d.state.hasOwnProperty(i)) { + tmp.state[i] = d.state[i]; + } + } + } + if(d && typeof d.li_attr === 'object') { + for (i in d.li_attr) { + if(d.li_attr.hasOwnProperty(i)) { + tmp.li_attr[i] = d.li_attr[i]; + } + } + } + if(tmp.li_attr.id && !tmp.id) { + tmp.id = tmp.li_attr.id.toString(); + } + if(!tmp.id) { + tmp.id = tid; + } + if(!tmp.li_attr.id) { + tmp.li_attr.id = tmp.id; + } + if(d && typeof d.a_attr === 'object') { + for (i in d.a_attr) { + if(d.a_attr.hasOwnProperty(i)) { + tmp.a_attr[i] = d.a_attr[i]; + } + } + } + if(d && d.children && d.children.length) { + for(i = 0, j = d.children.length; i < j; i++) { + c = this._parse_model_from_json(d.children[i], tmp.id, ps); + e = m[c]; + tmp.children.push(c); + if(e.children_d.length) { + tmp.children_d = tmp.children_d.concat(e.children_d); + } + } + tmp.children_d = tmp.children.concat(tmp.children_d); + } + if(d && d.children && d.children === true) { + tmp.state.loaded = false; + tmp.children = []; + tmp.children_d = []; + } + delete d.data; + delete d.children; + tmp.original = d; + m[tmp.id] = tmp; + if(tmp.state.selected) { + this._data.core.selected.push(tmp.id); + } + return tmp.id; + }, + /** + * redraws all nodes that need to be redrawn. Used internally. + * @private + * @name _redraw() + * @trigger redraw.jstree + */ + _redraw : function () { + var nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]), + f = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused; + for(i = 0, j = nodes.length; i < j; i++) { + tmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw); + if(tmp && this._model.force_full_redraw) { + f.appendChild(tmp); + } + } + if(this._model.force_full_redraw) { + f.className = this.get_container_ul()[0].className; + f.setAttribute('role','group'); + this.element.empty().append(f); + //this.get_container_ul()[0].appendChild(f); + } + if(fe !== null && this.settings.core.restore_focus) { + tmp = this.get_node(fe, true); + if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) { + tmp.children('.jstree-anchor').trigger('focus'); + } + else { + this._data.core.focused = null; + } + } + this._model.force_full_redraw = false; + this._model.changed = []; + /** + * triggered after nodes are redrawn + * @event + * @name redraw.jstree + * @param {array} nodes the redrawn nodes + */ + this.trigger('redraw', { "nodes" : nodes }); + }, + /** + * redraws all nodes that need to be redrawn or optionally - the whole tree + * @name redraw([full]) + * @param {Boolean} full if set to `true` all nodes are redrawn. + */ + redraw : function (full) { + if(full) { + this._model.force_full_redraw = true; + } + //if(this._model.redraw_timeout) { + // clearTimeout(this._model.redraw_timeout); + //} + //this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0); + this._redraw(); + }, + /** + * redraws a single node's children. Used internally. + * @private + * @name draw_children(node) + * @param {mixed} node the node whose children will be redrawn + */ + draw_children : function (node) { + var obj = this.get_node(node), + i = false, + j = false, + k = false, + d = document; + if(!obj) { return false; } + if(obj.id === $.jstree.root) { return this.redraw(true); } + node = this.get_node(node, true); + if(!node || !node.length) { return false; } // TODO: quick toggle + + node.children('.jstree-children').remove(); + node = node[0]; + if(obj.children.length && obj.state.loaded) { + k = d.createElement('UL'); + k.setAttribute('role', 'group'); + k.className = 'jstree-children'; + for(i = 0, j = obj.children.length; i < j; i++) { + k.appendChild(this.redraw_node(obj.children[i], true, true)); + } + node.appendChild(k); + } + }, + /** + * redraws a single node. Used internally. + * @private + * @name redraw_node(node, deep, is_callback, force_render) + * @param {mixed} node the node to redraw + * @param {Boolean} deep should child nodes be redrawn too + * @param {Boolean} is_callback is this a recursion call + * @param {Boolean} force_render should children of closed parents be drawn anyway + */ + redraw_node : function (node, deep, is_callback, force_render) { + var obj = this.get_node(node), + par = false, + ind = false, + old = false, + i = false, + j = false, + k = false, + c = '', + d = document, + m = this._model.data, + f = false, + s = false, + tmp = null, + t = 0, + l = 0, + has_children = false, + last_sibling = false; + if(!obj) { return false; } + if(obj.id === $.jstree.root) { return this.redraw(true); } + deep = deep || obj.children.length === 0; + node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) ); //, this.element); + if(!node) { + deep = true; + //node = d.createElement('LI'); + if(!is_callback) { + par = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null; + if(par !== null && (!par || !m[obj.parent].state.opened)) { + return false; + } + ind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children); + } + } + else { + node = $(node); + if(!is_callback) { + par = node.parent().parent()[0]; + if(par === this.element[0]) { + par = null; + } + ind = node.index(); + } + // m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage + if(!deep && obj.children.length && !node.children('.jstree-children').length) { + deep = true; + } + if(!deep) { + old = node.children('.jstree-children')[0]; + } + f = node.children('.jstree-anchor')[0] === document.activeElement; + node.remove(); + //node = d.createElement('LI'); + //node = node[0]; + } + node = this._data.core.node.cloneNode(true); + // node is DOM, deep is boolean + + c = 'jstree-node '; + for(i in obj.li_attr) { + if(obj.li_attr.hasOwnProperty(i)) { + if(i === 'id') { continue; } + if(i !== 'class') { + node.setAttribute(i, obj.li_attr[i]); + } + else { + c += obj.li_attr[i]; + } + } + } + if(!obj.a_attr.id) { + obj.a_attr.id = obj.id + '_anchor'; + } + node.childNodes[1].setAttribute('aria-selected', !!obj.state.selected); + node.childNodes[1].setAttribute('aria-level', obj.parents.length); + if(this.settings.core.compute_elements_positions) { + node.childNodes[1].setAttribute('aria-setsize', m[obj.parent].children.length); + node.childNodes[1].setAttribute('aria-posinset', m[obj.parent].children.indexOf(obj.id) + 1); + } + if(obj.state.disabled) { + node.childNodes[1].setAttribute('aria-disabled', true); + } + + for(i = 0, j = obj.children.length; i < j; i++) { + if(!m[obj.children[i]].state.hidden) { + has_children = true; + break; + } + } + if(obj.parent !== null && m[obj.parent] && !obj.state.hidden) { + i = $.inArray(obj.id, m[obj.parent].children); + last_sibling = obj.id; + if(i !== -1) { + i++; + for(j = m[obj.parent].children.length; i < j; i++) { + if(!m[m[obj.parent].children[i]].state.hidden) { + last_sibling = m[obj.parent].children[i]; + } + if(last_sibling !== obj.id) { + break; + } + } + } + } + + if(obj.state.hidden) { + c += ' jstree-hidden'; + } + if (obj.state.loading) { + c += ' jstree-loading'; + } + if(obj.state.loaded && !has_children) { + c += ' jstree-leaf'; + } + else { + c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed'; + node.childNodes[1].setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) ); + } + if(last_sibling === obj.id) { + c += ' jstree-last'; + } + node.id = obj.id; + node.className = c; + c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : ''); + for(j in obj.a_attr) { + if(obj.a_attr.hasOwnProperty(j)) { + if(j === 'href' && obj.a_attr[j] === '#') { continue; } + if(j !== 'class') { + node.childNodes[1].setAttribute(j, obj.a_attr[j]); + } + else { + c += ' ' + obj.a_attr[j]; + } + } + } + if(c.length) { + node.childNodes[1].className = 'jstree-anchor ' + c; + } + if((obj.icon && obj.icon !== true) || obj.icon === false) { + if(obj.icon === false) { + node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden'; + } + else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) { + node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom'; + } + else { + node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")'; + node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center'; + node.childNodes[1].childNodes[0].style.backgroundSize = 'auto'; + node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom'; + } + } + + if(this.settings.core.force_text) { + node.childNodes[1].appendChild(d.createTextNode(obj.text)); + } + else { + node.childNodes[1].innerHTML += obj.text; + } + + + if(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) { + k = d.createElement('UL'); + k.setAttribute('role', 'group'); + k.className = 'jstree-children'; + for(i = 0, j = obj.children.length; i < j; i++) { + k.appendChild(this.redraw_node(obj.children[i], deep, true)); + } + node.appendChild(k); + } + if(old) { + node.appendChild(old); + } + if(!is_callback) { + // append back using par / ind + if(!par) { + par = this.element[0]; + } + for(i = 0, j = par.childNodes.length; i < j; i++) { + if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) { + tmp = par.childNodes[i]; + break; + } + } + if(!tmp) { + tmp = d.createElement('UL'); + tmp.setAttribute('role', 'group'); + tmp.className = 'jstree-children'; + par.appendChild(tmp); + } + par = tmp; + + if(ind < par.childNodes.length) { + par.insertBefore(node, par.childNodes[ind]); + } + else { + par.appendChild(node); + } + if(f) { + t = this.element[0].scrollTop; + l = this.element[0].scrollLeft; + node.childNodes[1].focus(); + this.element[0].scrollTop = t; + this.element[0].scrollLeft = l; + } + } + if(obj.state.opened && !obj.state.loaded) { + obj.state.opened = false; + setTimeout(function () { + this.open_node(obj.id, false, 0); + }.bind(this), 0); + } + return node; + }, + /** + * opens a node, revealing its children. If the node is not loaded it will be loaded and opened once ready. + * @name open_node(obj [, callback, animation]) + * @param {mixed} obj the node to open + * @param {Function} callback a function to execute once the node is opened + * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation. + * @trigger open_node.jstree, after_open.jstree, before_open.jstree + */ + open_node : function (obj, callback, animation) { + var t1, t2, d, t; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.open_node(obj[t1], callback, animation); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + animation = animation === undefined ? this.settings.core.animation : animation; + if(!this.is_closed(obj)) { + if(callback) { + callback.call(this, obj, false); + } + return false; + } + if(!this.is_loaded(obj)) { + if(this.is_loading(obj)) { + return setTimeout(function () { + this.open_node(obj, callback, animation); + }.bind(this), 500); + } + this.load_node(obj, function (o, ok) { + return ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false); + }); + } + else { + d = this.get_node(obj, true); + t = this; + if(d.length) { + if(animation && d.children(".jstree-children").length) { + d.children(".jstree-children").stop(true, true); + } + if(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) { + this.draw_children(obj); + //d = this.get_node(obj, true); + } + if(!animation) { + this.trigger('before_open', { "node" : obj }); + d[0].className = d[0].className.replace('jstree-closed', 'jstree-open'); + d[0].childNodes[1].setAttribute("aria-expanded", true); + } + else { + this.trigger('before_open', { "node" : obj }); + d + .children(".jstree-children").css("display","none").end() + .removeClass("jstree-closed").addClass("jstree-open") + .children('.jstree-anchor').attr("aria-expanded", true).end() + .children(".jstree-children").stop(true, true) + .slideDown(animation, function () { + this.style.display = ""; + if (t.element) { + t.trigger("after_open", { "node" : obj }); + } + }); + } + } + obj.state.opened = true; + if(callback) { + callback.call(this, obj, true); + } + if(!d.length) { + /** + * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet) + * @event + * @name before_open.jstree + * @param {Object} node the opened node + */ + this.trigger('before_open', { "node" : obj }); + } + /** + * triggered when a node is opened (if there is an animation it will not be completed yet) + * @event + * @name open_node.jstree + * @param {Object} node the opened node + */ + this.trigger('open_node', { "node" : obj }); + if(!animation || !d.length) { + /** + * triggered when a node is opened and the animation is complete + * @event + * @name after_open.jstree + * @param {Object} node the opened node + */ + this.trigger("after_open", { "node" : obj }); + } + return true; + } + }, + /** + * opens every parent of a node (node should be loaded) + * @name _open_to(obj) + * @param {mixed} obj the node to reveal + * @private + */ + _open_to : function (obj) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + var i, j, p = obj.parents; + for(i = 0, j = p.length; i < j; i+=1) { + if(i !== $.jstree.root) { + this.open_node(p[i], false, 0); + } + } + return $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element); + }, + /** + * closes a node, hiding its children + * @name close_node(obj [, animation]) + * @param {mixed} obj the node to close + * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation. + * @trigger close_node.jstree, after_close.jstree + */ + close_node : function (obj, animation) { + var t1, t2, t, d; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.close_node(obj[t1], animation); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + if(this.is_closed(obj)) { + return false; + } + animation = animation === undefined ? this.settings.core.animation : animation; + t = this; + d = this.get_node(obj, true); + + obj.state.opened = false; + /** + * triggered when a node is closed (if there is an animation it will not be complete yet) + * @event + * @name close_node.jstree + * @param {Object} node the closed node + */ + this.trigger('close_node',{ "node" : obj }); + if(!d.length) { + /** + * triggered when a node is closed and the animation is complete + * @event + * @name after_close.jstree + * @param {Object} node the closed node + */ + this.trigger("after_close", { "node" : obj }); + } + else { + if(!animation) { + d[0].className = d[0].className.replace('jstree-open', 'jstree-closed'); + d.children('.jstree-anchor').attr("aria-expanded", false); + d.children('.jstree-children').remove(); + this.trigger("after_close", { "node" : obj }); + } + else { + d + .children(".jstree-children").attr("style","display:block !important").end() + .removeClass("jstree-open").addClass("jstree-closed") + .children('.jstree-anchor').attr("aria-expanded", false).end() + .children(".jstree-children").stop(true, true).slideUp(animation, function () { + this.style.display = ""; + d.children('.jstree-children').remove(); + if (t.element) { + t.trigger("after_close", { "node" : obj }); + } + }); + } + } + }, + /** + * toggles a node - closing it if it is open, opening it if it is closed + * @name toggle_node(obj) + * @param {mixed} obj the node to toggle + */ + toggle_node : function (obj) { + var t1, t2; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.toggle_node(obj[t1]); + } + return true; + } + if(this.is_closed(obj)) { + return this.open_node(obj); + } + if(this.is_open(obj)) { + return this.close_node(obj); + } + }, + /** + * opens all nodes within a node (or the tree), revealing their children. If the node is not loaded it will be loaded and opened once ready. + * @name open_all([obj, animation, original_obj]) + * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree + * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation + * @param {jQuery} reference to the node that started the process (internal use) + * @trigger open_all.jstree + */ + open_all : function (obj, animation, original_obj) { + if(!obj) { obj = $.jstree.root; } + obj = this.get_node(obj); + if(!obj) { return false; } + var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this; + if(!dom.length) { + for(i = 0, j = obj.children_d.length; i < j; i++) { + if(this.is_closed(this._model.data[obj.children_d[i]])) { + this._model.data[obj.children_d[i]].state.opened = true; + } + } + return this.trigger('open_all', { "node" : obj }); + } + original_obj = original_obj || dom; + _this = this; + dom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed'); + dom.each(function () { + _this.open_node( + this, + function(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } }, + animation || 0 + ); + }); + if(original_obj.find('.jstree-closed').length === 0) { + /** + * triggered when an `open_all` call completes + * @event + * @name open_all.jstree + * @param {Object} node the opened node + */ + this.trigger('open_all', { "node" : this.get_node(original_obj) }); + } + }, + /** + * closes all nodes within a node (or the tree), revealing their children + * @name close_all([obj, animation]) + * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree + * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation + * @trigger close_all.jstree + */ + close_all : function (obj, animation) { + if(!obj) { obj = $.jstree.root; } + obj = this.get_node(obj); + if(!obj) { return false; } + var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), + _this = this, i, j; + if(dom.length) { + dom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open'); + $(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); }); + } + for(i = 0, j = obj.children_d.length; i < j; i++) { + this._model.data[obj.children_d[i]].state.opened = false; + } + /** + * triggered when an `close_all` call completes + * @event + * @name close_all.jstree + * @param {Object} node the closed node + */ + this.trigger('close_all', { "node" : obj }); + }, + /** + * checks if a node is disabled (not selectable) + * @name is_disabled(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_disabled : function (obj) { + obj = this.get_node(obj); + return obj && obj.state && obj.state.disabled; + }, + /** + * enables a node - so that it can be selected + * @name enable_node(obj) + * @param {mixed} obj the node to enable + * @trigger enable_node.jstree + */ + enable_node : function (obj) { + var t1, t2; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.enable_node(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + obj.state.disabled = false; + this.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false); + /** + * triggered when an node is enabled + * @event + * @name enable_node.jstree + * @param {Object} node the enabled node + */ + this.trigger('enable_node', { 'node' : obj }); + }, + /** + * disables a node - so that it can not be selected + * @name disable_node(obj) + * @param {mixed} obj the node to disable + * @trigger disable_node.jstree + */ + disable_node : function (obj) { + var t1, t2; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.disable_node(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + obj.state.disabled = true; + this.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true); + /** + * triggered when an node is disabled + * @event + * @name disable_node.jstree + * @param {Object} node the disabled node + */ + this.trigger('disable_node', { 'node' : obj }); + }, + /** + * determines if a node is hidden + * @name is_hidden(obj) + * @param {mixed} obj the node + */ + is_hidden : function (obj) { + obj = this.get_node(obj); + return obj.state.hidden === true; + }, + /** + * hides a node - it is still in the structure but will not be visible + * @name hide_node(obj) + * @param {mixed} obj the node to hide + * @param {Boolean} skip_redraw internal parameter controlling if redraw is called + * @trigger hide_node.jstree + */ + hide_node : function (obj, skip_redraw) { + var t1, t2; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.hide_node(obj[t1], true); + } + if (!skip_redraw) { + this.redraw(); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + if(!obj.state.hidden) { + obj.state.hidden = true; + this._node_changed(obj.parent); + if(!skip_redraw) { + this.redraw(); + } + /** + * triggered when an node is hidden + * @event + * @name hide_node.jstree + * @param {Object} node the hidden node + */ + this.trigger('hide_node', { 'node' : obj }); + } + }, + /** + * shows a node + * @name show_node(obj) + * @param {mixed} obj the node to show + * @param {Boolean} skip_redraw internal parameter controlling if redraw is called + * @trigger show_node.jstree + */ + show_node : function (obj, skip_redraw) { + var t1, t2; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.show_node(obj[t1], true); + } + if (!skip_redraw) { + this.redraw(); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + if(obj.state.hidden) { + obj.state.hidden = false; + this._node_changed(obj.parent); + if(!skip_redraw) { + this.redraw(); + } + /** + * triggered when an node is shown + * @event + * @name show_node.jstree + * @param {Object} node the shown node + */ + this.trigger('show_node', { 'node' : obj }); + } + }, + /** + * hides all nodes + * @name hide_all() + * @trigger hide_all.jstree + */ + hide_all : function (skip_redraw) { + var i, m = this._model.data, ids = []; + for(i in m) { + if(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) { + m[i].state.hidden = true; + ids.push(i); + } + } + this._model.force_full_redraw = true; + if(!skip_redraw) { + this.redraw(); + } + /** + * triggered when all nodes are hidden + * @event + * @name hide_all.jstree + * @param {Array} nodes the IDs of all hidden nodes + */ + this.trigger('hide_all', { 'nodes' : ids }); + return ids; + }, + /** + * shows all nodes + * @name show_all() + * @trigger show_all.jstree + */ + show_all : function (skip_redraw) { + var i, m = this._model.data, ids = []; + for(i in m) { + if(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) { + m[i].state.hidden = false; + ids.push(i); + } + } + this._model.force_full_redraw = true; + if(!skip_redraw) { + this.redraw(); + } + /** + * triggered when all nodes are shown + * @event + * @name show_all.jstree + * @param {Array} nodes the IDs of all shown nodes + */ + this.trigger('show_all', { 'nodes' : ids }); + return ids; + }, + /** + * called when a node is selected by the user. Used internally. + * @private + * @name activate_node(obj, e) + * @param {mixed} obj the node + * @param {Object} e the related event + * @trigger activate_node.jstree, changed.jstree + */ + activate_node : function (obj, e) { + if(this.is_disabled(obj)) { + return false; + } + if(!e || typeof e !== 'object') { + e = {}; + } + + // ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node + this._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null; + if(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; } + if(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); } + + if(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) { + if(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) { + this.deselect_node(obj, false, e); + } + else { + this.deselect_all(true); + this.select_node(obj, false, false, e); + this._data.core.last_clicked = this.get_node(obj); + } + } + else { + if(e.shiftKey) { + var o = this.get_node(obj).id, + l = this._data.core.last_clicked.id, + p = this.get_node(this._data.core.last_clicked.parent).children, + c = false, + i, j; + for(i = 0, j = p.length; i < j; i += 1) { + // separate IFs work whem o and l are the same + if(p[i] === o) { + c = !c; + } + if(p[i] === l) { + c = !c; + } + if(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) { + if (!this.is_hidden(p[i])) { + this.select_node(p[i], true, false, e); + } + } + else { + this.deselect_node(p[i], true, e); + } + } + this.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e }); + } + else { + if(!this.is_selected(obj)) { + this.select_node(obj, false, false, e); + } + else { + this.deselect_node(obj, false, e); + } + } + } + /** + * triggered when an node is clicked or intercated with by the user + * @event + * @name activate_node.jstree + * @param {Object} node + * @param {Object} event the ooriginal event (if any) which triggered the call (may be an empty object) + */ + this.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e }); + }, + /** + * applies the hover state on a node, called when a node is hovered by the user. Used internally. + * @private + * @name hover_node(obj) + * @param {mixed} obj + * @trigger hover_node.jstree + */ + hover_node : function (obj) { + obj = this.get_node(obj, true); + if(!obj || !obj.length || obj.children('.jstree-hovered').length) { + return false; + } + var o = this.element.find('.jstree-hovered'), t = this.element; + if(o && o.length) { this.dehover_node(o); } + + obj.children('.jstree-anchor').addClass('jstree-hovered'); + /** + * triggered when an node is hovered + * @event + * @name hover_node.jstree + * @param {Object} node + */ + this.trigger('hover_node', { 'node' : this.get_node(obj) }); + setTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0); + }, + /** + * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally. + * @private + * @name dehover_node(obj) + * @param {mixed} obj + * @trigger dehover_node.jstree + */ + dehover_node : function (obj) { + obj = this.get_node(obj, true); + if(!obj || !obj.length || !obj.children('.jstree-hovered').length) { + return false; + } + obj.children('.jstree-anchor').removeClass('jstree-hovered'); + /** + * triggered when an node is no longer hovered + * @event + * @name dehover_node.jstree + * @param {Object} node + */ + this.trigger('dehover_node', { 'node' : this.get_node(obj) }); + }, + /** + * select a node + * @name select_node(obj [, supress_event, prevent_open]) + * @param {mixed} obj an array can be used to select multiple nodes + * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered + * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened + * @trigger select_node.jstree, changed.jstree + */ + select_node : function (obj, supress_event, prevent_open, e) { + var dom, t1, t2, th; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.select_node(obj[t1], supress_event, prevent_open, e); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(!obj.state.selected) { + obj.state.selected = true; + this._data.core.selected.push(obj.id); + if(!prevent_open) { + dom = this._open_to(obj); + } + if(dom && dom.length) { + dom.children('.jstree-anchor').addClass('jstree-clicked').attr('aria-selected', true); + } + /** + * triggered when an node is selected + * @event + * @name select_node.jstree + * @param {Object} node + * @param {Array} selected the current selection + * @param {Object} event the event (if any) that triggered this select_node + */ + this.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); + if(!supress_event) { + /** + * triggered when selection changes + * @event + * @name changed.jstree + * @param {Object} node + * @param {Object} action the action that caused the selection to change + * @param {Array} selected the current selection + * @param {Object} event the event (if any) that triggered this changed event + */ + this.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); + } + } + }, + /** + * deselect a node + * @name deselect_node(obj [, supress_event]) + * @param {mixed} obj an array can be used to deselect multiple nodes + * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered + * @trigger deselect_node.jstree, changed.jstree + */ + deselect_node : function (obj, supress_event, e) { + var t1, t2, dom; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.deselect_node(obj[t1], supress_event, e); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(obj.state.selected) { + obj.state.selected = false; + this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id); + if(dom.length) { + dom.children('.jstree-anchor').removeClass('jstree-clicked').attr('aria-selected', false); + } + /** + * triggered when an node is deselected + * @event + * @name deselect_node.jstree + * @param {Object} node + * @param {Array} selected the current selection + * @param {Object} event the event (if any) that triggered this deselect_node + */ + this.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); + if(!supress_event) { + this.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); + } + } + }, + /** + * select all nodes in the tree + * @name select_all([supress_event]) + * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered + * @trigger select_all.jstree, changed.jstree + */ + select_all : function (supress_event) { + var tmp = this._data.core.selected.concat([]), i, j; + this._data.core.selected = this._model.data[$.jstree.root].children_d.concat(); + for(i = 0, j = this._data.core.selected.length; i < j; i++) { + if(this._model.data[this._data.core.selected[i]]) { + this._model.data[this._data.core.selected[i]].state.selected = true; + } + } + this.redraw(true); + /** + * triggered when all nodes are selected + * @event + * @name select_all.jstree + * @param {Array} selected the current selection + */ + this.trigger('select_all', { 'selected' : this._data.core.selected }); + if(!supress_event) { + this.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp }); + } + }, + /** + * deselect all selected nodes + * @name deselect_all([supress_event]) + * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered + * @trigger deselect_all.jstree, changed.jstree + */ + deselect_all : function (supress_event) { + var tmp = this._data.core.selected.concat([]), i, j; + for(i = 0, j = this._data.core.selected.length; i < j; i++) { + if(this._model.data[this._data.core.selected[i]]) { + this._model.data[this._data.core.selected[i]].state.selected = false; + } + } + this._data.core.selected = []; + this.element.find('.jstree-clicked').removeClass('jstree-clicked').attr('aria-selected', false); + /** + * triggered when all nodes are deselected + * @event + * @name deselect_all.jstree + * @param {Object} node the previous selection + * @param {Array} selected the current selection + */ + this.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp }); + if(!supress_event) { + this.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp }); + } + }, + /** + * checks if a node is selected + * @name is_selected(obj) + * @param {mixed} obj + * @return {Boolean} + */ + is_selected : function (obj) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + return obj.state.selected; + }, + /** + * get an array of all selected nodes + * @name get_selected([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + */ + get_selected : function (full) { + return full ? $.map(this._data.core.selected, function (i) { return this.get_node(i); }.bind(this)) : this._data.core.selected.slice(); + }, + /** + * get an array of all top level selected nodes (ignoring children of selected nodes) + * @name get_top_selected([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + */ + get_top_selected : function (full) { + var tmp = this.get_selected(true), + obj = {}, i, j, k, l; + for(i = 0, j = tmp.length; i < j; i++) { + obj[tmp[i].id] = tmp[i]; + } + for(i = 0, j = tmp.length; i < j; i++) { + for(k = 0, l = tmp[i].children_d.length; k < l; k++) { + if(obj[tmp[i].children_d[k]]) { + delete obj[tmp[i].children_d[k]]; + } + } + } + tmp = []; + for(i in obj) { + if(obj.hasOwnProperty(i)) { + tmp.push(i); + } + } + return full ? $.map(tmp, function (i) { return this.get_node(i); }.bind(this)) : tmp; + }, + /** + * get an array of all bottom level selected nodes (ignoring selected parents) + * @name get_bottom_selected([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + */ + get_bottom_selected : function (full) { + var tmp = this.get_selected(true), + obj = [], i, j; + for(i = 0, j = tmp.length; i < j; i++) { + if(!tmp[i].children.length) { + obj.push(tmp[i].id); + } + } + return full ? $.map(obj, function (i) { return this.get_node(i); }.bind(this)) : obj; + }, + /** + * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally. + * @name get_state() + * @private + * @return {Object} + */ + get_state : function () { + var state = { + 'core' : { + 'open' : [], + 'loaded' : [], + 'scroll' : { + 'left' : this.element.scrollLeft(), + 'top' : this.element.scrollTop() + }, + /*! + 'themes' : { + 'name' : this.get_theme(), + 'icons' : this._data.core.themes.icons, + 'dots' : this._data.core.themes.dots + }, + */ + 'selected' : [] + } + }, i; + for(i in this._model.data) { + if(this._model.data.hasOwnProperty(i)) { + if(i !== $.jstree.root) { + if(this._model.data[i].state.loaded && this.settings.core.loaded_state) { + state.core.loaded.push(i); + } + if(this._model.data[i].state.opened) { + state.core.open.push(i); + } + if(this._model.data[i].state.selected) { + state.core.selected.push(i); + } + } + } + } + return state; + }, + /** + * sets the state of the tree. Used internally. + * @name set_state(state [, callback]) + * @private + * @param {Object} state the state to restore. Keep in mind this object is passed by reference and jstree will modify it. + * @param {Function} callback an optional function to execute once the state is restored. + * @trigger set_state.jstree + */ + set_state : function (state, callback) { + if(state) { + if(state.core && state.core.selected && state.core.initial_selection === undefined) { + state.core.initial_selection = this._data.core.selected.concat([]).sort().join(','); + } + if(state.core) { + var res, n, t, _this, i; + if(state.core.loaded) { + if(!this.settings.core.loaded_state || !$.vakata.is_array(state.core.loaded) || !state.core.loaded.length) { + delete state.core.loaded; + this.set_state(state, callback); + } + else { + this._load_nodes(state.core.loaded, function (nodes) { + delete state.core.loaded; + this.set_state(state, callback); + }); + } + return false; + } + if(state.core.open) { + if(!$.vakata.is_array(state.core.open) || !state.core.open.length) { + delete state.core.open; + this.set_state(state, callback); + } + else { + this._load_nodes(state.core.open, function (nodes) { + this.open_node(nodes, false, 0); + delete state.core.open; + this.set_state(state, callback); + }); + } + return false; + } + if(state.core.scroll) { + if(state.core.scroll && state.core.scroll.left !== undefined) { + this.element.scrollLeft(state.core.scroll.left); + } + if(state.core.scroll && state.core.scroll.top !== undefined) { + this.element.scrollTop(state.core.scroll.top); + } + delete state.core.scroll; + this.set_state(state, callback); + return false; + } + if(state.core.selected) { + _this = this; + if (state.core.initial_selection === undefined || + state.core.initial_selection === this._data.core.selected.concat([]).sort().join(',') + ) { + this.deselect_all(); + $.each(state.core.selected, function (i, v) { + _this.select_node(v, false, true); + }); + } + delete state.core.initial_selection; + delete state.core.selected; + this.set_state(state, callback); + return false; + } + for(i in state) { + if(state.hasOwnProperty(i) && i !== "core" && $.inArray(i, this.settings.plugins) === -1) { + delete state[i]; + } + } + if($.isEmptyObject(state.core)) { + delete state.core; + this.set_state(state, callback); + return false; + } + } + if($.isEmptyObject(state)) { + state = null; + if(callback) { callback.call(this); } + /** + * triggered when a `set_state` call completes + * @event + * @name set_state.jstree + */ + this.trigger('set_state'); + return false; + } + return true; + } + return false; + }, + /** + * refreshes the tree - all nodes are reloaded with calls to `load_node`. + * @name refresh() + * @param {Boolean} skip_loading an option to skip showing the loading indicator + * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state + * @trigger refresh.jstree + */ + refresh : function (skip_loading, forget_state) { + this._data.core.state = forget_state === true ? {} : this.get_state(); + if(forget_state && $.vakata.is_function(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); } + this._cnt = 0; + this._model.data = {}; + this._model.data[$.jstree.root] = { + id : $.jstree.root, + parent : null, + parents : [], + children : [], + children_d : [], + state : { loaded : false } + }; + this._data.core.selected = []; + this._data.core.last_clicked = null; + this._data.core.focused = null; + + var c = this.get_container_ul()[0].className; + if(!skip_loading) { + this.element.html("<"+"ul class='"+c+"' role='group'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='none' id='j"+this._id+"_loading'><"+"a class='jstree-anchor' role='treeitem' href='#'>" + this.get_string("Loading ...") + ""); + this.element.attr('aria-activedescendant','j'+this._id+'_loading'); + } + this.load_node($.jstree.root, function (o, s) { + if(s) { + this.get_container_ul()[0].className = c; + if(this._firstChild(this.get_container_ul()[0])) { + this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id); + } + this.set_state($.extend(true, {}, this._data.core.state), function () { + /** + * triggered when a `refresh` call completes + * @event + * @name refresh.jstree + */ + this.trigger('refresh'); + }); + } + this._data.core.state = null; + }); + }, + /** + * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`. + * @name refresh_node(obj) + * @param {mixed} obj the node + * @trigger refresh_node.jstree + */ + refresh_node : function (obj) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + var opened = [], to_load = [], s = this._data.core.selected.concat([]); + to_load.push(obj.id); + if(obj.state.opened === true) { opened.push(obj.id); } + this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); }); + this._load_nodes(to_load, function (nodes) { + this.open_node(opened, false, 0); + this.select_node(s); + /** + * triggered when a node is refreshed + * @event + * @name refresh_node.jstree + * @param {Object} node - the refreshed node + * @param {Array} nodes - an array of the IDs of the nodes that were reloaded + */ + this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes }); + }.bind(this), false, true); + }, + /** + * set (change) the ID of a node + * @name set_id(obj, id) + * @param {mixed} obj the node + * @param {String} id the new ID + * @return {Boolean} + * @trigger set_id.jstree + */ + set_id : function (obj, id) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + var i, j, m = this._model.data, old = obj.id; + id = id.toString(); + // update parents (replace current ID with new one in children and children_d) + m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id; + for(i = 0, j = obj.parents.length; i < j; i++) { + m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id; + } + // update children (replace current ID with new one in parent and parents) + for(i = 0, j = obj.children.length; i < j; i++) { + m[obj.children[i]].parent = id; + } + for(i = 0, j = obj.children_d.length; i < j; i++) { + m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id; + } + i = $.inArray(obj.id, this._data.core.selected); + if(i !== -1) { this._data.core.selected[i] = id; } + // update model and obj itself (obj.id, this._model.data[KEY]) + i = this.get_node(obj.id, true); + if(i) { + i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor'); + if(this.element.attr('aria-activedescendant') === obj.id) { + this.element.attr('aria-activedescendant', id); + } + } + delete m[obj.id]; + obj.id = id; + obj.li_attr.id = id; + m[id] = obj; + /** + * triggered when a node id value is changed + * @event + * @name set_id.jstree + * @param {Object} node + * @param {String} old the old id + */ + this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old }); + return true; + }, + /** + * get the text value of a node + * @name get_text(obj) + * @param {mixed} obj the node + * @return {String} + */ + get_text : function (obj) { + obj = this.get_node(obj); + return (!obj || obj.id === $.jstree.root) ? false : obj.text; + }, + /** + * set the text value of a node. Used internally, please use `rename_node(obj, val)`. + * @private + * @name set_text(obj, val) + * @param {mixed} obj the node, you can pass an array to set the text on multiple nodes + * @param {String} val the new text value + * @return {Boolean} + * @trigger set_text.jstree + */ + set_text : function (obj, val) { + var t1, t2; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.set_text(obj[t1], val); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + obj.text = val; + if(this.get_node(obj, true).length) { + this.redraw_node(obj.id); + } + /** + * triggered when a node text value is changed + * @event + * @name set_text.jstree + * @param {Object} obj + * @param {String} text the new value + */ + this.trigger('set_text',{ "obj" : obj, "text" : val }); + return true; + }, + /** + * gets a JSON representation of a node (or the whole tree) + * @name get_json([obj, options]) + * @param {mixed} obj + * @param {Object} options + * @param {Boolean} options.no_state do not return state information + * @param {Boolean} options.no_id do not return ID + * @param {Boolean} options.no_children do not include children + * @param {Boolean} options.no_data do not include node data + * @param {Boolean} options.no_li_attr do not include LI attributes + * @param {Boolean} options.no_a_attr do not include A attributes + * @param {Boolean} options.flat return flat JSON instead of nested + * @return {Object} + */ + get_json : function (obj, options, flat) { + obj = this.get_node(obj || $.jstree.root); + if(!obj) { return false; } + if(options && options.flat && !flat) { flat = []; } + var tmp = { + 'id' : obj.id, + 'text' : obj.text, + 'icon' : this.get_icon(obj), + 'li_attr' : $.extend(true, {}, obj.li_attr), + 'a_attr' : $.extend(true, {}, obj.a_attr), + 'state' : {}, + 'data' : options && options.no_data ? false : $.extend(true, $.vakata.is_array(obj.data)?[]:{}, obj.data) + //( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ), + }, i, j; + if(options && options.flat) { + tmp.parent = obj.parent; + } + else { + tmp.children = []; + } + if(!options || !options.no_state) { + for(i in obj.state) { + if(obj.state.hasOwnProperty(i)) { + tmp.state[i] = obj.state[i]; + } + } + } else { + delete tmp.state; + } + if(options && options.no_li_attr) { + delete tmp.li_attr; + } + if(options && options.no_a_attr) { + delete tmp.a_attr; + } + if(options && options.no_id) { + delete tmp.id; + if(tmp.li_attr && tmp.li_attr.id) { + delete tmp.li_attr.id; + } + if(tmp.a_attr && tmp.a_attr.id) { + delete tmp.a_attr.id; + } + } + if(options && options.flat && obj.id !== $.jstree.root) { + flat.push(tmp); + } + if(!options || !options.no_children) { + for(i = 0, j = obj.children.length; i < j; i++) { + if(options && options.flat) { + this.get_json(obj.children[i], options, flat); + } + else { + tmp.children.push(this.get_json(obj.children[i], options)); + } + } + } + return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp); + }, + /** + * create a new node (do not confuse with load_node) + * @name create_node([par, node, pos, callback, is_loaded]) + * @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`) + * @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name) + * @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last" + * @param {Function} callback a function to be called once the node is created + * @param {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded + * @return {String} the ID of the newly create node + * @trigger model.jstree, create_node.jstree + */ + create_node : function (par, node, pos, callback, is_loaded) { + if(par === null) { par = $.jstree.root; } + par = this.get_node(par); + if(!par) { return false; } + pos = pos === undefined ? "last" : pos; + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); }); + } + if(!node) { node = { "text" : this.get_string('New node') }; } + if(typeof node === "string") { + node = { "text" : node }; + } else { + node = $.extend(true, {}, node); + } + if(node.text === undefined) { node.text = this.get_string('New node'); } + var tmp, dpc, i, j; + + if(par.id === $.jstree.root) { + if(pos === "before") { pos = "first"; } + if(pos === "after") { pos = "last"; } + } + switch(pos) { + case "before": + tmp = this.get_node(par.parent); + pos = $.inArray(par.id, tmp.children); + par = tmp; + break; + case "after" : + tmp = this.get_node(par.parent); + pos = $.inArray(par.id, tmp.children) + 1; + par = tmp; + break; + case "inside": + case "first": + pos = 0; + break; + case "last": + pos = par.children.length; + break; + default: + if(!pos) { pos = 0; } + break; + } + if(pos > par.children.length) { pos = par.children.length; } + if(!node.id) { node.id = true; } + if(!this.check("create_node", node, par, pos)) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + if(node.id === true) { delete node.id; } + node = this._parse_model_from_json(node, par.id, par.parents.concat()); + if(!node) { return false; } + tmp = this.get_node(node); + dpc = []; + dpc.push(node); + dpc = dpc.concat(tmp.children_d); + this.trigger('model', { "nodes" : dpc, "parent" : par.id }); + + par.children_d = par.children_d.concat(dpc); + for(i = 0, j = par.parents.length; i < j; i++) { + this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc); + } + node = tmp; + tmp = []; + for(i = 0, j = par.children.length; i < j; i++) { + tmp[i >= pos ? i+1 : i] = par.children[i]; + } + tmp[pos] = node.id; + par.children = tmp; + + this.redraw_node(par, true); + /** + * triggered when a node is created + * @event + * @name create_node.jstree + * @param {Object} node + * @param {String} parent the parent's ID + * @param {Number} position the position of the new node among the parent's children + */ + this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos }); + if(callback) { callback.call(this, this.get_node(node)); } + return node.id; + }, + /** + * set the text value of a node + * @name rename_node(obj, val) + * @param {mixed} obj the node, you can pass an array to rename multiple nodes to the same name + * @param {String} val the new text value + * @return {Boolean} + * @trigger rename_node.jstree + */ + rename_node : function (obj, val) { + var t1, t2, old; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.rename_node(obj[t1], val); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + old = obj.text; + if(!this.check("rename_node", obj, this.get_parent(obj), val)) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments)) + /** + * triggered when a node is renamed + * @event + * @name rename_node.jstree + * @param {Object} node + * @param {String} text the new value + * @param {String} old the old value + */ + this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old }); + return true; + }, + /** + * remove a node + * @name delete_node(obj) + * @param {mixed} obj the node, you can pass an array to delete multiple nodes + * @return {Boolean} + * @trigger delete_node.jstree, changed.jstree + */ + delete_node : function (obj) { + var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.delete_node(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + par = this.get_node(obj.parent); + pos = $.inArray(obj.id, par.children); + c = false; + if(!this.check("delete_node", obj, par, pos)) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + if(pos !== -1) { + par.children = $.vakata.array_remove(par.children, pos); + } + tmp = obj.children_d.concat([]); + tmp.push(obj.id); + for(i = 0, j = obj.parents.length; i < j; i++) { + this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) { + return $.inArray(v, tmp) === -1; + }); + } + for(k = 0, l = tmp.length; k < l; k++) { + if(this._model.data[tmp[k]].state.selected) { + c = true; + break; + } + } + if (c) { + this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) { + return $.inArray(v, tmp) === -1; + }); + } + /** + * triggered when a node is deleted + * @event + * @name delete_node.jstree + * @param {Object} node + * @param {String} parent the parent's ID + */ + this.trigger('delete_node', { "node" : obj, "parent" : par.id }); + if(c) { + this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id }); + } + for(k = 0, l = tmp.length; k < l; k++) { + delete this._model.data[tmp[k]]; + } + if($.inArray(this._data.core.focused, tmp) !== -1) { + this._data.core.focused = null; + top = this.element[0].scrollTop; + lft = this.element[0].scrollLeft; + if(par.id === $.jstree.root) { + if (this._model.data[$.jstree.root].children[0]) { + this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').triger('focus'); + } + } + else { + this.get_node(par, true).children('.jstree-anchor').trigger('focus'); + } + this.element[0].scrollTop = top; + this.element[0].scrollLeft = lft; + } + this.redraw_node(par, true); + return true; + }, + /** + * check if an operation is premitted on the tree. Used internally. + * @private + * @name check(chk, obj, par, pos) + * @param {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node" + * @param {mixed} obj the node + * @param {mixed} par the parent + * @param {mixed} pos the position to insert at, or if "rename_node" - the new name + * @param {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node + * @return {Boolean} + */ + check : function (chk, obj, par, pos, more) { + obj = obj && obj.id ? obj : this.get_node(obj); + par = par && par.id ? par : this.get_node(par); + var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj, + chc = this.settings.core.check_callback; + if(chk === "move_node" || chk === "copy_node") { + if((!more || !more.is_multi) && (chk === "move_node" && $.inArray(obj.id, par.children) === pos)) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_08', 'reason' : 'Moving node to its current position', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + return false; + } + if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + return false; + } + } + if(tmp && tmp.data) { tmp = tmp.data; } + if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) { + if(tmp.functions[chk] === false) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + } + return tmp.functions[chk]; + } + if(chc === false || ($.vakata.is_function(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + return false; + } + return true; + }, + /** + * get the last error + * @name last_error() + * @return {Object} + */ + last_error : function () { + return this._data.core.last_error; + }, + /** + * move a node to a new parent + * @name move_node(obj, par [, pos, callback, is_loaded]) + * @param {mixed} obj the node to move, pass an array to move multiple nodes + * @param {mixed} par the new parent + * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` + * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position + * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded + * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn + * @param {Boolean} instance internal parameter indicating if the node comes from another instance + * @trigger move_node.jstree + */ + move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { + var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p; + + par = this.get_node(par); + pos = pos === undefined ? 0 : pos; + if(!par) { return false; } + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); }); + } + + if($.vakata.is_array(obj)) { + if(obj.length === 1) { + obj = obj[0]; + } + else { + //obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) { + par = tmp; + pos = "after"; + } + } + this.redraw(); + return true; + } + } + obj = obj && obj.id ? obj : this.get_node(obj); + + if(!obj || obj.id === $.jstree.root) { return false; } + + old_par = (obj.parent || $.jstree.root).toString(); + new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); + old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); + is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); + old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1; + if(old_ins && old_ins._id) { + obj = old_ins._model.data[obj.id]; + } + + if(is_multi) { + if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) { + if(old_ins) { old_ins.delete_node(obj); } + return tmp; + } + return false; + } + //var m = this._model.data; + if(par.id === $.jstree.root) { + if(pos === "before") { pos = "first"; } + if(pos === "after") { pos = "last"; } + } + switch(pos) { + case "before": + pos = $.inArray(par.id, new_par.children); + break; + case "after" : + pos = $.inArray(par.id, new_par.children) + 1; + break; + case "inside": + case "first": + pos = 0; + break; + case "last": + pos = new_par.children.length; + break; + default: + if(!pos) { pos = 0; } + break; + } + if(pos > new_par.children.length) { pos = new_par.children.length; } + if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + if(obj.parent === new_par.id) { + dpc = new_par.children.concat(); + tmp = $.inArray(obj.id, dpc); + if(tmp !== -1) { + dpc = $.vakata.array_remove(dpc, tmp); + if(pos > tmp) { pos--; } + } + tmp = []; + for(i = 0, j = dpc.length; i < j; i++) { + tmp[i >= pos ? i+1 : i] = dpc[i]; + } + tmp[pos] = obj.id; + new_par.children = tmp; + this._node_changed(new_par.id); + this.redraw(new_par.id === $.jstree.root); + } + else { + // clean old parent and up + tmp = obj.children_d.concat(); + tmp.push(obj.id); + for(i = 0, j = obj.parents.length; i < j; i++) { + dpc = []; + p = old_ins._model.data[obj.parents[i]].children_d; + for(k = 0, l = p.length; k < l; k++) { + if($.inArray(p[k], tmp) === -1) { + dpc.push(p[k]); + } + } + old_ins._model.data[obj.parents[i]].children_d = dpc; + } + old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id); + + // insert into new parent and up + for(i = 0, j = new_par.parents.length; i < j; i++) { + this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp); + } + dpc = []; + for(i = 0, j = new_par.children.length; i < j; i++) { + dpc[i >= pos ? i+1 : i] = new_par.children[i]; + } + dpc[pos] = obj.id; + new_par.children = dpc; + new_par.children_d.push(obj.id); + new_par.children_d = new_par.children_d.concat(obj.children_d); + + // update object + obj.parent = new_par.id; + tmp = new_par.parents.concat(); + tmp.unshift(new_par.id); + p = obj.parents.length; + obj.parents = tmp; + + // update object children + tmp = tmp.concat(); + for(i = 0, j = obj.children_d.length; i < j; i++) { + this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1); + Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp); + } + + if(old_par === $.jstree.root || new_par.id === $.jstree.root) { + this._model.force_full_redraw = true; + } + if(!this._model.force_full_redraw) { + this._node_changed(old_par); + this._node_changed(new_par.id); + } + if(!skip_redraw) { + this.redraw(); + } + } + if(callback) { callback.call(this, obj, new_par, pos); } + /** + * triggered when a node is moved + * @event + * @name move_node.jstree + * @param {Object} node + * @param {String} parent the parent's ID + * @param {Number} position the position of the node among the parent's children + * @param {String} old_parent the old parent of the node + * @param {Number} old_position the old position of the node + * @param {Boolean} is_multi do the node and new parent belong to different instances + * @param {jsTree} old_instance the instance the node came from + * @param {jsTree} new_instance the instance of the new parent + */ + this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); + return obj.id; + }, + /** + * copy a node to a new parent + * @name copy_node(obj, par [, pos, callback, is_loaded]) + * @param {mixed} obj the node to copy, pass an array to copy multiple nodes + * @param {mixed} par the new parent + * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` + * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position + * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded + * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn + * @param {Boolean} instance internal parameter indicating if the node comes from another instance + * @trigger model.jstree copy_node.jstree + */ + copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { + var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi; + + par = this.get_node(par); + pos = pos === undefined ? 0 : pos; + if(!par) { return false; } + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); }); + } + + if($.vakata.is_array(obj)) { + if(obj.length === 1) { + obj = obj[0]; + } + else { + //obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) { + par = tmp; + pos = "after"; + } + } + this.redraw(); + return true; + } + } + obj = obj && obj.id ? obj : this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + + old_par = (obj.parent || $.jstree.root).toString(); + new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); + old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); + is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); + + if(old_ins && old_ins._id) { + obj = old_ins._model.data[obj.id]; + } + + if(par.id === $.jstree.root) { + if(pos === "before") { pos = "first"; } + if(pos === "after") { pos = "last"; } + } + switch(pos) { + case "before": + pos = $.inArray(par.id, new_par.children); + break; + case "after" : + pos = $.inArray(par.id, new_par.children) + 1; + break; + case "inside": + case "first": + pos = 0; + break; + case "last": + pos = new_par.children.length; + break; + default: + if(!pos) { pos = 0; } + break; + } + if(pos > new_par.children.length) { pos = new_par.children.length; } + if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj; + if(!node) { return false; } + if(node.id === true) { delete node.id; } + node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat()); + if(!node) { return false; } + tmp = this.get_node(node); + if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; } + dpc = []; + dpc.push(node); + dpc = dpc.concat(tmp.children_d); + this.trigger('model', { "nodes" : dpc, "parent" : new_par.id }); + + // insert into new parent and up + for(i = 0, j = new_par.parents.length; i < j; i++) { + this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc); + } + dpc = []; + for(i = 0, j = new_par.children.length; i < j; i++) { + dpc[i >= pos ? i+1 : i] = new_par.children[i]; + } + dpc[pos] = tmp.id; + new_par.children = dpc; + new_par.children_d.push(tmp.id); + new_par.children_d = new_par.children_d.concat(tmp.children_d); + + if(new_par.id === $.jstree.root) { + this._model.force_full_redraw = true; + } + if(!this._model.force_full_redraw) { + this._node_changed(new_par.id); + } + if(!skip_redraw) { + this.redraw(new_par.id === $.jstree.root); + } + if(callback) { callback.call(this, tmp, new_par, pos); } + /** + * triggered when a node is copied + * @event + * @name copy_node.jstree + * @param {Object} node the copied node + * @param {Object} original the original node + * @param {String} parent the parent's ID + * @param {Number} position the position of the node among the parent's children + * @param {String} old_parent the old parent of the node + * @param {Number} old_position the position of the original node + * @param {Boolean} is_multi do the node and new parent belong to different instances + * @param {jsTree} old_instance the instance the node came from + * @param {jsTree} new_instance the instance of the new parent + */ + this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); + return tmp.id; + }, + /** + * cut a node (a later call to `paste(obj)` would move the node) + * @name cut(obj) + * @param {mixed} obj multiple objects can be passed using an array + * @trigger cut.jstree + */ + cut : function (obj) { + if(!obj) { obj = this._data.core.selected.concat(); } + if(!$.vakata.is_array(obj)) { obj = [obj]; } + if(!obj.length) { return false; } + var tmp = [], o, t1, t2; + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + o = this.get_node(obj[t1]); + if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } + } + if(!tmp.length) { return false; } + ccp_node = tmp; + ccp_inst = this; + ccp_mode = 'move_node'; + /** + * triggered when nodes are added to the buffer for moving + * @event + * @name cut.jstree + * @param {Array} node + */ + this.trigger('cut', { "node" : obj }); + }, + /** + * copy a node (a later call to `paste(obj)` would copy the node) + * @name copy(obj) + * @param {mixed} obj multiple objects can be passed using an array + * @trigger copy.jstree + */ + copy : function (obj) { + if(!obj) { obj = this._data.core.selected.concat(); } + if(!$.vakata.is_array(obj)) { obj = [obj]; } + if(!obj.length) { return false; } + var tmp = [], o, t1, t2; + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + o = this.get_node(obj[t1]); + if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } + } + if(!tmp.length) { return false; } + ccp_node = tmp; + ccp_inst = this; + ccp_mode = 'copy_node'; + /** + * triggered when nodes are added to the buffer for copying + * @event + * @name copy.jstree + * @param {Array} node + */ + this.trigger('copy', { "node" : obj }); + }, + /** + * get the current buffer (any nodes that are waiting for a paste operation) + * @name get_buffer() + * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance) + */ + get_buffer : function () { + return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst }; + }, + /** + * check if there is something in the buffer to paste + * @name can_paste() + * @return {Boolean} + */ + can_paste : function () { + return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node]; + }, + /** + * copy or move the previously cut or copied nodes to a new parent + * @name paste(obj [, pos]) + * @param {mixed} obj the new parent + * @param {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0` + * @trigger paste.jstree + */ + paste : function (obj, pos) { + obj = this.get_node(obj); + if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; } + if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) { + /** + * triggered when paste is invoked + * @event + * @name paste.jstree + * @param {String} parent the ID of the receiving node + * @param {Array} node the nodes in the buffer + * @param {String} mode the performed operation - "copy_node" or "move_node" + */ + this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode }); + } + ccp_node = false; + ccp_mode = false; + ccp_inst = false; + }, + /** + * clear the buffer of previously copied or cut nodes + * @name clear_buffer() + * @trigger clear_buffer.jstree + */ + clear_buffer : function () { + ccp_node = false; + ccp_mode = false; + ccp_inst = false; + /** + * triggered when the copy / cut buffer is cleared + * @event + * @name clear_buffer.jstree + */ + this.trigger('clear_buffer'); + }, + /** + * put a node in edit mode (input field to rename the node) + * @name edit(obj [, default_text, callback]) + * @param {mixed} obj + * @param {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used) + * @param {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise), a boolean indicating if the user cancelled the edit and the original unescaped value provided by the user. You can also access the node's title using .text + */ + edit : function (obj, default_text, callback) { + var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false; + obj = this.get_node(obj); + if(!obj) { return false; } + if(!this.check("edit", obj, this.get_parent(obj))) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + tmp = obj; + default_text = typeof default_text === 'string' ? default_text : obj.text; + this.set_text(obj, ""); + obj = this._open_to(obj); + tmp.text = default_text; + + rtl = this._data.core.rtl; + w = this.element.width(); + this._data.core.focused = tmp.id; + a = obj.children('.jstree-anchor').trigger('focus'); + s = $(''); + /*! + oi = obj.children("i:visible"), + ai = a.children("i:visible"), + w1 = oi.width() * oi.length, + w2 = ai.width() * ai.length, + */ + t = default_text; + h1 = $("<"+"div>", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo(document.body); + h2 = $("<"+"input />", { + "value" : t, + "class" : "jstree-rename-input", + // "size" : t.length, + "css" : { + "padding" : "0", + "border" : "1px solid silver", + "box-sizing" : "border-box", + "display" : "inline-block", + "height" : (this._data.core.li_height) + "px", + "lineHeight" : (this._data.core.li_height) + "px", + "width" : "150px" // will be set a bit further down + }, + "blur" : function (e) { + e.stopImmediatePropagation(); + e.preventDefault(); + var i = s.children(".jstree-rename-input"), + v = i.val(), + f = this.settings.core.force_text, + nv; + if(v === "") { v = t; } + h1.remove(); + s.replaceWith(a); + s.remove(); + t = f ? t : $('
').append($.parseHTML(t)).html(); + obj = this.get_node(obj); + this.set_text(obj, t); + nv = !!this.rename_node(obj, f ? $('
').text(v).text() : $('
').append($.parseHTML(v)).html()); + if(!nv) { + this.set_text(obj, t); // move this up? and fix #483 + } + this._data.core.focused = tmp.id; + setTimeout(function () { + var node = this.get_node(tmp.id, true); + if(node.length) { + this._data.core.focused = tmp.id; + node.children('.jstree-anchor').trigger('focus'); + } + }.bind(this), 0); + if(callback) { + callback.call(this, tmp, nv, cancel, v); + } + h2 = null; + }.bind(this), + "keydown" : function (e) { + var key = e.which; + if(key === 27) { + cancel = true; + this.value = t; + } + if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { + e.stopImmediatePropagation(); + } + if(key === 27 || key === 13) { + e.preventDefault(); + this.blur(); + } + }, + "click" : function (e) { e.stopImmediatePropagation(); }, + "mousedown" : function (e) { e.stopImmediatePropagation(); }, + "keyup" : function (e) { + h2.width(Math.min(h1.text("pW" + this.value).width(),w)); + }, + "keypress" : function(e) { + if(e.which === 13) { return false; } + } + }); + fn = { + fontFamily : a.css('fontFamily') || '', + fontSize : a.css('fontSize') || '', + fontWeight : a.css('fontWeight') || '', + fontStyle : a.css('fontStyle') || '', + fontStretch : a.css('fontStretch') || '', + fontVariant : a.css('fontVariant') || '', + letterSpacing : a.css('letterSpacing') || '', + wordSpacing : a.css('wordSpacing') || '' + }; + s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2); + a.replaceWith(s); + h1.css(fn); + h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); + $(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) { + if (h2 && e.target !== h2) { + $(h2).trigger('blur'); + } + }); + }, + + + /** + * changes the theme + * @name set_theme(theme_name [, theme_url]) + * @param {String} theme_name the name of the new theme to apply + * @param {mixed} theme_url the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory. + * @trigger set_theme.jstree + */ + set_theme : function (theme_name, theme_url) { + if(!theme_name) { return false; } + if(theme_url === true) { + var dir = this.settings.core.themes.dir; + if(!dir) { dir = $.jstree.path + '/themes'; } + theme_url = dir + '/' + theme_name + '/style.css'; + } + if(theme_url && $.inArray(theme_url, themes_loaded) === -1) { + $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />'); + themes_loaded.push(theme_url); + } + if(this._data.core.themes.name) { + this.element.removeClass('jstree-' + this._data.core.themes.name); + } + this._data.core.themes.name = theme_name; + this.element.addClass('jstree-' + theme_name); + this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive'); + /** + * triggered when a theme is set + * @event + * @name set_theme.jstree + * @param {String} theme the new theme + */ + this.trigger('set_theme', { 'theme' : theme_name }); + }, + /** + * gets the name of the currently applied theme name + * @name get_theme() + * @return {String} + */ + get_theme : function () { return this._data.core.themes.name; }, + /** + * changes the theme variant (if the theme has variants) + * @name set_theme_variant(variant_name) + * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed) + */ + set_theme_variant : function (variant_name) { + if(this._data.core.themes.variant) { + this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); + } + this._data.core.themes.variant = variant_name; + if(variant_name) { + this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); + } + }, + /** + * gets the name of the currently applied theme variant + * @name get_theme() + * @return {String} + */ + get_theme_variant : function () { return this._data.core.themes.variant; }, + /** + * shows a striped background on the container (if the theme supports it) + * @name show_stripes() + */ + show_stripes : function () { + this._data.core.themes.stripes = true; + this.get_container_ul().addClass("jstree-striped"); + /** + * triggered when stripes are shown + * @event + * @name show_stripes.jstree + */ + this.trigger('show_stripes'); + }, + /** + * hides the striped background on the container + * @name hide_stripes() + */ + hide_stripes : function () { + this._data.core.themes.stripes = false; + this.get_container_ul().removeClass("jstree-striped"); + /** + * triggered when stripes are hidden + * @event + * @name hide_stripes.jstree + */ + this.trigger('hide_stripes'); + }, + /** + * toggles the striped background on the container + * @name toggle_stripes() + */ + toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } }, + /** + * shows the connecting dots (if the theme supports it) + * @name show_dots() + */ + show_dots : function () { + this._data.core.themes.dots = true; + this.get_container_ul().removeClass("jstree-no-dots"); + /** + * triggered when dots are shown + * @event + * @name show_dots.jstree + */ + this.trigger('show_dots'); + }, + /** + * hides the connecting dots + * @name hide_dots() + */ + hide_dots : function () { + this._data.core.themes.dots = false; + this.get_container_ul().addClass("jstree-no-dots"); + /** + * triggered when dots are hidden + * @event + * @name hide_dots.jstree + */ + this.trigger('hide_dots'); + }, + /** + * toggles the connecting dots + * @name toggle_dots() + */ + toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } }, + /** + * show the node icons + * @name show_icons() + */ + show_icons : function () { + this._data.core.themes.icons = true; + this.get_container_ul().removeClass("jstree-no-icons"); + /** + * triggered when icons are shown + * @event + * @name show_icons.jstree + */ + this.trigger('show_icons'); + }, + /** + * hide the node icons + * @name hide_icons() + */ + hide_icons : function () { + this._data.core.themes.icons = false; + this.get_container_ul().addClass("jstree-no-icons"); + /** + * triggered when icons are hidden + * @event + * @name hide_icons.jstree + */ + this.trigger('hide_icons'); + }, + /** + * toggle the node icons + * @name toggle_icons() + */ + toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }, + /** + * show the node ellipsis + * @name show_icons() + */ + show_ellipsis : function () { + this._data.core.themes.ellipsis = true; + this.get_container_ul().addClass("jstree-ellipsis"); + /** + * triggered when ellisis is shown + * @event + * @name show_ellipsis.jstree + */ + this.trigger('show_ellipsis'); + }, + /** + * hide the node ellipsis + * @name hide_ellipsis() + */ + hide_ellipsis : function () { + this._data.core.themes.ellipsis = false; + this.get_container_ul().removeClass("jstree-ellipsis"); + /** + * triggered when ellisis is hidden + * @event + * @name hide_ellipsis.jstree + */ + this.trigger('hide_ellipsis'); + }, + /** + * toggle the node ellipsis + * @name toggle_icons() + */ + toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } }, + /** + * set the node icon for a node + * @name set_icon(obj, icon) + * @param {mixed} obj + * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class + */ + set_icon : function (obj, icon) { + var t1, t2, dom, old; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.set_icon(obj[t1], icon); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + old = obj.icon; + obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon; + dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon"); + if(icon === false) { + dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); + this.hide_icon(obj); + } + else if(icon === true || icon === null || icon === undefined || icon === '') { + dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); + if(old === false) { this.show_icon(obj); } + } + else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) { + dom.removeClass(old).css("background",""); + dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon); + if(old === false) { this.show_icon(obj); } + } + else { + dom.removeClass(old).css("background",""); + dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon); + if(old === false) { this.show_icon(obj); } + } + return true; + }, + /** + * get the node icon for a node + * @name get_icon(obj) + * @param {mixed} obj + * @return {String} + */ + get_icon : function (obj) { + obj = this.get_node(obj); + return (!obj || obj.id === $.jstree.root) ? false : obj.icon; + }, + /** + * hide the icon on an individual node + * @name hide_icon(obj) + * @param {mixed} obj + */ + hide_icon : function (obj) { + var t1, t2; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.hide_icon(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj === $.jstree.root) { return false; } + obj.icon = false; + this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden'); + return true; + }, + /** + * show the icon on an individual node + * @name show_icon(obj) + * @param {mixed} obj + */ + show_icon : function (obj) { + var t1, t2, dom; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.show_icon(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj === $.jstree.root) { return false; } + dom = this.get_node(obj, true); + obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true; + if(!obj.icon) { obj.icon = true; } + dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden'); + return true; + } + }; + + // helpers + $.vakata = {}; + // collect attributes + $.vakata.attributes = function(node, with_values) { + node = $(node)[0]; + var attr = with_values ? {} : []; + if(node && node.attributes) { + $.each(node.attributes, function (i, v) { + if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; } + if(v.value !== null && $.vakata.trim(v.value) !== '') { + if(with_values) { attr[v.name] = v.value; } + else { attr.push(v.name); } + } + }); + } + return attr; + }; + $.vakata.array_unique = function(array) { + var a = [], i, j, l, o = {}; + for(i = 0, l = array.length; i < l; i++) { + if(o[array[i]] === undefined) { + a.push(array[i]); + o[array[i]] = true; + } + } + return a; + }; + // remove item from array + $.vakata.array_remove = function(array, from) { + array.splice(from, 1); + return array; + //var rest = array.slice((to || from) + 1 || array.length); + //array.length = from < 0 ? array.length + from : from; + //array.push.apply(array, rest); + //return array; + }; + // remove item from array + $.vakata.array_remove_item = function(array, item) { + var tmp = $.inArray(item, array); + return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array; + }; + $.vakata.array_filter = function(c,a,b,d,e) { + if (c.filter) { + return c.filter(a, b); + } + d=[]; + for (e in c) { + if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) { + d.push(c[e]); + } + } + return d; + }; + $.vakata.trim = function (text) { + return String.prototype.trim ? + String.prototype.trim.call(text.toString()) : + text.toString().replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; + $.vakata.is_function = function(obj) { + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + $.vakata.is_array = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind#polyfill + if (!Function.prototype.bind) { + Function.prototype.bind = function () { + var thatFunc = this, thatArg = arguments[0]; + var args = Array.prototype.slice.call(arguments, 1); + if (typeof thatFunc !== 'function') { + // closest thing possible to the ECMAScript 5 + // internal IsCallable function + throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); + } + return function(){ + var funcArgs = args.concat(Array.prototype.slice.call(arguments)); + return thatFunc.apply(thatArg, funcArgs); + }; + }; + } + + +/** + * ### Changed plugin + * + * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes. + */ + + $.jstree.plugins.changed = function (options, parent) { + var last = []; + this.trigger = function (ev, data) { + var i, j; + if(!data) { + data = {}; + } + if(ev.replace('.jstree','') === 'changed') { + data.changed = { selected : [], deselected : [] }; + var tmp = {}; + for(i = 0, j = last.length; i < j; i++) { + tmp[last[i]] = 1; + } + for(i = 0, j = data.selected.length; i < j; i++) { + if(!tmp[data.selected[i]]) { + data.changed.selected.push(data.selected[i]); + } + else { + tmp[data.selected[i]] = 2; + } + } + for(i = 0, j = last.length; i < j; i++) { + if(tmp[last[i]] === 1) { + data.changed.deselected.push(last[i]); + } + } + last = data.selected.slice(); + } + /** + * triggered when selection changes (the "changed" plugin enhances the original event with more data) + * @event + * @name changed.jstree + * @param {Object} node + * @param {Object} action the action that caused the selection to change + * @param {Array} selected the current selection + * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event + * @param {Object} event the event (if any) that triggered this changed event + * @plugin changed + */ + parent.trigger.call(this, ev, data); + }; + this.refresh = function (skip_loading, forget_state) { + last = []; + return parent.refresh.apply(this, arguments); + }; + }; + +/** + * ### Checkbox plugin + * + * This plugin renders checkbox icons in front of each node, making multiple selection much easier. + * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up. + */ + + var _i = document.createElement('I'); + _i.className = 'jstree-icon jstree-checkbox'; + _i.setAttribute('role', 'presentation'); + /** + * stores all defaults for the checkbox plugin + * @name $.jstree.defaults.checkbox + * @plugin checkbox + */ + $.jstree.defaults.checkbox = { + /** + * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`. + * @name $.jstree.defaults.checkbox.visible + * @plugin checkbox + */ + visible : true, + /** + * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`. + * @name $.jstree.defaults.checkbox.three_state + * @plugin checkbox + */ + three_state : true, + /** + * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`. + * @name $.jstree.defaults.checkbox.whole_node + * @plugin checkbox + */ + whole_node : true, + /** + * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`. + * @name $.jstree.defaults.checkbox.keep_selected_style + * @plugin checkbox + */ + keep_selected_style : true, + /** + * This setting controls how cascading and undetermined nodes are applied. + * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used. + * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''. + * @name $.jstree.defaults.checkbox.cascade + * @plugin checkbox + */ + cascade : '', + /** + * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing. + * @name $.jstree.defaults.checkbox.tie_selection + * @plugin checkbox + */ + tie_selection : true, + + /** + * This setting controls if cascading down affects disabled checkboxes + * @name $.jstree.defaults.checkbox.cascade_to_disabled + * @plugin checkbox + */ + cascade_to_disabled : true, + + /** + * This setting controls if cascading down affects hidden checkboxes + * @name $.jstree.defaults.checkbox.cascade_to_hidden + * @plugin checkbox + */ + cascade_to_hidden : true + }; + $.jstree.plugins.checkbox = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + this._data.checkbox.uto = false; + this._data.checkbox.selected = []; + if(this.settings.checkbox.three_state) { + this.settings.checkbox.cascade = 'up+down+undetermined'; + } + this.element + .on("init.jstree", function () { + this._data.checkbox.visible = this.settings.checkbox.visible; + if(!this.settings.checkbox.keep_selected_style) { + this.element.addClass('jstree-checkbox-no-clicked'); + } + if(this.settings.checkbox.tie_selection) { + this.element.addClass('jstree-checkbox-selection'); + } + }.bind(this)) + .on("loading.jstree", function () { + this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ](); + }.bind(this)); + if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { + this.element + .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', function () { + // only if undetermined is in setting + if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } + this._data.checkbox.uto = setTimeout(this._undetermined.bind(this), 50); + }.bind(this)); + } + if(!this.settings.checkbox.tie_selection) { + this.element + .on('model.jstree', function (e, data) { + var m = this._model.data, + p = m[data.parent], + dpc = data.nodes, + i, j; + for(i = 0, j = dpc.length; i < j; i++) { + m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked); + if(m[dpc[i]].state.checked) { + this._data.checkbox.selected.push(dpc[i]); + } + } + }.bind(this)); + } + if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) { + this.element + .on('model.jstree', function (e, data) { + var m = this._model.data, + p = m[data.parent], + dpc = data.nodes, + chd = [], + c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; + + if(s.indexOf('down') !== -1) { + // apply down + if(p.state[ t ? 'selected' : 'checked' ]) { + for(i = 0, j = dpc.length; i < j; i++) { + m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true; + } + + this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc); + } + else { + for(i = 0, j = dpc.length; i < j; i++) { + if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) { + for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) { + m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true; + } + this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d); + } + } + } + } + + if(s.indexOf('up') !== -1) { + // apply up + for(i = 0, j = p.children_d.length; i < j; i++) { + if(!m[p.children_d[i]].children.length) { + chd.push(m[p.children_d[i]].parent); + } + } + chd = $.vakata.array_unique(chd); + for(k = 0, l = chd.length; k < l; k++) { + p = m[chd[k]]; + while(p && p.id !== $.jstree.root) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(c === j) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + p = this.get_node(p.parent); + } + } + } + + this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected); + }.bind(this)) + .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', function (e, data) { + var self = this, + obj = data.node, + m = this._model.data, + par = this.get_node(obj.parent), + i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, + sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected; + + for (i = 0, j = cur.length; i < j; i++) { + sel[cur[i]] = true; + } + + // apply down + if(s.indexOf('down') !== -1) { + //this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d)); + var selectedIds = this._cascade_new_checked_state(obj.id, true); + var temp = obj.children_d.concat(obj.id); + for (i = 0, j = temp.length; i < j; i++) { + if (selectedIds.indexOf(temp[i]) > -1) { + sel[temp[i]] = true; + } + else { + delete sel[temp[i]]; + } + } + } + + // apply up + if(s.indexOf('up') !== -1) { + while(par && par.id !== $.jstree.root) { + c = 0; + for(i = 0, j = par.children.length; i < j; i++) { + c += m[par.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(c === j) { + par.state[ t ? 'selected' : 'checked' ] = true; + sel[par.id] = true; + //this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id); + tmp = this.get_node(par, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + par = this.get_node(par.parent); + } + } + + cur = []; + for (i in sel) { + if (sel.hasOwnProperty(i)) { + cur.push(i); + } + } + this._data[ t ? 'core' : 'checkbox' ].selected = cur; + }.bind(this)) + .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', function (e, data) { + var obj = this.get_node($.jstree.root), + m = this._model.data, + i, j, tmp; + for(i = 0, j = obj.children_d.length; i < j; i++) { + tmp = m[obj.children_d[i]]; + if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { + tmp.original.state.undetermined = false; + } + } + }.bind(this)) + .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', function (e, data) { + var self = this, + obj = data.node, + dom = this.get_node(obj, true), + i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, + cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {}, + stillSelectedIds = [], + allIds = obj.children_d.concat(obj.id); + + // apply down + if(s.indexOf('down') !== -1) { + var selectedIds = this._cascade_new_checked_state(obj.id, false); + + cur = $.vakata.array_filter(cur, function(id) { + return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1; + }); + } + + // only apply up if cascade up is enabled and if this node is not selected + // (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected). + if(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) { + for(i = 0, j = obj.parents.length; i < j; i++) { + tmp = this._model.data[obj.parents[i]]; + tmp.state[ t ? 'selected' : 'checked' ] = false; + if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { + tmp.original.state.undetermined = false; + } + tmp = this.get_node(obj.parents[i], true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + + cur = $.vakata.array_filter(cur, function(id) { + return obj.parents.indexOf(id) === -1; + }); + } + + this._data[ t ? 'core' : 'checkbox' ].selected = cur; + }.bind(this)); + } + if(this.settings.checkbox.cascade.indexOf('up') !== -1) { + this.element + .on('delete_node.jstree', function (e, data) { + // apply up (whole handler) + var p = this.get_node(data.parent), + m = this._model.data, + i, j, c, tmp, t = this.settings.checkbox.tie_selection; + while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(j > 0 && c === j) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + p = this.get_node(p.parent); + } + }.bind(this)) + .on('move_node.jstree', function (e, data) { + // apply up (whole handler) + var is_multi = data.is_multi, + old_par = data.old_parent, + new_par = this.get_node(data.parent), + m = this._model.data, + p, c, i, j, tmp, t = this.settings.checkbox.tie_selection; + if(!is_multi) { + p = this.get_node(old_par); + while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(j > 0 && c === j) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + p = this.get_node(p.parent); + } + } + p = new_par; + while(p && p.id !== $.jstree.root) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(c === j) { + if(!p.state[ t ? 'selected' : 'checked' ]) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + } + else { + if(p.state[ t ? 'selected' : 'checked' ]) { + p.state[ t ? 'selected' : 'checked' ] = false; + this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + } + p = this.get_node(p.parent); + } + }.bind(this)); + } + }; + /** + * get an array of all nodes whose state is "undetermined" + * @name get_undetermined([full]) + * @param {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_undetermined = function (full) { + if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) { + return []; + } + var i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = []; + for(i = 0, j = s.length; i < j; i++) { + if(m[s[i]] && m[s[i]].parents) { + for(k = 0, l = m[s[i]].parents.length; k < l; k++) { + if(o[m[s[i]].parents[k]] !== undefined) { + break; + } + if(m[s[i]].parents[k] !== $.jstree.root) { + o[m[s[i]].parents[k]] = true; + p.push(m[s[i]].parents[k]); + } + } + } + } + // attempt for server side undetermined state + this.element.find('.jstree-closed').not(':has(.jstree-children)') + .each(function () { + var tmp = tt.get_node(this), tmp2; + + if(!tmp) { return; } + + if(!tmp.state.loaded) { + if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) { + if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) { + o[tmp.id] = true; + p.push(tmp.id); + } + for(k = 0, l = tmp.parents.length; k < l; k++) { + if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) { + o[tmp.parents[k]] = true; + p.push(tmp.parents[k]); + } + } + } + } + else { + for(i = 0, j = tmp.children_d.length; i < j; i++) { + tmp2 = m[tmp.children_d[i]]; + if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) { + if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) { + o[tmp2.id] = true; + p.push(tmp2.id); + } + for(k = 0, l = tmp2.parents.length; k < l; k++) { + if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) { + o[tmp2.parents[k]] = true; + p.push(tmp2.parents[k]); + } + } + } + } + } + }); + for (i = 0, j = p.length; i < j; i++) { + if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) { + r.push(full ? m[p[i]] : p[i]); + } + } + return r; + }; + /** + * set the undetermined state where and if necessary. Used internally. + * @private + * @name _undetermined() + * @plugin checkbox + */ + this._undetermined = function () { + if(this.element === null) { return; } + var p = this.get_undetermined(false), i, j, s; + + this.element.find('.jstree-undetermined').removeClass('jstree-undetermined'); + for (i = 0, j = p.length; i < j; i++) { + s = this.get_node(p[i], true); + if(s && s.length) { + s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined'); + } + } + }; + this.redraw_node = function(obj, deep, is_callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if(obj) { + var i, j, tmp = null, icon = null; + for(i = 0, j = obj.childNodes.length; i < j; i++) { + if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { + tmp = obj.childNodes[i]; + break; + } + } + if(tmp) { + if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; } + icon = _i.cloneNode(false); + if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; } + tmp.insertBefore(icon, tmp.childNodes[0]); + } + } + if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { + if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } + this._data.checkbox.uto = setTimeout(this._undetermined.bind(this), 50); + } + return obj; + }; + /** + * show the node checkbox icons + * @name show_checkboxes() + * @plugin checkbox + */ + this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); }; + /** + * hide the node checkbox icons + * @name hide_checkboxes() + * @plugin checkbox + */ + this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); }; + /** + * toggle the node icons + * @name toggle_checkboxes() + * @plugin checkbox + */ + this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } }; + /** + * checks if a node is in an undetermined state + * @name is_undetermined(obj) + * @param {mixed} obj + * @return {Boolean} + */ + this.is_undetermined = function (obj) { + obj = this.get_node(obj); + var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data; + if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) { + return false; + } + if(!obj.state.loaded && obj.original.state.undetermined === true) { + return true; + } + for(i = 0, j = obj.children_d.length; i < j; i++) { + if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) { + return true; + } + } + return false; + }; + /** + * disable a node's checkbox + * @name disable_checkbox(obj) + * @param {mixed} obj an array can be used too + * @trigger disable_checkbox.jstree + * @plugin checkbox + */ + this.disable_checkbox = function (obj) { + var t1, t2, dom; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.disable_checkbox(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(!obj.state.checkbox_disabled) { + obj.state.checkbox_disabled = true; + if(dom && dom.length) { + dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled'); + } + /** + * triggered when an node's checkbox is disabled + * @event + * @name disable_checkbox.jstree + * @param {Object} node + * @plugin checkbox + */ + this.trigger('disable_checkbox', { 'node' : obj }); + } + }; + /** + * enable a node's checkbox + * @name enable_checkbox(obj) + * @param {mixed} obj an array can be used too + * @trigger enable_checkbox.jstree + * @plugin checkbox + */ + this.enable_checkbox = function (obj) { + var t1, t2, dom; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.enable_checkbox(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(obj.state.checkbox_disabled) { + obj.state.checkbox_disabled = false; + if(dom && dom.length) { + dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled'); + } + /** + * triggered when an node's checkbox is enabled + * @event + * @name enable_checkbox.jstree + * @param {Object} node + * @plugin checkbox + */ + this.trigger('enable_checkbox', { 'node' : obj }); + } + }; + + this.activate_node = function (obj, e) { + if($(e.target).hasClass('jstree-checkbox-disabled')) { + return false; + } + if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) { + e.ctrlKey = true; + } + if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) { + return parent.activate_node.call(this, obj, e); + } + if(this.is_disabled(obj)) { + return false; + } + if(this.is_checked(obj)) { + this.uncheck_node(obj, e); + } + else { + this.check_node(obj, e); + } + this.trigger('activate_node', { 'node' : this.get_node(obj) }); + }; + + /** + * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants). + * However if these unaffected nodes are already selected their ids will be included in the returned array. + * @private + * @name _cascade_new_checked_state(id, checkedState) + * @param {string} id the node ID + * @param {bool} checkedState should the nodes be checked or not + * @returns {Array} Array of all node id's (in this tree branch) that are checked. + */ + this._cascade_new_checked_state = function (id, checkedState) { + var self = this; + var t = this.settings.checkbox.tie_selection; + var node = this._model.data[id]; + var selectedNodeIds = []; + var selectedChildrenIds = [], i, j, selectedChildIds; + + if ( + (this.settings.checkbox.cascade_to_disabled || !node.state.disabled) && + (this.settings.checkbox.cascade_to_hidden || !node.state.hidden) + ) { + //First try and check/uncheck the children + if (node.children) { + for (i = 0, j = node.children.length; i < j; i++) { + var childId = node.children[i]; + selectedChildIds = self._cascade_new_checked_state(childId, checkedState); + selectedNodeIds = selectedNodeIds.concat(selectedChildIds); + if (selectedChildIds.indexOf(childId) > -1) { + selectedChildrenIds.push(childId); + } + } + } + + var dom = self.get_node(node, true); + + //A node's state is undetermined if some but not all of it's children are checked/selected . + var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length; + + if(node.original && node.original.state && node.original.state.undetermined) { + node.original.state.undetermined = undetermined; + } + + //If a node is undetermined then remove selected class + if (undetermined) { + node.state[ t ? 'selected' : 'checked' ] = false; + dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + //Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children), + //check the node and style it correctly. + else if (checkedState && selectedChildrenIds.length === node.children.length) { + node.state[ t ? 'selected' : 'checked' ] = checkedState; + selectedNodeIds.push(node.id); + + dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + else { + node.state[ t ? 'selected' : 'checked' ] = false; + dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + selectedChildIds = this.get_checked_descendants(id); + + if (node.state[ t ? 'selected' : 'checked' ]) { + selectedChildIds.push(node.id); + } + + selectedNodeIds = selectedNodeIds.concat(selectedChildIds); + } + + return selectedNodeIds; + }; + + /** + * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id) + * @name get_checked_descendants(obj) + * @param {string} id the node ID + * @return {Array} array of IDs + * @plugin checkbox + */ + this.get_checked_descendants = function (id) { + var self = this; + var t = self.settings.checkbox.tie_selection; + var node = self._model.data[id]; + + return $.vakata.array_filter(node.children_d, function(_id) { + return self._model.data[_id].state[ t ? 'selected' : 'checked' ]; + }); + }; + + /** + * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally) + * @name check_node(obj) + * @param {mixed} obj an array can be used to check multiple nodes + * @trigger check_node.jstree + * @plugin checkbox + */ + this.check_node = function (obj, e) { + if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); } + var dom, t1, t2, th; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.check_node(obj[t1], e); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(!obj.state.checked) { + obj.state.checked = true; + this._data.checkbox.selected.push(obj.id); + if(dom && dom.length) { + dom.children('.jstree-anchor').addClass('jstree-checked'); + } + /** + * triggered when an node is checked (only if tie_selection in checkbox settings is false) + * @event + * @name check_node.jstree + * @param {Object} node + * @param {Array} selected the current selection + * @param {Object} event the event (if any) that triggered this check_node + * @plugin checkbox + */ + this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); + } + }; + /** + * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally) + * @name uncheck_node(obj) + * @param {mixed} obj an array can be used to uncheck multiple nodes + * @trigger uncheck_node.jstree + * @plugin checkbox + */ + this.uncheck_node = function (obj, e) { + if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); } + var t1, t2, dom; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.uncheck_node(obj[t1], e); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(obj.state.checked) { + obj.state.checked = false; + this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id); + if(dom.length) { + dom.children('.jstree-anchor').removeClass('jstree-checked'); + } + /** + * triggered when an node is unchecked (only if tie_selection in checkbox settings is false) + * @event + * @name uncheck_node.jstree + * @param {Object} node + * @param {Array} selected the current selection + * @param {Object} event the event (if any) that triggered this uncheck_node + * @plugin checkbox + */ + this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); + } + }; + + /** + * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally) + * @name check_all() + * @trigger check_all.jstree, changed.jstree + * @plugin checkbox + */ + this.check_all = function () { + if(this.settings.checkbox.tie_selection) { return this.select_all(); } + var tmp = this._data.checkbox.selected.concat([]), i, j; + this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat(); + for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { + if(this._model.data[this._data.checkbox.selected[i]]) { + this._model.data[this._data.checkbox.selected[i]].state.checked = true; + } + } + this.redraw(true); + /** + * triggered when all nodes are checked (only if tie_selection in checkbox settings is false) + * @event + * @name check_all.jstree + * @param {Array} selected the current selection + * @plugin checkbox + */ + this.trigger('check_all', { 'selected' : this._data.checkbox.selected }); + }; + /** + * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally) + * @name uncheck_all() + * @trigger uncheck_all.jstree + * @plugin checkbox + */ + this.uncheck_all = function () { + if(this.settings.checkbox.tie_selection) { return this.deselect_all(); } + var tmp = this._data.checkbox.selected.concat([]), i, j; + for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { + if(this._model.data[this._data.checkbox.selected[i]]) { + this._model.data[this._data.checkbox.selected[i]].state.checked = false; + } + } + this._data.checkbox.selected = []; + this.element.find('.jstree-checked').removeClass('jstree-checked'); + /** + * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false) + * @event + * @name uncheck_all.jstree + * @param {Object} node the previous selection + * @param {Array} selected the current selection + * @plugin checkbox + */ + this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp }); + }; + /** + * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected) + * @name is_checked(obj) + * @param {mixed} obj + * @return {Boolean} + * @plugin checkbox + */ + this.is_checked = function (obj) { + if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + return obj.state.checked; + }; + /** + * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected) + * @name get_checked([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_checked = function (full) { + if(this.settings.checkbox.tie_selection) { return this.get_selected(full); } + return full ? $.map(this._data.checkbox.selected, function (i) { return this.get_node(i); }.bind(this)) : this._data.checkbox.selected.slice(); + }; + /** + * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected) + * @name get_top_checked([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_top_checked = function (full) { + if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); } + var tmp = this.get_checked(true), + obj = {}, i, j, k, l; + for(i = 0, j = tmp.length; i < j; i++) { + obj[tmp[i].id] = tmp[i]; + } + for(i = 0, j = tmp.length; i < j; i++) { + for(k = 0, l = tmp[i].children_d.length; k < l; k++) { + if(obj[tmp[i].children_d[k]]) { + delete obj[tmp[i].children_d[k]]; + } + } + } + tmp = []; + for(i in obj) { + if(obj.hasOwnProperty(i)) { + tmp.push(i); + } + } + return full ? $.map(tmp, function (i) { return this.get_node(i); }.bind(this)) : tmp; + }; + /** + * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected) + * @name get_bottom_checked([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_bottom_checked = function (full) { + if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); } + var tmp = this.get_checked(true), + obj = [], i, j; + for(i = 0, j = tmp.length; i < j; i++) { + if(!tmp[i].children.length) { + obj.push(tmp[i].id); + } + } + return full ? $.map(obj, function (i) { return this.get_node(i); }.bind(this)) : obj; + }; + this.load_node = function (obj, callback) { + var k, l, i, j, c, tmp; + if(!$.vakata.is_array(obj) && !this.settings.checkbox.tie_selection) { + tmp = this.get_node(obj); + if(tmp && tmp.state.loaded) { + for(k = 0, l = tmp.children_d.length; k < l; k++) { + if(this._model.data[tmp.children_d[k]].state.checked) { + c = true; + this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]); + } + } + } + } + return parent.load_node.apply(this, arguments); + }; + this.get_state = function () { + var state = parent.get_state.apply(this, arguments); + if(this.settings.checkbox.tie_selection) { return state; } + state.checkbox = this._data.checkbox.selected.slice(); + return state; + }; + this.set_state = function (state, callback) { + var res = parent.set_state.apply(this, arguments); + if(res && state.checkbox) { + if(!this.settings.checkbox.tie_selection) { + this.uncheck_all(); + var _this = this; + $.each(state.checkbox, function (i, v) { + _this.check_node(v); + }); + } + delete state.checkbox; + this.set_state(state, callback); + return false; + } + return res; + }; + this.refresh = function (skip_loading, forget_state) { + if(this.settings.checkbox.tie_selection) { + this._data.checkbox.selected = []; + } + return parent.refresh.apply(this, arguments); + }; + }; + + // include the checkbox plugin by default + // $.jstree.defaults.plugins.push("checkbox"); + + +/** + * ### Conditionalselect plugin + * + * This plugin allows defining a callback to allow or deny node selection by user input (activate node method). + */ + + /** + * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`. + * @name $.jstree.defaults.checkbox.visible + * @plugin checkbox + */ + $.jstree.defaults.conditionalselect = function () { return true; }; + $.jstree.plugins.conditionalselect = function (options, parent) { + // own function + this.activate_node = function (obj, e) { + if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) { + return parent.activate_node.call(this, obj, e); + } + }; + }; + + +/** + * ### Contextmenu plugin + * + * Shows a context menu when a node is right-clicked. + */ + + /** + * stores all defaults for the contextmenu plugin + * @name $.jstree.defaults.contextmenu + * @plugin contextmenu + */ + $.jstree.defaults.contextmenu = { + /** + * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`. + * @name $.jstree.defaults.contextmenu.select_node + * @plugin contextmenu + */ + select_node : true, + /** + * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used. + * @name $.jstree.defaults.contextmenu.show_at_node + * @plugin contextmenu + */ + show_at_node : true, + /** + * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too). + * + * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu. + * + * * `separator_before` - a boolean indicating if there should be a separator before this item + * * `separator_after` - a boolean indicating if there should be a separator after this item + * * `_disabled` - a boolean indicating if this action should be disabled + * * `label` - a string - the name of the action (could be a function returning a string) + * * `title` - a string - an optional tooltip for the item + * * `action` - a function to be executed if this item is chosen, the function will receive + * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class + * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2) + * * `shortcut_label` - shortcut label (like for example `F2` for rename) + * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered + * + * @name $.jstree.defaults.contextmenu.items + * @plugin contextmenu + */ + items : function (o, cb) { // Could be an object directly + return { + "create" : { + "separator_before" : false, + "separator_after" : true, + "_disabled" : false, //(this.check("create_node", data.reference, {}, "last")), + "label" : "Create", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + inst.create_node(obj, {}, "last", function (new_node) { + try { + inst.edit(new_node); + } catch (ex) { + setTimeout(function () { inst.edit(new_node); },0); + } + }); + } + }, + "rename" : { + "separator_before" : false, + "separator_after" : false, + "_disabled" : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")), + "label" : "Rename", + /*! + "shortcut" : 113, + "shortcut_label" : 'F2', + "icon" : "glyphicon glyphicon-leaf", + */ + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + inst.edit(obj); + } + }, + "remove" : { + "separator_before" : false, + "icon" : false, + "separator_after" : false, + "_disabled" : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")), + "label" : "Delete", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + if(inst.is_selected(obj)) { + inst.delete_node(inst.get_selected()); + } + else { + inst.delete_node(obj); + } + } + }, + "ccp" : { + "separator_before" : true, + "icon" : false, + "separator_after" : false, + "label" : "Edit", + "action" : false, + "submenu" : { + "cut" : { + "separator_before" : false, + "separator_after" : false, + "label" : "Cut", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + if(inst.is_selected(obj)) { + inst.cut(inst.get_top_selected()); + } + else { + inst.cut(obj); + } + } + }, + "copy" : { + "separator_before" : false, + "icon" : false, + "separator_after" : false, + "label" : "Copy", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + if(inst.is_selected(obj)) { + inst.copy(inst.get_top_selected()); + } + else { + inst.copy(obj); + } + } + }, + "paste" : { + "separator_before" : false, + "icon" : false, + "_disabled" : function (data) { + return !$.jstree.reference(data.reference).can_paste(); + }, + "separator_after" : false, + "label" : "Paste", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + inst.paste(obj); + } + } + } + } + }; + } + }; + + $.jstree.plugins.contextmenu = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + + var last_ts = 0, cto = null, ex, ey; + this.element + .on("init.jstree loading.jstree ready.jstree", function () { + this.get_container_ul().addClass('jstree-contextmenu'); + }.bind(this)) + .on("contextmenu.jstree", ".jstree-anchor", function (e, data) { + if (e.target.tagName.toLowerCase() === 'input') { + return; + } + e.preventDefault(); + last_ts = e.ctrlKey ? +new Date() : 0; + if(data || cto) { + last_ts = (+new Date()) + 10000; + } + if(cto) { + clearTimeout(cto); + } + if(!this.is_loading(e.currentTarget)) { + this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e); + } + }.bind(this)) + .on("click.jstree", ".jstree-anchor", function (e) { + if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click + $.vakata.context.hide(); + } + last_ts = 0; + }.bind(this)) + .on("touchstart.jstree", ".jstree-anchor", function (e) { + if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) { + return; + } + ex = e.originalEvent.changedTouches[0].clientX; + ey = e.originalEvent.changedTouches[0].clientY; + cto = setTimeout(function () { + $(e.currentTarget).trigger('contextmenu', true); + }, 750); + }) + .on('touchmove.vakata.jstree', function (e) { + if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) { + clearTimeout(cto); + $.vakata.context.hide(); + } + }) + .on('touchend.vakata.jstree', function (e) { + if(cto) { + clearTimeout(cto); + } + }); + + /*! + if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) { + var el = null, tm = null; + this.element + .on("touchstart", ".jstree-anchor", function (e) { + el = e.currentTarget; + tm = +new Date(); + $(document).one("touchend", function (e) { + e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset); + e.currentTarget = e.target; + tm = ((+(new Date())) - tm); + if(e.target === el && tm > 600 && tm < 1000) { + e.preventDefault(); + $(el).trigger('contextmenu', e); + } + el = null; + tm = null; + }); + }); + } + */ + $(document).on("context_hide.vakata.jstree", function (e, data) { + this._data.contextmenu.visible = false; + $(data.reference).removeClass('jstree-context'); + }.bind(this)); + }; + this.teardown = function () { + if(this._data.contextmenu.visible) { + $.vakata.context.hide(); + } + $(document).off("context_hide.vakata.jstree"); + parent.teardown.call(this); + }; + + /** + * prepare and show the context menu for a node + * @name show_contextmenu(obj [, x, y]) + * @param {mixed} obj the node + * @param {Number} x the x-coordinate relative to the document to show the menu at + * @param {Number} y the y-coordinate relative to the document to show the menu at + * @param {Object} e the event if available that triggered the contextmenu + * @plugin contextmenu + * @trigger show_contextmenu.jstree + */ + this.show_contextmenu = function (obj, x, y, e) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + var s = this.settings.contextmenu, + d = this.get_node(obj, true), + a = d.children(".jstree-anchor"), + o = false, + i = false; + if(s.show_at_node || x === undefined || y === undefined) { + o = a.offset(); + x = o.left; + y = o.top + this._data.core.li_height; + } + if(this.settings.contextmenu.select_node && !this.is_selected(obj)) { + this.activate_node(obj, e); + } + + i = s.items; + if($.vakata.is_function(i)) { + i = i.call(this, obj, function (i) { + this._show_contextmenu(obj, x, y, i); + }.bind(this)); + } + if($.isPlainObject(i)) { + this._show_contextmenu(obj, x, y, i); + } + }; + /** + * show the prepared context menu for a node + * @name _show_contextmenu(obj, x, y, i) + * @param {mixed} obj the node + * @param {Number} x the x-coordinate relative to the document to show the menu at + * @param {Number} y the y-coordinate relative to the document to show the menu at + * @param {Number} i the object of items to show + * @plugin contextmenu + * @trigger show_contextmenu.jstree + * @private + */ + this._show_contextmenu = function (obj, x, y, i) { + var d = this.get_node(obj, true), + a = d.children(".jstree-anchor"); + $(document).one("context_show.vakata.jstree", function (e, data) { + var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu'; + $(data.element).addClass(cls); + a.addClass('jstree-context'); + }.bind(this)); + this._data.contextmenu.visible = true; + $.vakata.context.show(a, { 'x' : x, 'y' : y }, i); + /** + * triggered when the contextmenu is shown for a node + * @event + * @name show_contextmenu.jstree + * @param {Object} node the node + * @param {Number} x the x-coordinate of the menu relative to the document + * @param {Number} y the y-coordinate of the menu relative to the document + * @plugin contextmenu + */ + this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y }); + }; + }; + + // contextmenu helper + (function ($) { + var right_to_left = false, + vakata_context = { + element : false, + reference : false, + position_x : 0, + position_y : 0, + items : [], + html : "", + is_visible : false + }; + + $.vakata.context = { + settings : { + hide_onmouseleave : 0, + icons : true + }, + _trigger : function (event_name) { + $(document).triggerHandler("context_" + event_name + ".vakata", { + "reference" : vakata_context.reference, + "element" : vakata_context.element, + "position" : { + "x" : vakata_context.position_x, + "y" : vakata_context.position_y + } + }); + }, + _execute : function (i) { + i = vakata_context.items[i]; + return i && (!i._disabled || ($.vakata.is_function(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, { + "item" : i, + "reference" : vakata_context.reference, + "element" : vakata_context.element, + "position" : { + "x" : vakata_context.position_x, + "y" : vakata_context.position_y + } + }) : false; + }, + _parse : function (o, is_callback) { + if(!o) { return false; } + if(!is_callback) { + vakata_context.html = ""; + vakata_context.items = []; + } + var str = "", + sep = false, + tmp; + + if(is_callback) { str += "<"+"ul>"; } + $.each(o, function (i, val) { + if(!val) { return true; } + vakata_context.items.push(val); + if(!sep && val.separator_before) { + str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'class="vakata-context-no-icons"') + "> <"+"/a><"+"/li>"; + } + sep = false; + str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.vakata.is_function(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">"; + str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">"; + if($.vakata.context.settings.icons) { + str += "<"+"i "; + if(val.icon) { + if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; } + else { str += " class='" + val.icon + "' "; } + } + str += "><"+"/i><"+"span class='vakata-contextmenu-sep'> <"+"/span>"; + } + str += ($.vakata.is_function(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' '+ (val.shortcut_label || '') +'':'') + "<"+"/a>"; + if(val.submenu) { + tmp = $.vakata.context._parse(val.submenu, true); + if(tmp) { str += tmp; } + } + str += "<"+"/li>"; + if(val.separator_after) { + str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'class="vakata-context-no-icons"') + "> <"+"/a><"+"/li>"; + sep = true; + } + }); + str = str.replace(/
  • <\/li\>$/,""); + if(is_callback) { str += ""; } + /** + * triggered on the document when the contextmenu is parsed (HTML is built) + * @event + * @plugin contextmenu + * @name context_parse.vakata + * @param {jQuery} reference the element that was right clicked + * @param {jQuery} element the DOM element of the menu itself + * @param {Object} position the x & y coordinates of the menu + */ + if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); } + return str.length > 10 ? str : false; + }, + _show_submenu : function (o) { + o = $(o); + if(!o.length || !o.children("ul").length) { return; } + var e = o.children("ul"), + xl = o.offset().left, + x = xl + o.outerWidth(), + y = o.offset().top, + w = e.width(), + h = e.height(), + dw = $(window).width() + $(window).scrollLeft(), + dh = $(window).height() + $(window).scrollTop(); + // може да се спести е една проверка - дали няма някой от класовете вече нагоре + if(right_to_left) { + o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left"); + } + else { + o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right"); + } + if(y + h + 10 > dh) { + e.css("bottom","-1px"); + } + + //if does not fit - stick it to the side + if (o.hasClass('vakata-context-right')) { + if (xl < w) { + e.css("margin-right", xl - w); + } + } else { + if (dw - x < w) { + e.css("margin-left", dw - x - w); + } + } + + e.show(); + }, + show : function (reference, position, data) { + var o, e, x, y, w, h, dw, dh, cond = true; + if(vakata_context.element && vakata_context.element.length) { + vakata_context.element.width(''); + } + switch(cond) { + case (!position && !reference): + return false; + case (!!position && !!reference): + vakata_context.reference = reference; + vakata_context.position_x = position.x; + vakata_context.position_y = position.y; + break; + case (!position && !!reference): + vakata_context.reference = reference; + o = reference.offset(); + vakata_context.position_x = o.left + reference.outerHeight(); + vakata_context.position_y = o.top; + break; + case (!!position && !reference): + vakata_context.position_x = position.x; + vakata_context.position_y = position.y; + break; + } + if(!!reference && !data && $(reference).data('vakata_contextmenu')) { + data = $(reference).data('vakata_contextmenu'); + } + if($.vakata.context._parse(data)) { + vakata_context.element.html(vakata_context.html); + } + if(vakata_context.items.length) { + vakata_context.element.appendTo(document.body); + e = vakata_context.element; + x = vakata_context.position_x; + y = vakata_context.position_y; + w = e.width(); + h = e.height(); + dw = $(window).width() + $(window).scrollLeft(); + dh = $(window).height() + $(window).scrollTop(); + if(right_to_left) { + x -= (e.outerWidth() - $(reference).outerWidth()); + if(x < $(window).scrollLeft() + 20) { + x = $(window).scrollLeft() + 20; + } + } + if(x + w + 20 > dw) { + x = dw - (w + 20); + } + if(y + h + 20 > dh) { + y = dh - (h + 20); + } + + vakata_context.element + .css({ "left" : x, "top" : y }) + .show() + .find('a').first().trigger('focus').parent().addClass("vakata-context-hover"); + vakata_context.is_visible = true; + /** + * triggered on the document when the contextmenu is shown + * @event + * @plugin contextmenu + * @name context_show.vakata + * @param {jQuery} reference the element that was right clicked + * @param {jQuery} element the DOM element of the menu itself + * @param {Object} position the x & y coordinates of the menu + */ + $.vakata.context._trigger("show"); + } + }, + hide : function () { + if(vakata_context.is_visible) { + vakata_context.element.hide().find("ul").hide().end().find(':focus').trigger('blur').end().detach(); + vakata_context.is_visible = false; + /** + * triggered on the document when the contextmenu is hidden + * @event + * @plugin contextmenu + * @name context_hide.vakata + * @param {jQuery} reference the element that was right clicked + * @param {jQuery} element the DOM element of the menu itself + * @param {Object} position the x & y coordinates of the menu + */ + $.vakata.context._trigger("hide"); + } + } + }; + $(function () { + right_to_left = $(document.body).css("direction") === "rtl"; + var to = false; + + vakata_context.element = $(""); + vakata_context.element + .on("mouseenter", "li", function (e) { + e.stopImmediatePropagation(); + + if($.contains(this, e.relatedTarget)) { + // премахнато заради delegate mouseleave по-долу + // $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); + return; + } + + if(to) { clearTimeout(to); } + vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(); + + $(this) + .siblings().find("ul").hide().end().end() + .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover"); + $.vakata.context._show_submenu(this); + }) + // тестово - дали не натоварва? + .on("mouseleave", "li", function (e) { + if($.contains(this, e.relatedTarget)) { return; } + $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover"); + }) + .on("mouseleave", function (e) { + $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); + if($.vakata.context.settings.hide_onmouseleave) { + to = setTimeout( + (function (t) { + return function () { $.vakata.context.hide(); }; + }(this)), $.vakata.context.settings.hide_onmouseleave); + } + }) + .on("click", "a", function (e) { + e.preventDefault(); + //}) + //.on("mouseup", "a", function (e) { + if(!$(this).trigger('blur').parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) { + $.vakata.context.hide(); + } + }) + .on('keydown', 'a', function (e) { + var o = null; + switch(e.which) { + case 13: + case 32: + e.type = "click"; + e.preventDefault(); + $(e.currentTarget).trigger(e); + break; + case 37: + if(vakata_context.is_visible) { + vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').trigger('focus'); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 38: + if(vakata_context.is_visible) { + o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(); + if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); } + o.addClass("vakata-context-hover").children('a').trigger('focus'); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 39: + if(vakata_context.is_visible) { + vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').trigger('focus'); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 40: + if(vakata_context.is_visible) { + o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(); + if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); } + o.addClass("vakata-context-hover").children('a').trigger('focus'); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 27: + $.vakata.context.hide(); + e.preventDefault(); + break; + default: + //console.log(e.which); + break; + } + }) + .on('keydown', function (e) { + e.preventDefault(); + var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent(); + if(a.parent().not('.vakata-context-disabled')) { + a.trigger('click'); + } + }); + + $(document) + .on("mousedown.vakata.jstree", function (e) { + if(vakata_context.is_visible && vakata_context.element[0] !== e.target && !$.contains(vakata_context.element[0], e.target)) { + $.vakata.context.hide(); + } + }) + .on("context_show.vakata.jstree", function (e, data) { + vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"); + if(right_to_left) { + vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl"); + } + // also apply a RTL class? + vakata_context.element.find("ul").hide().end(); + }); + }); + }($)); + // $.jstree.defaults.plugins.push("contextmenu"); + + +/** + * ### Drag'n'drop plugin + * + * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations. + */ + + /** + * stores all defaults for the drag'n'drop plugin + * @name $.jstree.defaults.dnd + * @plugin dnd + */ + $.jstree.defaults.dnd = { + /** + * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`. + * @name $.jstree.defaults.dnd.copy + * @plugin dnd + */ + copy : true, + /** + * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`. + * @name $.jstree.defaults.dnd.open_timeout + * @plugin dnd + */ + open_timeout : 500, + /** + * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging + * @name $.jstree.defaults.dnd.is_draggable + * @plugin dnd + */ + is_draggable : true, + /** + * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true` + * @name $.jstree.defaults.dnd.check_while_dragging + * @plugin dnd + */ + check_while_dragging : true, + /** + * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false` + * @name $.jstree.defaults.dnd.always_copy + * @plugin dnd + */ + always_copy : false, + /** + * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0` + * @name $.jstree.defaults.dnd.inside_pos + * @plugin dnd + */ + inside_pos : 0, + /** + * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node + * @name $.jstree.defaults.dnd.drag_selection + * @plugin dnd + */ + drag_selection : true, + /** + * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string "selected" which means only selected nodes can be dragged on touch devices. + * @name $.jstree.defaults.dnd.touch + * @plugin dnd + */ + touch : true, + /** + * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target. + * @name $.jstree.defaults.dnd.large_drop_target + * @plugin dnd + */ + large_drop_target : false, + /** + * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to "selected". + * @name $.jstree.defaults.dnd.large_drag_target + * @plugin dnd + */ + large_drag_target : false, + /** + * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls. + * @reference http://caniuse.com/#feat=dragndrop + * @name $.jstree.defaults.dnd.use_html5 + * @plugin dnd + */ + use_html5: false + }; + var drg, elm; + // TODO: now check works by checking for each node individually, how about max_children, unique, etc? + $.jstree.plugins.dnd = function (options, parent) { + this.init = function (el, options) { + parent.init.call(this, el, options); + this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span')); + }; + this.bind = function () { + parent.bind.call(this); + + this.element + .on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', function (e) { + if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) { + return true; + } + if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) { + return true; + } + var obj = this.get_node(e.target), + mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1, + txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget)); + if(this.settings.core.force_text) { + txt = $.vakata.html.escape(txt); + } + if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") && + (this.settings.dnd.is_draggable === true || ($.vakata.is_function(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e))) + ) { + drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] }; + elm = e.currentTarget; + if (this.settings.dnd.use_html5) { + $.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg }); + } else { + this.element.trigger('mousedown.jstree'); + return $.vakata.dnd.start(e, drg, '
    ' + txt + '+
    '); + } + } + }.bind(this)); + if (this.settings.dnd.use_html5) { + this.element + .on('dragover.jstree', function (e) { + e.preventDefault(); + $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); + return false; + }) + //.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) { + // e.preventDefault(); + // $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); + // return false; + // }, this)) + .on('drop.jstree', function (e) { + e.preventDefault(); + $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); + return false; + }.bind(this)); + } + }; + this.redraw_node = function(obj, deep, callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if (obj && this.settings.dnd.use_html5) { + if (this.settings.dnd.large_drag_target) { + obj.setAttribute('draggable', true); + } else { + var i, j, tmp = null; + for(i = 0, j = obj.childNodes.length; i < j; i++) { + if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { + tmp = obj.childNodes[i]; + break; + } + } + if(tmp) { + tmp.setAttribute('draggable', true); + } + } + } + return obj; + }; + }; + + $(function() { + // bind only once for all instances + var lastmv = false, + laster = false, + lastev = false, + opento = false, + marker = $('
     
    ').hide(); //.appendTo('body'); + + $(document) + .on('dragover.vakata.jstree', function (e) { + if (elm) { + $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); + } + }) + .on('drop.vakata.jstree', function (e) { + if (elm) { + $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); + elm = null; + drg = null; + } + }) + .on('dnd_start.vakata.jstree', function (e, data) { + lastmv = false; + lastev = false; + if(!data || !data.data || !data.data.jstree) { return; } + marker.appendTo(document.body); //.show(); + }) + .on('dnd_move.vakata.jstree', function (e, data) { + var isDifferentNode = data.event.target !== lastev.target; + if(opento) { + if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { + clearTimeout(opento); + } + } + if(!data || !data.data || !data.data.jstree) { return; } + + // if we are hovering the marker image do nothing (can happen on "inside" drags) + if(data.event.target.id && data.event.target.id === 'jstree-marker') { + return; + } + lastev = data.event; + + var ins = $.jstree.reference(data.event.target), + ref = false, + off = false, + rel = false, + tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn, c; + // if we are over an instance + if(ins && ins._data && ins._data.dnd) { + marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )); + is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))); + data.helper + .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )) + .find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ](); + + // if are hovering the container itself add a new root node + //console.log(data.event); + if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) { + ok = true; + for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { + ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }); + if(!ok) { break; } + } + if(ok) { + lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' }; + marker.hide(); + data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); + if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { + data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; + } + return; + } + } + else { + // if we are hovering a tree node + ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor'); + if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) { + off = ref.offset(); + rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top; + h = ref.outerHeight(); + if(rel < h / 3) { + o = ['b', 'i', 'a']; + } + else if(rel > h - h / 3) { + o = ['a', 'i', 'b']; + } + else { + o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a']; + } + $.each(o, function (j, v) { + switch(v) { + case 'b': + l = off.left - 6; + t = off.top; + p = ins.get_parent(ref); + i = ref.parent().index(); + c = 'jstree-below'; + break; + case 'i': + ip = ins.settings.dnd.inside_pos; + tm = ins.get_node(ref.parent()); + l = off.left - 2; + t = off.top + h / 2 + 1; + p = tm.id; + i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length)); + c = 'jstree-inside'; + break; + case 'a': + l = off.left - 6; + t = off.top + h; + p = ins.get_parent(ref); + i = ref.parent().index() + 1; + c = 'jstree-above'; + break; + } + ok = true; + for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { + op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node"; + ps = i; + if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) { + pr = ins.get_node(p); + if(ps > $.inArray(data.data.nodes[t1], pr.children)) { + ps -= 1; + } + } + ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) ); + if(!ok) { + if(ins && ins.last_error) { laster = ins.last_error(); } + break; + } + } + if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) { + if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { + if (opento) { clearTimeout(opento); } + opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout); + } + } + if(ok) { + pn = ins.get_node(p, true); + if (!pn.hasClass('.jstree-dnd-parent')) { + $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); + pn.addClass('jstree-dnd-parent'); + } + lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i }; + marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show(); + marker.removeClass('jstree-above jstree-inside jstree-below').addClass(c); + data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); + if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { + data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; + } + laster = {}; + o = true; + return false; + } + }); + if(o === true) { return; } + } + } + } + $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); + lastmv = false; + data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er'); + if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { + //data.event.originalEvent.dataTransfer.dropEffect = 'none'; + } + marker.hide(); + }) + .on('dnd_scroll.vakata.jstree', function (e, data) { + if(!data || !data.data || !data.data.jstree) { return; } + marker.hide(); + lastmv = false; + lastev = false; + data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er'); + }) + .on('dnd_stop.vakata.jstree', function (e, data) { + $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); + if(opento) { clearTimeout(opento); } + if(!data || !data.data || !data.data.jstree) { return; } + marker.hide().detach(); + var i, j, nodes = []; + if(lastmv) { + for(i = 0, j = data.data.nodes.length; i < j; i++) { + nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i]; + } + lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin); + } + else { + i = $(data.event.target).closest('.jstree'); + if(i.length && laster && laster.error && laster.error === 'check') { + i = i.jstree(true); + if(i) { + i.settings.core.error.call(this, laster); + } + } + } + lastev = false; + lastmv = false; + }) + .on('keyup.jstree keydown.jstree', function (e, data) { + data = $.vakata.dnd._get(); + if(data && data.data && data.data.jstree) { + if (e.type === "keyup" && e.which === 27) { + if (opento) { clearTimeout(opento); } + lastmv = false; + laster = false; + lastev = false; + opento = false; + marker.hide().detach(); + $.vakata.dnd._clean(); + } else { + data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ](); + if(lastev) { + lastev.metaKey = e.metaKey; + lastev.ctrlKey = e.ctrlKey; + $.vakata.dnd._trigger('move', lastev); + } + } + } + }); + }); + + // helpers + (function ($) { + $.vakata.html = { + div : $('
    '), + escape : function (str) { + return $.vakata.html.div.text(str).html(); + }, + strip : function (str) { + return $.vakata.html.div.empty().append($.parseHTML(str)).text(); + } + }; + // private variable + var vakata_dnd = { + element : false, + target : false, + is_down : false, + is_drag : false, + helper : false, + helper_w: 0, + data : false, + init_x : 0, + init_y : 0, + scroll_l: 0, + scroll_t: 0, + scroll_e: false, + scroll_i: false, + is_touch: false + }; + $.vakata.dnd = { + settings : { + scroll_speed : 10, + scroll_proximity : 20, + helper_left : 5, + helper_top : 10, + threshold : 5, + threshold_touch : 10 + }, + _trigger : function (event_name, e, data) { + if (data === undefined) { + data = $.vakata.dnd._get(); + } + data.event = e; + $(document).triggerHandler("dnd_" + event_name + ".vakata", data); + }, + _get : function () { + return { + "data" : vakata_dnd.data, + "element" : vakata_dnd.element, + "helper" : vakata_dnd.helper + }; + }, + _clean : function () { + if(vakata_dnd.helper) { vakata_dnd.helper.remove(); } + if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } + vakata_dnd = { + element : false, + target : false, + is_down : false, + is_drag : false, + helper : false, + helper_w: 0, + data : false, + init_x : 0, + init_y : 0, + scroll_l: 0, + scroll_t: 0, + scroll_e: false, + scroll_i: false, + is_touch: false + }; + elm = null; + $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); + $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); + }, + _scroll : function (init_only) { + if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) { + if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } + return false; + } + if(!vakata_dnd.scroll_i) { + vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100); + return false; + } + if(init_only === true) { return false; } + + var i = vakata_dnd.scroll_e.scrollTop(), + j = vakata_dnd.scroll_e.scrollLeft(); + vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed); + vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed); + if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) { + /** + * triggered on the document when a drag causes an element to scroll + * @event + * @plugin dnd + * @name dnd_scroll.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {jQuery} event the element that is scrolling + */ + $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e); + } + }, + start : function (e, data, html) { + if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { + e.pageX = e.originalEvent.changedTouches[0].pageX; + e.pageY = e.originalEvent.changedTouches[0].pageY; + e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); + } + if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); } + try { + e.currentTarget.unselectable = "on"; + e.currentTarget.onselectstart = function() { return false; }; + if(e.currentTarget.style) { + e.currentTarget.style.touchAction = "none"; + e.currentTarget.style.msTouchAction = "none"; + e.currentTarget.style.MozUserSelect = "none"; + } + } catch(ignore) { } + vakata_dnd.init_x = e.pageX; + vakata_dnd.init_y = e.pageY; + vakata_dnd.data = data; + vakata_dnd.is_down = true; + vakata_dnd.element = e.currentTarget; + vakata_dnd.target = e.target; + vakata_dnd.is_touch = e.type === "touchstart"; + if(html !== false) { + vakata_dnd.helper = $("
    ").html(html).css({ + "display" : "block", + "margin" : "0", + "padding" : "0", + "position" : "absolute", + "top" : "-2000px", + "lineHeight" : "16px", + "zIndex" : "10000" + }); + } + $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); + $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); + return false; + }, + drag : function (e) { + if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { + e.pageX = e.originalEvent.changedTouches[0].pageX; + e.pageY = e.originalEvent.changedTouches[0].pageY; + e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); + } + if(!vakata_dnd.is_down) { return; } + if(!vakata_dnd.is_drag) { + if( + Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) || + Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) + ) { + if(vakata_dnd.helper) { + vakata_dnd.helper.appendTo(document.body); + vakata_dnd.helper_w = vakata_dnd.helper.outerWidth(); + } + vakata_dnd.is_drag = true; + $(vakata_dnd.target).one('click.vakata', false); + /** + * triggered on the document when a drag starts + * @event + * @plugin dnd + * @name dnd_start.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {Object} event the event that caused the start (probably mousemove) + */ + $.vakata.dnd._trigger("start", e); + } + else { return; } + } + + var d = false, w = false, + dh = false, wh = false, + dw = false, ww = false, + dt = false, dl = false, + ht = false, hl = false; + + vakata_dnd.scroll_t = 0; + vakata_dnd.scroll_l = 0; + vakata_dnd.scroll_e = false; + $($(e.target).parentsUntil("body").addBack().get().reverse()) + .filter(function () { + return (/^auto|scroll$/).test($(this).css("overflow")) && + (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth); + }) + .each(function () { + var t = $(this), o = t.offset(); + if(this.scrollHeight > this.offsetHeight) { + if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } + if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } + } + if(this.scrollWidth > this.offsetWidth) { + if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } + if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } + } + if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { + vakata_dnd.scroll_e = $(this); + return false; + } + }); + + if(!vakata_dnd.scroll_e) { + d = $(document); w = $(window); + dh = d.height(); wh = w.height(); + dw = d.width(); ww = w.width(); + dt = d.scrollTop(); dl = d.scrollLeft(); + if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } + if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } + if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } + if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } + if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { + vakata_dnd.scroll_e = d; + } + } + if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); } + + if(vakata_dnd.helper) { + ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10); + hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10); + if(dh && ht + 25 > dh) { ht = dh - 50; } + if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); } + vakata_dnd.helper.css({ + left : hl + "px", + top : ht + "px" + }); + } + /** + * triggered on the document when a drag is in progress + * @event + * @plugin dnd + * @name dnd_move.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {Object} event the event that caused this to trigger (most likely mousemove) + */ + $.vakata.dnd._trigger("move", e); + return false; + }, + stop : function (e) { + if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { + e.pageX = e.originalEvent.changedTouches[0].pageX; + e.pageY = e.originalEvent.changedTouches[0].pageY; + e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); + } + if(vakata_dnd.is_drag) { + /** + * triggered on the document when a drag stops (the dragged element is dropped) + * @event + * @plugin dnd + * @name dnd_stop.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {Object} event the event that caused the stop + */ + if (e.target !== vakata_dnd.target) { + $(vakata_dnd.target).off('click.vakata'); + } + $.vakata.dnd._trigger("stop", e); + } + else { + if(e.type === "touchend" && e.target === vakata_dnd.target) { + var to = setTimeout(function () { $(e.target).trigger('click'); }, 100); + $(e.target).one('click', function() { if(to) { clearTimeout(to); } }); + } + } + $.vakata.dnd._clean(); + return false; + } + }; + }($)); + + // include the dnd plugin by default + // $.jstree.defaults.plugins.push("dnd"); + + +/** + * ### Massload plugin + * + * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading). + */ + + /** + * massload configuration + * + * It is possible to set this to a standard jQuery-like AJAX config. + * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used. + * + * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result. + * + * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array. + * + * { + * "id1" : [{ "text" : "Child of ID1", "id" : "c1" }, { "text" : "Another child of ID1", "id" : "c2" }], + * "id2" : [{ "text" : "Child of ID2", "id" : "c3" }] + * } + * + * @name $.jstree.defaults.massload + * @plugin massload + */ + $.jstree.defaults.massload = null; + $.jstree.plugins.massload = function (options, parent) { + this.init = function (el, options) { + this._data.massload = {}; + parent.init.call(this, el, options); + }; + this._load_nodes = function (nodes, callback, is_callback, force_reload) { + var s = this.settings.massload, + toLoad = [], + m = this._model.data, + i, j, dom; + if (!is_callback) { + for(i = 0, j = nodes.length; i < j; i++) { + if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) { + toLoad.push(nodes[i]); + dom = this.get_node(nodes[i], true); + if (dom && dom.length) { + dom.addClass("jstree-loading").attr('aria-busy',true); + } + } + } + this._data.massload = {}; + if (toLoad.length) { + if($.vakata.is_function(s)) { + return s.call(this, toLoad, function (data) { + var i, j; + if(data) { + for(i in data) { + if(data.hasOwnProperty(i)) { + this._data.massload[i] = data[i]; + } + } + } + for(i = 0, j = nodes.length; i < j; i++) { + dom = this.get_node(nodes[i], true); + if (dom && dom.length) { + dom.removeClass("jstree-loading").attr('aria-busy',false); + } + } + parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }.bind(this)); + } + if(typeof s === 'object' && s && s.url) { + s = $.extend(true, {}, s); + if($.vakata.is_function(s.url)) { + s.url = s.url.call(this, toLoad); + } + if($.vakata.is_function(s.data)) { + s.data = s.data.call(this, toLoad); + } + return $.ajax(s) + .done(function (data,t,x) { + var i, j; + if(data) { + for(i in data) { + if(data.hasOwnProperty(i)) { + this._data.massload[i] = data[i]; + } + } + } + for(i = 0, j = nodes.length; i < j; i++) { + dom = this.get_node(nodes[i], true); + if (dom && dom.length) { + dom.removeClass("jstree-loading").attr('aria-busy',false); + } + } + parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }.bind(this)) + .fail(function (f) { + parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }.bind(this)); + } + } + } + return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }; + this._load_node = function (obj, callback) { + var data = this._data.massload[obj.id], + rslt = null, dom; + if(data) { + rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data']( + obj, + typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data, + function (status) { callback.call(this, status); } + ); + dom = this.get_node(obj.id, true); + if (dom && dom.length) { + dom.removeClass("jstree-loading").attr('aria-busy',false); + } + delete this._data.massload[obj.id]; + return rslt; + } + return parent._load_node.call(this, obj, callback); + }; + }; + + +/** + * ### Search plugin + * + * Adds search functionality to jsTree. + */ + + /** + * stores all defaults for the search plugin + * @name $.jstree.defaults.search + * @plugin search + */ + $.jstree.defaults.search = { + /** + * a jQuery-like AJAX config, which jstree uses if a server should be queried for results. + * + * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed. + * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to + * @name $.jstree.defaults.search.ajax + * @plugin search + */ + ajax : false, + /** + * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`. + * @name $.jstree.defaults.search.fuzzy + * @plugin search + */ + fuzzy : false, + /** + * Indicates if the search should be case sensitive. Default is `false`. + * @name $.jstree.defaults.search.case_sensitive + * @plugin search + */ + case_sensitive : false, + /** + * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers). + * This setting can be changed at runtime when calling the search method. Default is `false`. + * @name $.jstree.defaults.search.show_only_matches + * @plugin search + */ + show_only_matches : false, + /** + * Indicates if the children of matched element are shown (when show_only_matches is true) + * This setting can be changed at runtime when calling the search method. Default is `false`. + * @name $.jstree.defaults.search.show_only_matches_children + * @plugin search + */ + show_only_matches_children : false, + /** + * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`. + * @name $.jstree.defaults.search.close_opened_onclear + * @plugin search + */ + close_opened_onclear : true, + /** + * Indicates if only leaf nodes should be included in search results. Default is `false`. + * @name $.jstree.defaults.search.search_leaves_only + * @plugin search + */ + search_leaves_only : false, + /** + * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution). + * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`. + * @name $.jstree.defaults.search.search_callback + * @plugin search + */ + search_callback : false + }; + + $.jstree.plugins.search = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + + this._data.search.str = ""; + this._data.search.dom = $(); + this._data.search.res = []; + this._data.search.opn = []; + this._data.search.som = false; + this._data.search.smc = false; + this._data.search.hdn = []; + + this.element + .on("search.jstree", function (e, data) { + if(this._data.search.som && data.res.length) { + var m = this._model.data, i, j, p = [], k, l; + for(i = 0, j = data.res.length; i < j; i++) { + if(m[data.res[i]] && !m[data.res[i]].state.hidden) { + p.push(data.res[i]); + p = p.concat(m[data.res[i]].parents); + if(this._data.search.smc) { + for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) { + if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) { + p.push(m[data.res[i]].children_d[k]); + } + } + } + } + } + p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root); + this._data.search.hdn = this.hide_all(true); + this.show_node(p, true); + this.redraw(true); + } + }.bind(this)) + .on("clear_search.jstree", function (e, data) { + if(this._data.search.som && data.res.length) { + this.show_node(this._data.search.hdn, true); + this.redraw(true); + } + }.bind(this)); + }; + /** + * used to search the tree nodes for a given string + * @name search(str [, skip_async]) + * @param {String} str the search string + * @param {Boolean} skip_async if set to true server will not be queried even if configured + * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers) + * @param {mixed} inside an optional node to whose children to limit the search + * @param {Boolean} append if set to true the results of this search are appended to the previous search + * @plugin search + * @trigger search.jstree + */ + this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) { + if(str === false || $.vakata.trim(str.toString()) === "") { + return this.clear_search(); + } + inside = this.get_node(inside); + inside = inside && inside.id ? inside.id : null; + str = str.toString(); + var s = this.settings.search, + a = s.ajax ? s.ajax : false, + m = this._model.data, + f = null, + r = [], + p = [], i, j; + if(this._data.search.res.length && !append) { + this.clear_search(); + } + if(show_only_matches === undefined) { + show_only_matches = s.show_only_matches; + } + if(show_only_matches_children === undefined) { + show_only_matches_children = s.show_only_matches_children; + } + if(!skip_async && a !== false) { + if($.vakata.is_function(a)) { + return a.call(this, str, function (d) { + if(d && d.d) { d = d.d; } + this._load_nodes(!$.vakata.is_array(d) ? [] : $.vakata.array_unique(d), function () { + this.search(str, true, show_only_matches, inside, append, show_only_matches_children); + }); + }.bind(this), inside); + } + else { + a = $.extend({}, a); + if(!a.data) { a.data = {}; } + a.data.str = str; + if(inside) { + a.data.inside = inside; + } + if (this._data.search.lastRequest) { + this._data.search.lastRequest.abort(); + } + this._data.search.lastRequest = $.ajax(a) + .fail(function () { + this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) }; + this.settings.core.error.call(this, this._data.core.last_error); + }.bind(this)) + .done(function (d) { + if(d && d.d) { d = d.d; } + this._load_nodes(!$.vakata.is_array(d) ? [] : $.vakata.array_unique(d), function () { + this.search(str, true, show_only_matches, inside, append, show_only_matches_children); + }); + }.bind(this)); + return this._data.search.lastRequest; + } + } + if(!append) { + this._data.search.str = str; + this._data.search.dom = $(); + this._data.search.res = []; + this._data.search.opn = []; + this._data.search.som = show_only_matches; + this._data.search.smc = show_only_matches_children; + } + + f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy }); + $.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) { + var v = m[i]; + if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) { + r.push(i); + p = p.concat(v.parents); + } + }); + if(r.length) { + p = $.vakata.array_unique(p); + for(i = 0, j = p.length; i < j; i++) { + if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) { + this._data.search.opn.push(p[i]); + } + } + if(!append) { + this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))); + this._data.search.res = r; + } + else { + this._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')))); + this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r)); + } + this._data.search.dom.children(".jstree-anchor").addClass('jstree-search'); + } + /** + * triggered after search is complete + * @event + * @name search.jstree + * @param {jQuery} nodes a jQuery collection of matching nodes + * @param {String} str the search string + * @param {Array} res a collection of objects represeing the matching nodes + * @plugin search + */ + this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches }); + }; + /** + * used to clear the last search (removes classes and shows all nodes if filtering is on) + * @name clear_search() + * @plugin search + * @trigger clear_search.jstree + */ + this.clear_search = function () { + if(this.settings.search.close_opened_onclear) { + this.close_node(this._data.search.opn, 0); + } + /** + * triggered after search is complete + * @event + * @name clear_search.jstree + * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search) + * @param {String} str the search string (the last search string) + * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search) + * @plugin search + */ + this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res }); + if(this._data.search.res.length) { + this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) { + return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); + }).join(', #'))); + this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search"); + } + this._data.search.str = ""; + this._data.search.res = []; + this._data.search.opn = []; + this._data.search.dom = $(); + }; + + this.redraw_node = function(obj, deep, callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if(obj) { + if($.inArray(obj.id, this._data.search.res) !== -1) { + var i, j, tmp = null; + for(i = 0, j = obj.childNodes.length; i < j; i++) { + if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { + tmp = obj.childNodes[i]; + break; + } + } + if(tmp) { + tmp.className += ' jstree-search'; + } + } + } + return obj; + }; + }; + + // helpers + (function ($) { + // from http://kiro.me/projects/fuse.html + $.vakata.search = function(pattern, txt, options) { + options = options || {}; + options = $.extend({}, $.vakata.search.defaults, options); + if(options.fuzzy !== false) { + options.fuzzy = true; + } + pattern = options.caseSensitive ? pattern : pattern.toLowerCase(); + var MATCH_LOCATION = options.location, + MATCH_DISTANCE = options.distance, + MATCH_THRESHOLD = options.threshold, + patternLen = pattern.length, + matchmask, pattern_alphabet, match_bitapScore, search; + if(patternLen > 32) { + options.fuzzy = false; + } + if(options.fuzzy) { + matchmask = 1 << (patternLen - 1); + pattern_alphabet = (function () { + var mask = {}, + i = 0; + for (i = 0; i < patternLen; i++) { + mask[pattern.charAt(i)] = 0; + } + for (i = 0; i < patternLen; i++) { + mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1); + } + return mask; + }()); + match_bitapScore = function (e, x) { + var accuracy = e / patternLen, + proximity = Math.abs(MATCH_LOCATION - x); + if(!MATCH_DISTANCE) { + return proximity ? 1.0 : accuracy; + } + return accuracy + (proximity / MATCH_DISTANCE); + }; + } + search = function (text) { + text = options.caseSensitive ? text : text.toLowerCase(); + if(pattern === text || text.indexOf(pattern) !== -1) { + return { + isMatch: true, + score: 0 + }; + } + if(!options.fuzzy) { + return { + isMatch: false, + score: 1 + }; + } + var i, j, + textLen = text.length, + scoreThreshold = MATCH_THRESHOLD, + bestLoc = text.indexOf(pattern, MATCH_LOCATION), + binMin, binMid, + binMax = patternLen + textLen, + lastRd, start, finish, rd, charMatch, + score = 1, + locations = []; + if (bestLoc !== -1) { + scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); + bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen); + if (bestLoc !== -1) { + scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); + } + } + bestLoc = -1; + for (i = 0; i < patternLen; i++) { + binMin = 0; + binMid = binMax; + while (binMin < binMid) { + if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) { + binMin = binMid; + } else { + binMax = binMid; + } + binMid = Math.floor((binMax - binMin) / 2 + binMin); + } + binMax = binMid; + start = Math.max(1, MATCH_LOCATION - binMid + 1); + finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen; + rd = new Array(finish + 2); + rd[finish + 1] = (1 << i) - 1; + for (j = finish; j >= start; j--) { + charMatch = pattern_alphabet[text.charAt(j - 1)]; + if (i === 0) { + rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; + } else { + rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1]; + } + if (rd[j] & matchmask) { + score = match_bitapScore(i, j - 1); + if (score <= scoreThreshold) { + scoreThreshold = score; + bestLoc = j - 1; + locations.push(bestLoc); + if (bestLoc > MATCH_LOCATION) { + start = Math.max(1, 2 * MATCH_LOCATION - bestLoc); + } else { + break; + } + } + } + } + if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) { + break; + } + lastRd = rd; + } + return { + isMatch: bestLoc >= 0, + score: score + }; + }; + return txt === true ? { 'search' : search } : search(txt); + }; + $.vakata.search.defaults = { + location : 0, + distance : 100, + threshold : 0.6, + fuzzy : false, + caseSensitive : false + }; + }($)); + + // include the search plugin by default + // $.jstree.defaults.plugins.push("search"); + + +/** + * ### Sort plugin + * + * Automatically sorts all siblings in the tree according to a sorting function. + */ + + /** + * the settings function used to sort the nodes. + * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`. + * @name $.jstree.defaults.sort + * @plugin sort + */ + $.jstree.defaults.sort = function (a, b) { + //return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b); + return this.get_text(a) > this.get_text(b) ? 1 : -1; + }; + $.jstree.plugins.sort = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + this.element + .on("model.jstree", function (e, data) { + this.sort(data.parent, true); + }.bind(this)) + .on("rename_node.jstree create_node.jstree", function (e, data) { + this.sort(data.parent || data.node.parent, false); + this.redraw_node(data.parent || data.node.parent, true); + }.bind(this)) + .on("move_node.jstree copy_node.jstree", function (e, data) { + this.sort(data.parent, false); + this.redraw_node(data.parent, true); + }.bind(this)); + }; + /** + * used to sort a node's children + * @private + * @name sort(obj [, deep]) + * @param {mixed} obj the node + * @param {Boolean} deep if set to `true` nodes are sorted recursively. + * @plugin sort + * @trigger search.jstree + */ + this.sort = function (obj, deep) { + var i, j; + obj = this.get_node(obj); + if(obj && obj.children && obj.children.length) { + obj.children.sort(this.settings.sort.bind(this)); + if(deep) { + for(i = 0, j = obj.children_d.length; i < j; i++) { + this.sort(obj.children_d[i], false); + } + } + } + }; + }; + + // include the sort plugin by default + // $.jstree.defaults.plugins.push("sort"); + +/** + * ### State plugin + * + * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc) + */ + + var to = false; + /** + * stores all defaults for the state plugin + * @name $.jstree.defaults.state + * @plugin state + */ + $.jstree.defaults.state = { + /** + * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`. + * @name $.jstree.defaults.state.key + * @plugin state + */ + key : 'jstree', + /** + * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`. + * @name $.jstree.defaults.state.events + * @plugin state + */ + events : 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree', + /** + * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire. + * @name $.jstree.defaults.state.ttl + * @plugin state + */ + ttl : false, + /** + * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state. + * @name $.jstree.defaults.state.filter + * @plugin state + */ + filter : false, + /** + * Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false` + * @name $.jstree.defaults.state.preserve_loaded + * @plugin state + */ + preserve_loaded : false + }; + $.jstree.plugins.state = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + var bind = function () { + this.element.on(this.settings.state.events, function () { + if(to) { clearTimeout(to); } + to = setTimeout(function () { this.save_state(); }.bind(this), 100); + }.bind(this)); + /** + * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore). + * @event + * @name state_ready.jstree + * @plugin state + */ + this.trigger('state_ready'); + }.bind(this); + this.element + .on("ready.jstree", function (e, data) { + this.element.one("restore_state.jstree", bind); + if(!this.restore_state()) { bind(); } + }.bind(this)); + }; + /** + * save the state + * @name save_state() + * @plugin state + */ + this.save_state = function () { + var tm = this.get_state(); + if (!this.settings.state.preserve_loaded) { + delete tm.core.loaded; + } + var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) }; + $.vakata.storage.set(this.settings.state.key, JSON.stringify(st)); + }; + /** + * restore the state from the user's computer + * @name restore_state() + * @plugin state + */ + this.restore_state = function () { + var k = $.vakata.storage.get(this.settings.state.key); + if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } } + if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; } + if(!!k && k.state) { k = k.state; } + if(!!k && $.vakata.is_function(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); } + if(!!k) { + if (!this.settings.state.preserve_loaded) { + delete k.core.loaded; + } + this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); }); + this.set_state(k); + return true; + } + return false; + }; + /** + * clear the state on the user's computer + * @name clear_state() + * @plugin state + */ + this.clear_state = function () { + return $.vakata.storage.del(this.settings.state.key); + }; + }; + + (function ($, undefined) { + $.vakata.storage = { + // simply specifying the functions in FF throws an error + set : function (key, val) { return window.localStorage.setItem(key, val); }, + get : function (key) { return window.localStorage.getItem(key); }, + del : function (key) { return window.localStorage.removeItem(key); } + }; + }($)); + + // include the state plugin by default + // $.jstree.defaults.plugins.push("state"); + +/** + * ### Types plugin + * + * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group. + */ + + /** + * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional). + * + * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited. + * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited. + * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits. + * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme. + * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data) + * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data) + * + * There are two predefined types: + * + * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes. + * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified. + * + * @name $.jstree.defaults.types + * @plugin types + */ + $.jstree.defaults.types = { + 'default' : {} + }; + $.jstree.defaults.types[$.jstree.root] = {}; + + $.jstree.plugins.types = function (options, parent) { + this.init = function (el, options) { + var i, j; + if(options && options.types && options.types['default']) { + for(i in options.types) { + if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) { + for(j in options.types['default']) { + if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) { + options.types[i][j] = options.types['default'][j]; + } + } + } + } + } + parent.init.call(this, el, options); + this._model.data[$.jstree.root].type = $.jstree.root; + }; + this.refresh = function (skip_loading, forget_state) { + parent.refresh.call(this, skip_loading, forget_state); + this._model.data[$.jstree.root].type = $.jstree.root; + }; + this.bind = function () { + this.element + .on('model.jstree', function (e, data) { + var m = this._model.data, + dpc = data.nodes, + t = this.settings.types, + i, j, c = 'default', k; + for(i = 0, j = dpc.length; i < j; i++) { + c = 'default'; + if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) { + c = m[dpc[i]].original.type; + } + if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) { + c = m[dpc[i]].data.jstree.type; + } + m[dpc[i]].type = c; + if(m[dpc[i]].icon === true && t[c].icon !== undefined) { + m[dpc[i]].icon = t[c].icon; + } + if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') { + for (k in t[c].li_attr) { + if (t[c].li_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[dpc[i]].li_attr[k] === undefined) { + m[dpc[i]].li_attr[k] = t[c].li_attr[k]; + } + else if (k === 'class') { + m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class']; + } + } + } + } + if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') { + for (k in t[c].a_attr) { + if (t[c].a_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[dpc[i]].a_attr[k] === undefined) { + m[dpc[i]].a_attr[k] = t[c].a_attr[k]; + } + else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') { + m[dpc[i]].a_attr['href'] = t[c].a_attr['href']; + } + else if (k === 'class') { + m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class']; + } + } + } + } + } + m[$.jstree.root].type = $.jstree.root; + }.bind(this)); + parent.bind.call(this); + }; + this.get_json = function (obj, options, flat) { + var i, j, + m = this._model.data, + opt = options ? $.extend(true, {}, options, {no_id:false}) : {}, + tmp = parent.get_json.call(this, obj, opt, flat); + if(tmp === false) { return false; } + if($.vakata.is_array(tmp)) { + for(i = 0, j = tmp.length; i < j; i++) { + tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default"; + if(options && options.no_id) { + delete tmp[i].id; + if(tmp[i].li_attr && tmp[i].li_attr.id) { + delete tmp[i].li_attr.id; + } + if(tmp[i].a_attr && tmp[i].a_attr.id) { + delete tmp[i].a_attr.id; + } + } + } + } + else { + tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default"; + if(options && options.no_id) { + tmp = this._delete_ids(tmp); + } + } + return tmp; + }; + this._delete_ids = function (tmp) { + if($.vakata.is_array(tmp)) { + for(var i = 0, j = tmp.length; i < j; i++) { + tmp[i] = this._delete_ids(tmp[i]); + } + return tmp; + } + delete tmp.id; + if(tmp.li_attr && tmp.li_attr.id) { + delete tmp.li_attr.id; + } + if(tmp.a_attr && tmp.a_attr.id) { + delete tmp.a_attr.id; + } + if(tmp.children && $.vakata.is_array(tmp.children)) { + tmp.children = this._delete_ids(tmp.children); + } + return tmp; + }; + this.check = function (chk, obj, par, pos, more) { + if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } + obj = obj && obj.id ? obj : this.get_node(obj); + par = par && par.id ? par : this.get_node(par); + var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j; + m = m && m._model && m._model.data ? m._model.data : null; + switch(chk) { + case "create_node": + case "move_node": + case "copy_node": + if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) { + tmp = this.get_rules(par); + if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + return false; + } + if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + return false; + } + if(m && obj.children_d && obj.parents) { + d = 0; + for(i = 0, j = obj.children_d.length; i < j; i++) { + d = Math.max(d, m[obj.children_d[i]].parents.length); + } + d = d - obj.parents.length + 1; + } + if(d <= 0 || d === undefined) { d = 1; } + do { + if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + return false; + } + par = this.get_node(par.parent); + tmp = this.get_rules(par); + d++; + } while(par); + } + break; + } + return true; + }; + /** + * used to retrieve the type settings object for a node + * @name get_rules(obj) + * @param {mixed} obj the node to find the rules for + * @return {Object} + * @plugin types + */ + this.get_rules = function (obj) { + obj = this.get_node(obj); + if(!obj) { return false; } + var tmp = this.get_type(obj, true); + if(tmp.max_depth === undefined) { tmp.max_depth = -1; } + if(tmp.max_children === undefined) { tmp.max_children = -1; } + if(tmp.valid_children === undefined) { tmp.valid_children = -1; } + return tmp; + }; + /** + * used to retrieve the type string or settings object for a node + * @name get_type(obj [, rules]) + * @param {mixed} obj the node to find the rules for + * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned + * @return {String|Object} + * @plugin types + */ + this.get_type = function (obj, rules) { + obj = this.get_node(obj); + return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type); + }; + /** + * used to change a node's type + * @name set_type(obj, type) + * @param {mixed} obj the node to change + * @param {String} type the new type + * @plugin types + */ + this.set_type = function (obj, type) { + var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a; + if($.vakata.is_array(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.set_type(obj[t1], type); + } + return true; + } + t = this.settings.types; + obj = this.get_node(obj); + if(!t[type] || !obj) { return false; } + d = this.get_node(obj, true); + if (d && d.length) { + a = d.children('.jstree-anchor'); + } + old_type = obj.type; + old_icon = this.get_icon(obj); + obj.type = type; + if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) { + this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true); + } + + // remove old type props + if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') { + for (k in t[old_type].li_attr) { + if (t[old_type].li_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (k === 'class') { + m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], ''); + if (d) { d.removeClass(t[old_type].li_attr[k]); } + } + else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) { + m[obj.id].li_attr[k] = null; + if (d) { d.removeAttr(k); } + } + } + } + } + if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') { + for (k in t[old_type].a_attr) { + if (t[old_type].a_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (k === 'class') { + m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], ''); + if (a) { a.removeClass(t[old_type].a_attr[k]); } + } + else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) { + if (k === 'href') { + m[obj.id].a_attr[k] = '#'; + if (a) { a.attr('href', '#'); } + } + else { + delete m[obj.id].a_attr[k]; + if (a) { a.removeAttr(k); } + } + } + } + } + } + + // add new props + if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') { + for (k in t[type].li_attr) { + if (t[type].li_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[obj.id].li_attr[k] === undefined) { + m[obj.id].li_attr[k] = t[type].li_attr[k]; + if (d) { + if (k === 'class') { + d.addClass(t[type].li_attr[k]); + } + else { + d.attr(k, t[type].li_attr[k]); + } + } + } + else if (k === 'class') { + m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class']; + if (d) { d.addClass(t[type].li_attr[k]); } + } + } + } + } + if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') { + for (k in t[type].a_attr) { + if (t[type].a_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[obj.id].a_attr[k] === undefined) { + m[obj.id].a_attr[k] = t[type].a_attr[k]; + if (a) { + if (k === 'class') { + a.addClass(t[type].a_attr[k]); + } + else { + a.attr(k, t[type].a_attr[k]); + } + } + } + else if (k === 'href' && m[obj.id].a_attr[k] === '#') { + m[obj.id].a_attr['href'] = t[type].a_attr['href']; + if (a) { a.attr('href', t[type].a_attr['href']); } + } + else if (k === 'class') { + m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class']; + if (a) { a.addClass(t[type].a_attr[k]); } + } + } + } + } + + return true; + }; + }; + // include the types plugin by default + // $.jstree.defaults.plugins.push("types"); + + +/** + * ### Unique plugin + * + * Enforces that no nodes with the same name can coexist as siblings. + */ + + /** + * stores all defaults for the unique plugin + * @name $.jstree.defaults.unique + * @plugin unique + */ + $.jstree.defaults.unique = { + /** + * Indicates if the comparison should be case sensitive. Default is `false`. + * @name $.jstree.defaults.unique.case_sensitive + * @plugin unique + */ + case_sensitive : false, + /** + * Indicates if white space should be trimmed before the comparison. Default is `false`. + * @name $.jstree.defaults.unique.trim_whitespace + * @plugin unique + */ + trim_whitespace : false, + /** + * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`. + * @name $.jstree.defaults.unique.duplicate + * @plugin unique + */ + duplicate : function (name, counter) { + return name + ' (' + counter + ')'; + } + }; + + $.jstree.plugins.unique = function (options, parent) { + this.check = function (chk, obj, par, pos, more) { + if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } + obj = obj && obj.id ? obj : this.get_node(obj); + par = par && par.id ? par : this.get_node(par); + if(!par || !par.children) { return true; } + var n = chk === "rename_node" ? pos : obj.text, + c = [], + s = this.settings.unique.case_sensitive, + w = this.settings.unique.trim_whitespace, + m = this._model.data, i, j, t; + for(i = 0, j = par.children.length; i < j; i++) { + t = m[par.children[i]].text; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + c.push(t); + } + if(!s) { n = n.toLowerCase(); } + if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } + switch(chk) { + case "delete_node": + return true; + case "rename_node": + t = obj.text || ''; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + i = ($.inArray(n, c) === -1 || (obj.text && t === n)); + if(!i) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + } + return i; + case "create_node": + i = ($.inArray(n, c) === -1); + if(!i) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + } + return i; + case "copy_node": + i = ($.inArray(n, c) === -1); + if(!i) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + } + return i; + case "move_node": + i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1); + if(!i) { + this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; + } + return i; + } + return true; + }; + this.create_node = function (par, node, pos, callback, is_loaded) { + if(!node || node.text === undefined) { + if(par === null) { + par = $.jstree.root; + } + par = this.get_node(par); + if(!par) { + return parent.create_node.call(this, par, node, pos, callback, is_loaded); + } + pos = pos === undefined ? "last" : pos; + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return parent.create_node.call(this, par, node, pos, callback, is_loaded); + } + if(!node) { node = {}; } + var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t; + n = tmp = this.get_string('New node'); + dpc = []; + for(i = 0, j = par.children.length; i < j; i++) { + t = m[par.children[i]].text; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + dpc.push(t); + } + i = 1; + t = n; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + while($.inArray(t, dpc) !== -1) { + n = cb.call(this, tmp, (++i)).toString(); + t = n; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + } + node.text = n; + } + return parent.create_node.call(this, par, node, pos, callback, is_loaded); + }; + }; + + // include the unique plugin by default + // $.jstree.defaults.plugins.push("unique"); + + +/** + * ### Wholerow plugin + * + * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers. + */ + + var div = document.createElement('DIV'); + div.setAttribute('unselectable','on'); + div.setAttribute('role','presentation'); + div.className = 'jstree-wholerow'; + div.innerHTML = ' '; + $.jstree.plugins.wholerow = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + + this.element + .on('ready.jstree set_state.jstree', function () { + this.hide_dots(); + }.bind(this)) + .on("init.jstree loading.jstree ready.jstree", function () { + //div.style.height = this._data.core.li_height + 'px'; + this.get_container_ul().addClass('jstree-wholerow-ul'); + }.bind(this)) + .on("deselect_all.jstree", function (e, data) { + this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); + }.bind(this)) + .on("changed.jstree", function (e, data) { + this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); + var tmp = false, i, j; + for(i = 0, j = data.selected.length; i < j; i++) { + tmp = this.get_node(data.selected[i], true); + if(tmp && tmp.length) { + tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); + } + } + }.bind(this)) + .on("open_node.jstree", function (e, data) { + this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); + }.bind(this)) + .on("hover_node.jstree dehover_node.jstree", function (e, data) { + if(e.type === "hover_node" && this.is_disabled(data.node)) { return; } + this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered'); + }.bind(this)) + .on("contextmenu.jstree", ".jstree-wholerow", function (e) { + if (this._data.contextmenu) { + e.preventDefault(); + var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp); + } + }.bind(this)) + /*! + .on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) { + if(e.target === e.currentTarget) { + var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor"); + e.target = a[0]; + a.trigger(e); + } + }) + */ + .on("click.jstree", ".jstree-wholerow", function (e) { + e.stopImmediatePropagation(); + var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).trigger('focus'); + }) + .on("dblclick.jstree", ".jstree-wholerow", function (e) { + e.stopImmediatePropagation(); + var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).trigger('focus'); + }) + .on("click.jstree", ".jstree-leaf > .jstree-ocl", function (e) { + e.stopImmediatePropagation(); + var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).trigger('focus'); + }.bind(this)) + .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", function (e) { + e.stopImmediatePropagation(); + if(!this.is_disabled(e.currentTarget)) { + this.hover_node(e.currentTarget); + } + return false; + }.bind(this)) + .on("mouseleave.jstree", ".jstree-node", function (e) { + this.dehover_node(e.currentTarget); + }.bind(this)); + }; + this.teardown = function () { + if(this.settings.wholerow) { + this.element.find(".jstree-wholerow").remove(); + } + parent.teardown.call(this); + }; + this.redraw_node = function(obj, deep, callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if(obj) { + var tmp = div.cloneNode(true); + //tmp.style.height = this._data.core.li_height + 'px'; + if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; } + if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; } + obj.insertBefore(tmp, obj.childNodes[0]); + } + return obj; + }; + }; + // include the wholerow plugin by default + // $.jstree.defaults.plugins.push("wholerow"); + if(window.customElements && Object && Object.create) { + var proto = Object.create(HTMLElement.prototype); + proto.createdCallback = function () { + var c = { core : {}, plugins : [] }, i; + for(i in $.jstree.plugins) { + if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) { + c.plugins.push(i); + if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) { + c[i] = JSON.parse(this.getAttribute(i)); + } + } + } + for(i in $.jstree.defaults.core) { + if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) { + c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i); + } + } + $(this).jstree(c); + }; + // proto.attributeChangedCallback = function (name, previous, value) { }; + try { + window.customElements.define("vakata-jstree", function() {}, { prototype: proto }); + } catch (ignore) { } + } + +})); \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/jstree.min.js b/InvenTree/InvenTree/static/script/jstree/jstree.min.js new file mode 100644 index 0000000000..31d06a7316 --- /dev/null +++ b/InvenTree/InvenTree/static/script/jstree/jstree.min.js @@ -0,0 +1,6 @@ +/*! jsTree - v3.3.12 - 2021-09-03 - (MIT) */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a,b){"use strict";if(!a.jstree){var c=0,d=!1,e=!1,f=!1,g=[],h=a("script:last").attr("src"),i=window.document,j=window.setImmediate,k=window.Promise;!j&&k&&(j=function(a,b){k.resolve(b).then(a)}),a.jstree={version:"3.3.12",defaults:{plugins:[]},plugins:{},path:h&&-1!==h.indexOf("/")?h.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,root:"#"},a.jstree.create=function(b,d){var e=new a.jstree.core(++c),f=d;return d=a.extend(!0,{},a.jstree.defaults,d),f&&f.plugins&&(d.plugins=f.plugins),a.each(d.plugins,function(a,b){"core"!==a&&(e=e.plugin(b,d[b]))}),a(b).data("jstree",e),e.init(b,d),e},a.jstree.destroy=function(){a(".jstree:jstree").jstree("destroy"),a(i).off(".jstree")},a.jstree.core=function(a){this._id=a,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1,ellipsis:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},a.jstree.reference=function(b){var c=null,d=null;if(!b||!b.id||b.tagName&&b.nodeType||(b=b.id),!d||!d.length)try{d=a(b)}catch(e){}if(!d||!d.length)try{d=a("#"+b.replace(a.jstree.idregex,"\\$&"))}catch(e){}return d&&d.length&&(d=d.closest(".jstree")).length&&(d=d.data("jstree"))?c=d:a(".jstree").each(function(){var d=a(this).data("jstree");return d&&d._model.data[b]?(c=d,!1):void 0}),c},a.fn.jstree=function(c){var d="string"==typeof c,e=Array.prototype.slice.call(arguments,1),f=null;return c!==!0||this.length?(this.each(function(){var g=a.jstree.reference(this),h=d&&g?g[c]:null;return f=d&&h?h.apply(g,e):null,g||d||c!==b&&!a.isPlainObject(c)||a.jstree.create(this,c),(g&&!d||c===!0)&&(f=g||!1),null!==f&&f!==b?!1:void 0}),null!==f&&f!==b?f:this):!1},a.expr.pseudos.jstree=a.expr.createPseudo(function(c){return function(c){return a(c).hasClass("jstree")&&a(c).data("jstree")!==b}}),a.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:a.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,ellipsis:!1,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1,dblclick_toggle:!0,loaded_state:!1,restore_focus:!0,compute_elements_positions:!1,keyboard:{"ctrl-space":function(b){b.type="click",a(b.currentTarget).trigger(b)},enter:function(b){b.type="click",a(b.currentTarget).trigger(b)},left:function(b){if(b.preventDefault(),this.is_open(b.currentTarget))this.close_node(b.currentTarget);else{var c=this.get_parent(b.currentTarget);c&&c.id!==a.jstree.root&&this.get_node(c,!0).children(".jstree-anchor").trigger("focus")}},up:function(a){a.preventDefault();var b=this.get_prev_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").trigger("focus")},right:function(b){if(b.preventDefault(),this.is_closed(b.currentTarget))this.open_node(b.currentTarget,function(a){this.get_node(a,!0).children(".jstree-anchor").trigger("focus")});else if(this.is_open(b.currentTarget)){var c=this.get_node(b.currentTarget,!0).children(".jstree-children")[0];c&&a(this._firstChild(c)).children(".jstree-anchor").trigger("focus")}},down:function(a){a.preventDefault();var b=this.get_next_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").trigger("focus")},"*":function(a){this.open_all()},home:function(b){b.preventDefault();var c=this._firstChild(this.get_container_ul()[0]);c&&a(c).children(".jstree-anchor").filter(":visible").trigger("focus")},end:function(a){a.preventDefault(),this.element.find(".jstree-anchor").filter(":visible").last().trigger("focus")},f2:function(a){a.preventDefault(),this.edit(a.currentTarget)}}},a.jstree.core.prototype={plugin:function(b,c){var d=a.jstree.plugins[b];return d?(this._data[b]={},d.prototype=this,new d(c,this)):this},init:function(b,c){this._model={data:{},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this.element=a(b).addClass("jstree jstree-"+this._id),this.settings=c,this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html(""),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_container_ul().children("li").first().outerHeight()||24,this._data.core.node=this._create_prototype_node(),this.trigger("loading"),this.load_node(a.jstree.root)},destroy:function(a){if(this.trigger("destroy"),this._wrk)try{window.URL.revokeObjectURL(this._wrk),this._wrk=null}catch(b){}a||this.element.empty(),this.teardown()},_create_prototype_node:function(){var a=i.createElement("LI"),b,c;return a.setAttribute("role","none"),b=i.createElement("I"),b.className="jstree-icon jstree-ocl",b.setAttribute("role","presentation"),a.appendChild(b),b=i.createElement("A"),b.className="jstree-anchor",b.setAttribute("href","#"),b.setAttribute("tabindex","-1"),b.setAttribute("role","treeitem"),c=i.createElement("I"),c.className="jstree-icon jstree-themeicon",c.setAttribute("role","presentation"),b.appendChild(c),a.appendChild(b),b=c=null,a},_kbevent_to_func:function(a){var b={8:"Backspace",9:"Tab",13:"Enter",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock",16:"Shift",17:"Ctrl",18:"Alt",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*",173:"-"},c=[];if(a.ctrlKey&&c.push("ctrl"),a.altKey&&c.push("alt"),a.shiftKey&&c.push("shift"),c.push(b[a.which]||a.which),c=c.sort().join("-").toLowerCase(),"shift-shift"===c||"ctrl-ctrl"===c||"alt-alt"===c)return null;var d=this.settings.core.keyboard,e,f;for(e in d)if(d.hasOwnProperty(e)&&(f=e,"-"!==f&&"+"!==f&&(f=f.replace("--","-MINUS").replace("+-","-MINUS").replace("++","-PLUS").replace("-+","-PLUS"),f=f.split(/-|\+/).sort().join("-").replace("MINUS","-").replace("PLUS","+").toLowerCase()),f===c))return d[e];return null},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){var b="",c=null,d=0;this.element.on("dblclick.jstree",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;if(i.selection&&i.selection.empty)i.selection.empty();else if(window.getSelection){var b=window.getSelection();try{b.removeAllRanges(),b.collapse()}catch(c){}}}).on("mousedown.jstree",function(a){a.target===this.element[0]&&(a.preventDefault(),d=+new Date)}.bind(this)).on("mousedown.jstree",".jstree-ocl",function(a){a.preventDefault()}).on("click.jstree",".jstree-ocl",function(a){this.toggle_node(a.target)}.bind(this)).on("dblclick.jstree",".jstree-anchor",function(a){return a.target.tagName&&"input"===a.target.tagName.toLowerCase()?!0:void(this.settings.core.dblclick_toggle&&this.toggle_node(a.target))}.bind(this)).on("click.jstree",".jstree-anchor",function(b){b.preventDefault(),b.currentTarget!==i.activeElement&&a(b.currentTarget).trigger("focus"),this.activate_node(b.currentTarget,b)}.bind(this)).on("keydown.jstree",".jstree-anchor",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;this._data.core.rtl&&(37===a.which?a.which=39:39===a.which&&(a.which=37));var b=this._kbevent_to_func(a);if(b){var c=b.call(this,a);if(c===!1||c===!0)return c}}.bind(this)).on("load_node.jstree",function(b,c){c.status&&(c.node.id!==a.jstree.root||this._data.core.loaded||(this._data.core.loaded=!0,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.trigger("loaded")),this._data.core.ready||setTimeout(function(){if(this.element&&!this.get_container_ul().find(".jstree-loading").length){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var b=[],c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)b=b.concat(this._model.data[this._data.core.selected[c]].parents);for(b=a.vakata.array_unique(b),c=0,d=b.length;d>c;c++)this.open_node(b[c],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}this.trigger("ready")}}.bind(this),0))}.bind(this)).on("keypress.jstree",function(d){if(d.target.tagName&&"input"===d.target.tagName.toLowerCase())return!0;c&&clearTimeout(c),c=setTimeout(function(){b=""},500);var e=String.fromCharCode(d.which).toLowerCase(),f=this.element.find(".jstree-anchor").filter(":visible"),g=f.index(i.activeElement)||0,h=!1;if(b+=e,b.length>1){if(f.slice(g).each(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return;if(f.slice(0,g).each(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return}if(new RegExp("^"+e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+"+$").test(b)){if(f.slice(g+1).each(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return;if(f.slice(0,g+1).each(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return}}.bind(this)).on("init.jstree",function(){var a=this.settings.core.themes;this._data.core.themes.dots=a.dots,this._data.core.themes.stripes=a.stripes,this._data.core.themes.icons=a.icons,this._data.core.themes.ellipsis=a.ellipsis,this.set_theme(a.name||"default",a.url),this.set_theme_variant(a.variant)}.bind(this)).on("loading.jstree",function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"](),this[this._data.core.themes.ellipsis?"show_ellipsis":"hide_ellipsis"]()}.bind(this)).on("blur.jstree",".jstree-anchor",function(b){this._data.core.focused=null,a(b.currentTarget).filter(".jstree-hovered").trigger("mouseleave"),this.element.attr("tabindex","0")}.bind(this)).on("focus.jstree",".jstree-anchor",function(b){var c=this.get_node(b.currentTarget);c&&c.id&&(this._data.core.focused=c.id),this.element.find(".jstree-hovered").not(b.currentTarget).trigger("mouseleave"),a(b.currentTarget).trigger("mouseenter"),this.element.attr("tabindex","-1")}.bind(this)).on("focus.jstree",function(){if(+new Date-d>500&&!this._data.core.focused&&this.settings.core.restore_focus){d=0;var a=this.get_node(this.element.attr("aria-activedescendant"),!0);a&&a.find("> .jstree-anchor").trigger("focus")}}.bind(this)).on("mouseenter.jstree",".jstree-anchor",function(a){this.hover_node(a.currentTarget)}.bind(this)).on("mouseleave.jstree",".jstree-anchor",function(a){this.dehover_node(a.currentTarget)}.bind(this))},unbind:function(){this.element.off(".jstree"),a(i).off(".jstree-"+this._id)},trigger:function(a,b){b||(b={}),b.instance=this,this.element.triggerHandler(a.replace(".jstree","")+".jstree",b)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children").first()},get_string:function(b){var c=this.settings.core.strings;return a.vakata.is_function(c)?c.call(this,b):c&&c[b]?c[b]:b},_firstChild:function(a){a=a?a.firstChild:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_nextSibling:function(a){a=a?a.nextSibling:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_previousSibling:function(a){a=a?a.previousSibling:null;while(null!==a&&1!==a.nodeType)a=a.previousSibling;return a},get_node:function(b,c){b&&b.id&&(b=b.id),b instanceof a&&b.length&&b[0].id&&(b=b[0].id);var d;try{if(this._model.data[b])b=this._model.data[b];else if("string"==typeof b&&this._model.data[b.replace(/^#/,"")])b=this._model.data[b.replace(/^#/,"")];else if("string"==typeof b&&(d=a("#"+b.replace(a.jstree.idregex,"\\$&"),this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else if((d=this.element.find(b)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else{if(!(d=this.element.find(b)).length||!d.hasClass("jstree"))return!1;b=this._model.data[a.jstree.root]}return c&&(b=b.id===a.jstree.root?this.element:a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)),b}catch(e){return!1}},get_path:function(b,c,d){if(b=b.parents?b:this.get_node(b),!b||b.id===a.jstree.root||!b.parents)return!1;var e,f,g=[];for(g.push(d?b.id:b.text),e=0,f=b.parents.length;f>e;e++)g.push(d?b.parents[e]:this.get_text(b.parents[e]));return g=g.reverse().slice(1),c?g.join(c):g},get_next_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this._firstChild(this.get_container_ul()[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}if(b.hasClass("jstree-open")){d=this._firstChild(b.children(".jstree-children")[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);if(null!==d)return a(d)}d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return null!==d?a(d):b.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first()},get_prev_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this.get_container_ul()[0].lastChild;while(d&&0===d.offsetHeight)d=this._previousSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);if(null!==d){b=a(d);while(b.hasClass("jstree-open"))b=b.children(".jstree-children").first().children(".jstree-node:visible:last");return b}return d=b[0].parentNode.parentNode,d&&d.className&&-1!==d.className.indexOf("jstree-node")?a(d):!1},get_parent:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.parent:!1},get_children_dom:function(a){return a=this.get_node(a,!0),a[0]===this.element[0]?this.get_container_ul().children(".jstree-node"):a&&a.length?a.children(".jstree-children").children(".jstree-node"):!1},is_parent:function(a){return a=this.get_node(a),a&&(a.state.loaded===!1||a.children.length>0)},is_loaded:function(a){return a=this.get_node(a),a&&a.state.loaded},is_loading:function(a){return a=this.get_node(a),a&&a.state&&a.state.loading},is_open:function(a){return a=this.get_node(a),a&&a.state.opened},is_closed:function(a){return a=this.get_node(a),a&&this.is_parent(a)&&!a.state.opened},is_leaf:function(a){return!this.is_parent(a)},load_node:function(b,c){var d,e,f,g,h;if(a.vakata.is_array(b))return this._load_nodes(b.slice(),c),!0;if(b=this.get_node(b),!b)return c&&c.call(this,b,!1),!1;if(b.state.loaded){for(b.state.loaded=!1,f=0,g=b.parents.length;g>f;f++)this._model.data[b.parents[f]].children_d=a.vakata.array_filter(this._model.data[b.parents[f]].children_d,function(c){return-1===a.inArray(c,b.children_d)});for(d=0,e=b.children_d.length;e>d;d++)this._model.data[b.children_d[d]].state.selected&&(h=!0),delete this._model.data[b.children_d[d]];h&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(c){return-1===a.inArray(c,b.children_d)})),b.children=[],b.children_d=[],h&&this.trigger("changed",{action:"load_node",node:b,selected:this._data.core.selected})}return b.state.failed=!1,b.state.loading=!0,this.get_node(b,!0).addClass("jstree-loading").attr("aria-busy",!0),this._load_node(b,function(a){b=this._model.data[b.id],b.state.loading=!1,b.state.loaded=a,b.state.failed=!b.state.loaded;var d=this.get_node(b,!0),e=0,f=0,g=this._model.data,h=!1;for(e=0,f=b.children.length;f>e;e++)if(g[b.children[e]]&&!g[b.children[e]].state.hidden){h=!0;break}b.state.loaded&&d&&d.length&&(d.removeClass("jstree-closed jstree-open jstree-leaf"),h?"#"!==b.id&&d.addClass(b.state.opened?"jstree-open":"jstree-closed"):d.addClass("jstree-leaf")),d.removeClass("jstree-loading").attr("aria-busy",!1),this.trigger("load_node",{node:b,status:a}),c&&c.call(this,b,a)}.bind(this)),!0},_load_nodes:function(a,b,c,d){var e=!0,f=function(){this._load_nodes(a,b,!0)},g=this._model.data,h,i,j=[];for(h=0,i=a.length;i>h;h++)g[a[h]]&&(!g[a[h]].state.loaded&&!g[a[h]].state.failed||!c&&d)&&(this.is_loading(a[h])||this.load_node(a[h],f),e=!1);if(e){for(h=0,i=a.length;i>h;h++)g[a[h]]&&g[a[h]].state.loaded&&j.push(a[h]);b&&!b.done&&(b.call(this,j),b.done=!0)}},load_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=[],e=this._model.data,f=e[b.id].children_d,g,h;for(b.state&&!b.state.loaded&&d.push(b.id),g=0,h=f.length;h>g;g++)e[f[g]]&&e[f[g]].state&&!e[f[g]].state.loaded&&d.push(f[g]);d.length?this._load_nodes(d,function(){this.load_all(b,c)}):(c&&c.call(this,b),this.trigger("load_all",{node:b}))},_load_node:function(b,c){var d=this.settings.core.data,e,f=function g(){return 3!==this.nodeType&&8!==this.nodeType};return d?a.vakata.is_function(d)?d.call(this,b,function(d){d===!1?c.call(this,!1):this["string"==typeof d?"_append_html_data":"_append_json_data"](b,"string"==typeof d?a(a.parseHTML(d)).filter(f):d,function(a){c.call(this,a)})}.bind(this)):"object"==typeof d?d.url?(d=a.extend(!0,{},d),a.vakata.is_function(d.url)&&(d.url=d.url.call(this,b)),a.vakata.is_function(d.data)&&(d.data=d.data.call(this,b)),a.ajax(d).done(function(d,e,g){var h=g.getResponseHeader("Content-Type");return h&&-1!==h.indexOf("json")||"object"==typeof d?this._append_json_data(b,d,function(a){c.call(this,a)}):h&&-1!==h.indexOf("html")||"string"==typeof d?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:g})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))}.bind(this)).fail(function(a){this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:a})},c.call(this,!1),this.settings.core.error.call(this,this._data.core.last_error)}.bind(this))):(e=a.vakata.is_array(d)?a.extend(!0,[],d):a.isPlainObject(d)?a.extend(!0,{},d):d,b.id===a.jstree.root?this._append_json_data(b,e,function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))):"string"==typeof d?b.id===a.jstree.root?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1)):c.call(this,!1):b.id===a.jstree.root?this._append_html_data(b,this._data.core.original_container_html.clone(!0),function(a){c.call(this,a)}):c.call(this,!1)},_node_changed:function(b){b=this.get_node(b),b&&-1===a.inArray(b.id,this._model.changed)&&this._model.changed.push(b.id)},_append_html_data:function(b,c,d){b=this.get_node(b),b.children=[],b.children_d=[];var e=c.is("ul")?c.children():c,f=b.id,g=[],h=[],i=this._model.data,j=i[f],k=this._data.core.selected.length,l,m,n;for(e.each(function(b,c){l=this._parse_model_from_html(a(c),f,j.parents.concat()),l&&(g.push(l),h.push(l),i[l].children_d.length&&(h=h.concat(i[l].children_d)))}.bind(this)),j.children=g,j.children_d=h,m=0,n=j.parents.length;n>m;m++)i[j.parents[m]].children_d=i[j.parents[m]].children_d.concat(h);this.trigger("model",{nodes:h,parent:f}),f!==a.jstree.root?(this._node_changed(f),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==k&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)},_append_json_data:function(b,c,d,e){if(null!==this.element){b=this.get_node(b),b.children=[],b.children_d=[],c.d&&(c=c.d,"string"==typeof c&&(c=JSON.parse(c))),a.vakata.is_array(c)||(c=[c]);var f=null,g={df:this._model.default_state,dat:c,par:b.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},h=this,i=function(a,b){a.data&&(a=a.data);var c=a.dat,d=a.par,e=[],f=[],g=[],i=a.df,j=a.t_id,k=a.t_cnt,l=a.m,m=l[d],n=a.sel,o,p,q,r,s=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f,h,j,k,m={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in i)i.hasOwnProperty(f)&&(m.state[f]=i[f]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(m.icon=a.data.jstree.icon),(m.icon===b||null===m.icon||""===m.icon)&&(m.icon=!0),a&&a.data&&(m.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(m.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(m.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(m.li_attr[f]=a.li_attr[f]);if(m.li_attr.id||(m.li_attr.id=e),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(m.a_attr[f]=a.a_attr[f]);for(a&&a.children&&a.children===!0&&(m.state.loaded=!1,m.children=[],m.children_d=[]),l[m.id]=m,f=0,h=m.children.length;h>f;f++)j=s(l[m.children[f]],m.id,d),k=l[j],m.children_d.push(j),k.children_d.length&&(m.children_d=m.children_d.concat(k.children_d));return delete a.data,delete a.children,l[m.id].original=a,m.state.selected&&g.push(m.id),m.id},t=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,h,m,n,o;do e="j"+j+"_"+ ++k;while(l[e]);o={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in i)i.hasOwnProperty(f)&&(o.state[f]=i[f]);if(a&&a.id&&(o.id=a.id.toString()),a&&a.text&&(o.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(o.icon=a.data.jstree.icon),(o.icon===b||null===o.icon||""===o.icon)&&(o.icon=!0),a&&a.data&&(o.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(o.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(o.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(o.li_attr[f]=a.li_attr[f]);if(o.li_attr.id&&!o.id&&(o.id=o.li_attr.id.toString()),o.id||(o.id=e),o.li_attr.id||(o.li_attr.id=o.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(o.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,h=a.children.length;h>f;f++)m=t(a.children[f],o.id,d),n=l[m],o.children.push(m),n.children_d.length&&(o.children_d=o.children_d.concat(n.children_d));o.children_d=o.children_d.concat(o.children)}return a&&a.children&&a.children===!0&&(o.state.loaded=!1,o.children=[],o.children_d=[]),delete a.data,delete a.children,o.original=a,l[o.id]=o,o.state.selected&&g.push(o.id),o.id};if(c.length&&c[0].id!==b&&c[0].parent!==b){for(p=0,q=c.length;q>p;p++)c[p].children||(c[p].children=[]),c[p].state||(c[p].state={}),l[c[p].id.toString()]=c[p];for(p=0,q=c.length;q>p;p++)l[c[p].parent.toString()]?(l[c[p].parent.toString()].children.push(c[p].id.toString()),m.children_d.push(c[p].id.toString())):"undefined"!=typeof h&&(h._data.core.last_error={error:"parse",plugin:"core",id:"core_07",reason:"Node with invalid parent",data:JSON.stringify({id:c[p].id.toString(),parent:c[p].parent.toString()})},h.settings.core.error.call(h,h._data.core.last_error));for(p=0,q=m.children.length;q>p;p++)o=s(l[m.children[p]],d,m.parents.concat()),f.push(o),l[o].children_d.length&&(f=f.concat(l[o].children_d));for(p=0,q=m.parents.length;q>p;p++)l[m.parents[p]].children_d=l[m.parents[p]].children_d.concat(f);r={cnt:k,mod:l,sel:n,par:d,dpc:f,add:g}}else{for(p=0,q=c.length;q>p;p++)o=t(c[p],d,m.parents.concat()),o&&(e.push(o),f.push(o),l[o].children_d.length&&(f=f.concat(l[o].children_d)));for(m.children=e,m.children_d=f,p=0,q=m.parents.length;q>p;p++)l[m.parents[p]].children_d=l[m.parents[p]].children_d.concat(f);r={cnt:k,mod:l,sel:n,par:d,dpc:f,add:g}}return"undefined"!=typeof window&&"undefined"!=typeof window.document?r:void postMessage(r)},k=function(b,c){if(null!==this.element){this._cnt=b.cnt;var e,f=this._model.data;for(e in f)f.hasOwnProperty(e)&&f[e].state&&f[e].state.loading&&b.mod[e]&&(b.mod[e].state.loading=!0);if(this._model.data=b.mod,c){var g,i=b.add,k=b.sel,l=this._data.core.selected.slice();if(f=this._model.data,k.length!==l.length||a.vakata.array_unique(k.concat(l)).length!==k.length){for(e=0,g=k.length;g>e;e++)-1===a.inArray(k[e],i)&&-1===a.inArray(k[e],l)&&(f[k[e]].state.selected=!1);for(e=0,g=l.length;g>e;e++)-1===a.inArray(l[e],k)&&(f[l[e]].state.selected=!0)}}b.add.length&&(this._data.core.selected=this._data.core.selected.concat(b.add)),this.trigger("model",{nodes:b.dpc,parent:b.par}),b.par!==a.jstree.root?(this._node_changed(b.par),this.redraw()):this.redraw(!0),b.add.length&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),!c&&j?j(function(){d.call(h,!0)}):d.call(h,!0)}};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker)try{null===this._wrk&&(this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+i.toString()],{type:"text/javascript"}))),!this._data.core.working||e?(this._data.core.working=!0,f=new window.Worker(this._wrk),f.onmessage=function(a){k.call(this,a.data,!0);try{f.terminate(),f=null}catch(b){}this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}.bind(this),g.par?f.postMessage(g):this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1):this._data.core.worker_queue.push([b,c,d,!0])}catch(l){k.call(this,i(g),!1),this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}else k.call(this,i(g),!1)}},_parse_model_from_html:function(c,d,e){e=e?[].concat(e):[],d&&e.unshift(d);var f,g,h=this._model.data,i={id:!1,text:!1,icon:!0,parent:d,parents:e,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},j,k,l;for(j in this._model.default_state)this._model.default_state.hasOwnProperty(j)&&(i.state[j]=this._model.default_state[j]);if(k=a.vakata.attributes(c,!0),a.each(k,function(b,c){return c=a.vakata.trim(c),c.length?(i.li_attr[b]=c,void("id"===b&&(i.id=c.toString()))):!0}),k=c.children("a").first(),k.length&&(k=a.vakata.attributes(k,!0),a.each(k,function(b,c){c=a.vakata.trim(c),c.length&&(i.a_attr[b]=c)})),k=c.children("a").first().length?c.children("a").first().clone():c.clone(),k.children("ins, i, ul").remove(),k=k.html(),k=a("
    ").html(k),i.text=this.settings.core.force_text?k.text():k.html(),k=c.data(),i.data=k?a.extend(!0,{},k):null,i.state.opened=c.hasClass("jstree-open"),i.state.selected=c.children("a").hasClass("jstree-clicked"),i.state.disabled=c.children("a").hasClass("jstree-disabled"),i.data&&i.data.jstree)for(j in i.data.jstree)i.data.jstree.hasOwnProperty(j)&&(i.state[j]=i.data.jstree[j]);k=c.children("a").children(".jstree-themeicon"),k.length&&(i.icon=k.hasClass("jstree-themeicon-hidden")?!1:k.attr("rel")),i.state.icon!==b&&(i.icon=i.state.icon),(i.icon===b||null===i.icon||""===i.icon)&&(i.icon=!0),k=c.children("ul").children("li");do l="j"+this._id+"_"+ ++this._cnt;while(h[l]);return i.id=i.li_attr.id?i.li_attr.id.toString():l,k.length?(k.each(function(b,c){f=this._parse_model_from_html(a(c),i.id,e),g=this._model.data[f],i.children.push(f),g.children_d.length&&(i.children_d=i.children_d.concat(g.children_d))}.bind(this)),i.children_d=i.children_d.concat(i.children)):c.hasClass("jstree-closed")&&(i.state.loaded=!1),i.li_attr["class"]&&(i.li_attr["class"]=i.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),i.a_attr["class"]&&(i.a_attr["class"]=i.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),h[i.id]=i,i.state.selected&&this._data.core.selected.push(i.id),i.id},_parse_model_from_flat_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f=this._model.data,g=this._model.default_state,h,i,j,k,l={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(h in g)g.hasOwnProperty(h)&&(l.state[h]=g[h]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(h in a.data.jstree)a.data.jstree.hasOwnProperty(h)&&(l.state[h]=a.data.jstree[h]);if(a&&"object"==typeof a.state)for(h in a.state)a.state.hasOwnProperty(h)&&(l.state[h]=a.state[h]);if(a&&"object"==typeof a.li_attr)for(h in a.li_attr)a.li_attr.hasOwnProperty(h)&&(l.li_attr[h]=a.li_attr[h]);if(l.li_attr.id||(l.li_attr.id=e),a&&"object"==typeof a.a_attr)for(h in a.a_attr)a.a_attr.hasOwnProperty(h)&&(l.a_attr[h]=a.a_attr[h]);for(a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),f[l.id]=l,h=0,i=l.children.length;i>h;h++)j=this._parse_model_from_flat_json(f[l.children[h]],l.id,d),k=f[j],l.children_d.push(j),k.children_d.length&&(l.children_d=l.children_d.concat(k.children_d));return delete a.data,delete a.children,f[l.id].original=a,l.state.selected&&this._data.core.selected.push(l.id),l.id},_parse_model_from_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,g,h,i,j=this._model.data,k=this._model.default_state,l;do e="j"+this._id+"_"+ ++this._cnt;while(j[e]);l={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in k)k.hasOwnProperty(f)&&(l.state[f]=k[f]);if(a&&a.id&&(l.id=a.id.toString()),a&&a.text&&(l.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0), +a&&a.data&&(l.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(l.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(l.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(l.li_attr[f]=a.li_attr[f]);if(l.li_attr.id&&!l.id&&(l.id=l.li_attr.id.toString()),l.id||(l.id=e),l.li_attr.id||(l.li_attr.id=l.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(l.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,g=a.children.length;g>f;f++)h=this._parse_model_from_json(a.children[f],l.id,d),i=j[h],l.children.push(h),i.children_d.length&&(l.children_d=l.children_d.concat(i.children_d));l.children_d=l.children.concat(l.children_d)}return a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),delete a.data,delete a.children,l.original=a,j[l.id]=l,l.state.selected&&this._data.core.selected.push(l.id),l.id},_redraw:function(){var b=this._model.force_full_redraw?this._model.data[a.jstree.root].children.concat([]):this._model.changed.concat([]),c=i.createElement("UL"),d,e,f,g=this._data.core.focused;for(e=0,f=b.length;f>e;e++)d=this.redraw_node(b[e],!0,this._model.force_full_redraw),d&&this._model.force_full_redraw&&c.appendChild(d);this._model.force_full_redraw&&(c.className=this.get_container_ul()[0].className,c.setAttribute("role","group"),this.element.empty().append(c)),null!==g&&this.settings.core.restore_focus&&(d=this.get_node(g,!0),d&&d.length&&d.children(".jstree-anchor")[0]!==i.activeElement?d.children(".jstree-anchor").trigger("focus"):this._data.core.focused=null),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:b})},redraw:function(a){a&&(this._model.force_full_redraw=!0),this._redraw()},draw_children:function(b){var c=this.get_node(b),d=!1,e=!1,f=!1,g=i;if(!c)return!1;if(c.id===a.jstree.root)return this.redraw(!0);if(b=this.get_node(b,!0),!b||!b.length)return!1;if(b.children(".jstree-children").remove(),b=b[0],c.children.length&&c.state.loaded){for(f=g.createElement("UL"),f.setAttribute("role","group"),f.className="jstree-children",d=0,e=c.children.length;e>d;d++)f.appendChild(this.redraw_node(c.children[d],!0,!0));b.appendChild(f)}},redraw_node:function(b,c,d,e){var f=this.get_node(b),g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n="",o=i,p=this._model.data,q=!1,r=!1,s=null,t=0,u=0,v=!1,w=!1;if(!f)return!1;if(f.id===a.jstree.root)return this.redraw(!0);if(c=c||0===f.children.length,b=i.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(f.id[0])?"\\3"+f.id[0]+" "+f.id.substr(1).replace(a.jstree.idregex,"\\$&"):f.id.replace(a.jstree.idregex,"\\$&"))):i.getElementById(f.id))b=a(b),d||(g=b.parent().parent()[0],g===this.element[0]&&(g=null),h=b.index()),c||!f.children.length||b.children(".jstree-children").length||(c=!0),c||(j=b.children(".jstree-children")[0]),q=b.children(".jstree-anchor")[0]===i.activeElement,b.remove();else if(c=!0,!d){if(g=f.parent!==a.jstree.root?a("#"+f.parent.replace(a.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===g||g&&p[f.parent].state.opened))return!1;h=a.inArray(f.id,null===g?p[a.jstree.root].children:p[f.parent].children)}b=this._data.core.node.cloneNode(!0),n="jstree-node ";for(k in f.li_attr)if(f.li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"!==k?b.setAttribute(k,f.li_attr[k]):n+=f.li_attr[k]}for(f.a_attr.id||(f.a_attr.id=f.id+"_anchor"),b.childNodes[1].setAttribute("aria-selected",!!f.state.selected),b.childNodes[1].setAttribute("aria-level",f.parents.length),this.settings.core.compute_elements_positions&&(b.childNodes[1].setAttribute("aria-setsize",p[f.parent].children.length),b.childNodes[1].setAttribute("aria-posinset",p[f.parent].children.indexOf(f.id)+1)),f.state.disabled&&b.childNodes[1].setAttribute("aria-disabled",!0),k=0,l=f.children.length;l>k;k++)if(!p[f.children[k]].state.hidden){v=!0;break}if(null!==f.parent&&p[f.parent]&&!f.state.hidden&&(k=a.inArray(f.id,p[f.parent].children),w=f.id,-1!==k))for(k++,l=p[f.parent].children.length;l>k;k++)if(p[p[f.parent].children[k]].state.hidden||(w=p[f.parent].children[k]),w!==f.id)break;f.state.hidden&&(n+=" jstree-hidden"),f.state.loading&&(n+=" jstree-loading"),f.state.loaded&&!v?n+=" jstree-leaf":(n+=f.state.opened&&f.state.loaded?" jstree-open":" jstree-closed",b.childNodes[1].setAttribute("aria-expanded",f.state.opened&&f.state.loaded)),w===f.id&&(n+=" jstree-last"),b.id=f.id,b.className=n,n=(f.state.selected?" jstree-clicked":"")+(f.state.disabled?" jstree-disabled":"");for(l in f.a_attr)if(f.a_attr.hasOwnProperty(l)){if("href"===l&&"#"===f.a_attr[l])continue;"class"!==l?b.childNodes[1].setAttribute(l,f.a_attr[l]):n+=" "+f.a_attr[l]}if(n.length&&(b.childNodes[1].className="jstree-anchor "+n),(f.icon&&f.icon!==!0||f.icon===!1)&&(f.icon===!1?b.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===f.icon.indexOf("/")&&-1===f.icon.indexOf(".")?b.childNodes[1].childNodes[0].className+=" "+f.icon+" jstree-themeicon-custom":(b.childNodes[1].childNodes[0].style.backgroundImage='url("'+f.icon+'")',b.childNodes[1].childNodes[0].style.backgroundPosition="center center",b.childNodes[1].childNodes[0].style.backgroundSize="auto",b.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?b.childNodes[1].appendChild(o.createTextNode(f.text)):b.childNodes[1].innerHTML+=f.text,c&&f.children.length&&(f.state.opened||e)&&f.state.loaded){for(m=o.createElement("UL"),m.setAttribute("role","group"),m.className="jstree-children",k=0,l=f.children.length;l>k;k++)m.appendChild(this.redraw_node(f.children[k],c,!0));b.appendChild(m)}if(j&&b.appendChild(j),!d){for(g||(g=this.element[0]),k=0,l=g.childNodes.length;l>k;k++)if(g.childNodes[k]&&g.childNodes[k].className&&-1!==g.childNodes[k].className.indexOf("jstree-children")){s=g.childNodes[k];break}s||(s=o.createElement("UL"),s.setAttribute("role","group"),s.className="jstree-children",g.appendChild(s)),g=s,hf;f++)this.open_node(c[f],d,e);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(e=e===b?this.settings.core.animation:e,this.is_closed(c)?this.is_loaded(c)?(h=this.get_node(c,!0),i=this,h.length&&(e&&h.children(".jstree-children").length&&h.children(".jstree-children").stop(!0,!0),c.children.length&&!this._firstChild(h.children(".jstree-children")[0])&&this.draw_children(c),e?(this.trigger("before_open",{node:c}),h.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").children(".jstree-anchor").attr("aria-expanded",!0).end().children(".jstree-children").stop(!0,!0).slideDown(e,function(){this.style.display="",i.element&&i.trigger("after_open",{node:c})})):(this.trigger("before_open",{node:c}),h[0].className=h[0].className.replace("jstree-closed","jstree-open"),h[0].childNodes[1].setAttribute("aria-expanded",!0))),c.state.opened=!0,d&&d.call(this,c,!0),h.length||this.trigger("before_open",{node:c}),this.trigger("open_node",{node:c}),e&&h.length||this.trigger("after_open",{node:c}),!0):this.is_loading(c)?setTimeout(function(){this.open_node(c,d,e)}.bind(this),500):void this.load_node(c,function(a,b){return b?this.open_node(a,d,e):d?d.call(this,a,!1):!1}):(d&&d.call(this,c,!1),!1)):!1},_open_to:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c,d,e=b.parents;for(c=0,d=e.length;d>c;c+=1)c!==a.jstree.root&&this.open_node(e[c],!1,0);return a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)},close_node:function(c,d){var e,f,g,h;if(a.vakata.is_array(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.close_node(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?this.is_closed(c)?!1:(d=d===b?this.settings.core.animation:d,g=this,h=this.get_node(c,!0),c.state.opened=!1,this.trigger("close_node",{node:c}),void(h.length?d?h.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").children(".jstree-anchor").attr("aria-expanded",!1).end().children(".jstree-children").stop(!0,!0).slideUp(d,function(){this.style.display="",h.children(".jstree-children").remove(),g.element&&g.trigger("after_close",{node:c})}):(h[0].className=h[0].className.replace("jstree-open","jstree-closed"),h.children(".jstree-anchor").attr("aria-expanded",!1),h.children(".jstree-children").remove(),this.trigger("after_close",{node:c})):this.trigger("after_close",{node:c}))):!1},toggle_node:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.toggle_node(b[c]);return!0}return this.is_closed(b)?this.open_node(b):this.is_open(b)?this.close_node(b):void 0},open_all:function(b,c,d){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var e=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),f,g,h;if(!e.length){for(f=0,g=b.children_d.length;g>f;f++)this.is_closed(this._model.data[b.children_d[f]])&&(this._model.data[b.children_d[f]].state.opened=!0);return this.trigger("open_all",{node:b})}d=d||e,h=this,e=this.is_closed(b)?e.find(".jstree-closed").addBack():e.find(".jstree-closed"),e.each(function(){h.open_node(this,function(a,b){b&&this.is_parent(a)&&this.open_all(a,c,d)},c||0)}),0===d.find(".jstree-closed").length&&this.trigger("open_all",{node:this.get_node(d)})},close_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),e=this,f,g;for(d.length&&(d=this.is_open(b)?d.find(".jstree-open").addBack():d.find(".jstree-open"),a(d.get().reverse()).each(function(){e.close_node(this,c||0)})),f=0,g=b.children_d.length;g>f;f++)this._model.data[b.children_d[f]].state.opened=!1;this.trigger("close_all",{node:b})},is_disabled:function(a){return a=this.get_node(a),a&&a.state&&a.state.disabled},enable_node:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!1,this.get_node(b,!0).children(".jstree-anchor").removeClass("jstree-disabled").attr("aria-disabled",!1),void this.trigger("enable_node",{node:b})):!1},disable_node:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!0,this.get_node(b,!0).children(".jstree-anchor").addClass("jstree-disabled").attr("aria-disabled",!0),void this.trigger("disable_node",{node:b})):!1},is_hidden:function(a){return a=this.get_node(a),a.state.hidden===!0},hide_node:function(b,c){var d,e;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.hide_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden||(b.state.hidden=!0,this._node_changed(b.parent),c||this.redraw(),this.trigger("hide_node",{node:b}))):!1},show_node:function(b,c){var d,e;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.show_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden&&(b.state.hidden=!1,this._node_changed(b.parent),c||this.redraw(),this.trigger("show_node",{node:b}))):!1},hide_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&!d[c].state.hidden&&(d[c].state.hidden=!0,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("hide_all",{nodes:e}),e},show_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&d[c].state.hidden&&(d[c].state.hidden=!1,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("show_all",{nodes:e}),e},activate_node:function(a,c){if(this.is_disabled(a))return!1;if(c&&"object"==typeof c||(c={}),this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==b?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!this._data.core.last_clicked&&this._data.core.selected.length&&(this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])),this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&(!c.shiftKey||this._data.core.last_clicked&&this.get_parent(a)&&this.get_parent(a)===this._data.core.last_clicked.parent))if(c.shiftKey){var d=this.get_node(a).id,e=this._data.core.last_clicked.id,f=this.get_node(this._data.core.last_clicked.parent).children,g=!1,h,i;for(h=0,i=f.length;i>h;h+=1)f[h]===d&&(g=!g),f[h]===e&&(g=!g),this.is_disabled(f[h])||!g&&f[h]!==d&&f[h]!==e?this.deselect_node(f[h],!0,c):this.is_hidden(f[h])||this.select_node(f[h],!0,!1,c);this.trigger("changed",{action:"select_node",node:this.get_node(a),selected:this._data.core.selected,event:c})}else this.is_selected(a)?this.deselect_node(a,!1,c):this.select_node(a,!1,!1,c);else!this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&this.is_selected(a)?this.deselect_node(a,!1,c):(this.deselect_all(!0),this.select_node(a,!1,!1,c),this._data.core.last_clicked=this.get_node(a));this.trigger("activate_node",{node:this.get_node(a),event:c})},hover_node:function(a){if(a=this.get_node(a,!0),!a||!a.length||a.children(".jstree-hovered").length)return!1;var b=this.element.find(".jstree-hovered"),c=this.element;b&&b.length&&this.dehover_node(b),a.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(a)}),setTimeout(function(){c.attr("aria-activedescendant",a[0].id)},0)},dehover_node:function(a){return a=this.get_node(a,!0),a&&a.length&&a.children(".jstree-hovered").length?(a.children(".jstree-anchor").removeClass("jstree-hovered"),void this.trigger("dehover_node",{node:this.get_node(a)})):!1},select_node:function(b,c,d,e){var f,g,h,i;if(a.vakata.is_array(b)){for(b=b.slice(),g=0,h=b.length;h>g;g++)this.select_node(b[g],c,d,e);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.selected||(b.state.selected=!0,this._data.core.selected.push(b.id),d||(f=this._open_to(b)),f&&f.length&&f.children(".jstree-anchor").addClass("jstree-clicked").attr("aria-selected",!0),this.trigger("select_node",{node:b,selected:this._data.core.selected,event:e}),c||this.trigger("changed",{action:"select_node",node:b,selected:this._data.core.selected,event:e})))):!1},deselect_node:function(b,c,d){var e,f,g;if(a.vakata.is_array(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.deselect_node(b[e],c,d);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(g=this.get_node(b,!0),void(b.state.selected&&(b.state.selected=!1,this._data.core.selected=a.vakata.array_remove_item(this._data.core.selected,b.id),g.length&&g.children(".jstree-anchor").removeClass("jstree-clicked").attr("aria-selected",!1),this.trigger("deselect_node",{node:b,selected:this._data.core.selected,event:d}),c||this.trigger("changed",{action:"deselect_node",node:b,selected:this._data.core.selected,event:d})))):!1},select_all:function(b){var c=this._data.core.selected.concat([]),d,e;for(this._data.core.selected=this._model.data[a.jstree.root].children_d.concat(),d=0,e=this._data.core.selected.length;e>d;d++)this._model.data[this._data.core.selected[d]]&&(this._model.data[this._data.core.selected[d]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),b||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:c})},deselect_all:function(a){var b=this._data.core.selected.concat([]),c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)this._model.data[this._data.core.selected[c]]&&(this._model.data[this._data.core.selected[c]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked").attr("aria-selected",!1),this.trigger("deselect_all",{selected:this._data.core.selected,node:b}),a||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:b})},is_selected:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.selected:!1},get_selected:function(b){return b?a.map(this._data.core.selected,function(a){return this.get_node(a)}.bind(this)):this._data.core.selected.slice()},get_top_selected:function(b){var c=this.get_selected(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,function(a){return this.get_node(a)}.bind(this)):c},get_bottom_selected:function(b){var c=this.get_selected(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,function(a){return this.get_node(a)}.bind(this)):d},get_state:function(){var b={core:{open:[],loaded:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},c;for(c in this._model.data)this._model.data.hasOwnProperty(c)&&c!==a.jstree.root&&(this._model.data[c].state.loaded&&this.settings.core.loaded_state&&b.core.loaded.push(c),this._model.data[c].state.opened&&b.core.open.push(c),this._model.data[c].state.selected&&b.core.selected.push(c));return b},set_state:function(c,d){if(c){if(c.core&&c.core.selected&&c.core.initial_selection===b&&(c.core.initial_selection=this._data.core.selected.concat([]).sort().join(",")),c.core){var e,f,g,h,i;if(c.core.loaded)return this.settings.core.loaded_state&&a.vakata.is_array(c.core.loaded)&&c.core.loaded.length?this._load_nodes(c.core.loaded,function(a){delete c.core.loaded,this.set_state(c,d)}):(delete c.core.loaded,this.set_state(c,d)),!1;if(c.core.open)return a.vakata.is_array(c.core.open)&&c.core.open.length?this._load_nodes(c.core.open,function(a){this.open_node(a,!1,0),delete c.core.open,this.set_state(c,d)}):(delete c.core.open,this.set_state(c,d)),!1;if(c.core.scroll)return c.core.scroll&&c.core.scroll.left!==b&&this.element.scrollLeft(c.core.scroll.left),c.core.scroll&&c.core.scroll.top!==b&&this.element.scrollTop(c.core.scroll.top),delete c.core.scroll,this.set_state(c,d),!1;if(c.core.selected)return h=this,(c.core.initial_selection===b||c.core.initial_selection===this._data.core.selected.concat([]).sort().join(","))&&(this.deselect_all(),a.each(c.core.selected,function(a,b){h.select_node(b,!1,!0)})),delete c.core.initial_selection,delete c.core.selected,this.set_state(c,d),!1;for(i in c)c.hasOwnProperty(i)&&"core"!==i&&-1===a.inArray(i,this.settings.plugins)&&delete c[i];if(a.isEmptyObject(c.core))return delete c.core,this.set_state(c,d),!1}return a.isEmptyObject(c)?(c=null,d&&d.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(b,c){this._data.core.state=c===!0?{}:this.get_state(),c&&a.vakata.is_function(c)&&(this._data.core.state=c.call(this,this._data.core.state)),this._cnt=0,this._model.data={},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this._data.core.selected=[],this._data.core.last_clicked=null,this._data.core.focused=null;var d=this.get_container_ul()[0].className;b||(this.element.html(""),this.element.attr("aria-activedescendant","j"+this._id+"_loading")),this.load_node(a.jstree.root,function(b,c){c&&(this.get_container_ul()[0].className=d,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.set_state(a.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c=[],d=[],e=this._data.core.selected.concat([]);d.push(b.id),b.state.opened===!0&&c.push(b.id),this.get_node(b,!0).find(".jstree-open").each(function(){d.push(this.id),c.push(this.id)}),this._load_nodes(d,function(a){this.open_node(c,!1,0),this.select_node(e),this.trigger("refresh_node",{node:b,nodes:a})}.bind(this),!1,!0)},set_id:function(b,c){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var d,e,f=this._model.data,g=b.id;for(c=c.toString(),f[b.parent].children[a.inArray(b.id,f[b.parent].children)]=c,d=0,e=b.parents.length;e>d;d++)f[b.parents[d]].children_d[a.inArray(b.id,f[b.parents[d]].children_d)]=c;for(d=0,e=b.children.length;e>d;d++)f[b.children[d]].parent=c;for(d=0,e=b.children_d.length;e>d;d++)f[b.children_d[d]].parents[a.inArray(b.id,f[b.children_d[d]].parents)]=c;return d=a.inArray(b.id,this._data.core.selected),-1!==d&&(this._data.core.selected[d]=c),d=this.get_node(b.id,!0),d&&(d.attr("id",c),this.element.attr("aria-activedescendant")===b.id&&this.element.attr("aria-activedescendant",c)),delete f[b.id],b.id=c,b.li_attr.id=c,f[c]=b,this.trigger("set_id",{node:b,"new":b.id,old:g}),!0},get_text:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.text:!1},set_text:function(b,c){var d,e;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.set_text(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.text=c,this.get_node(b,!0).length&&this.redraw_node(b.id),this.trigger("set_text",{obj:b,text:c}),!0):!1},get_json:function(b,c,d){if(b=this.get_node(b||a.jstree.root),!b)return!1;c&&c.flat&&!d&&(d=[]);var e={id:b.id,text:b.text,icon:this.get_icon(b),li_attr:a.extend(!0,{},b.li_attr),a_attr:a.extend(!0,{},b.a_attr),state:{},data:c&&c.no_data?!1:a.extend(!0,a.vakata.is_array(b.data)?[]:{},b.data)},f,g;if(c&&c.flat?e.parent=b.parent:e.children=[],c&&c.no_state)delete e.state;else for(f in b.state)b.state.hasOwnProperty(f)&&(e.state[f]=b.state[f]);if(c&&c.no_li_attr&&delete e.li_attr,c&&c.no_a_attr&&delete e.a_attr,c&&c.no_id&&(delete e.id,e.li_attr&&e.li_attr.id&&delete e.li_attr.id,e.a_attr&&e.a_attr.id&&delete e.a_attr.id),c&&c.flat&&b.id!==a.jstree.root&&d.push(e),!c||!c.no_children)for(f=0,g=b.children.length;g>f;f++)c&&c.flat?this.get_json(b.children[f],c,d):e.children.push(this.get_json(b.children[f],c));return c&&c.flat?d:b.id===a.jstree.root?e.children:e},create_node:function(c,d,e,f,g){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return!1;if(e=e===b?"last":e,!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(c))return this.load_node(c,function(){this.create_node(c,d,e,f,!0)});d||(d={text:this.get_string("New node")}),d="string"==typeof d?{text:d}:a.extend(!0,{},d),d.text===b&&(d.text=this.get_string("New node"));var h,i,j,k;switch(c.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":h=this.get_node(c.parent),e=a.inArray(c.id,h.children),c=h;break;case"after":h=this.get_node(c.parent),e=a.inArray(c.id,h.children)+1,c=h;break;case"inside":case"first":e=0;break;case"last":e=c.children.length;break;default:e||(e=0)}if(e>c.children.length&&(e=c.children.length),d.id||(d.id=!0),!this.check("create_node",d,c,e))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(d.id===!0&&delete d.id,d=this._parse_model_from_json(d,c.id,c.parents.concat()),!d)return!1;for(h=this.get_node(d),i=[],i.push(d),i=i.concat(h.children_d),this.trigger("model",{nodes:i,parent:c.id}),c.children_d=c.children_d.concat(i),j=0,k=c.parents.length;k>j;j++)this._model.data[c.parents[j]].children_d=this._model.data[c.parents[j]].children_d.concat(i);for(d=h,h=[],j=0,k=c.children.length;k>j;j++)h[j>=e?j+1:j]=c.children[j];return h[e]=d.id,c.children=h,this.redraw_node(c,!0),this.trigger("create_node",{node:this.get_node(d),parent:c.id,position:e}),f&&f.call(this,this.get_node(d)),d.id},rename_node:function(b,c){var d,e,f;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.rename_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=b.text,this.check("rename_node",b,this.get_parent(b),c)?(this.set_text(b,c),this.trigger("rename_node",{node:b,text:c,old:f}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.delete_node(b[c]);return!0}if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;if(e=this.get_node(b.parent),f=a.inArray(b.id,e.children),l=!1,!this.check("delete_node",b,e,f))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==f&&(e.children=a.vakata.array_remove(e.children,f)),g=b.children_d.concat([]),g.push(b.id),h=0,i=b.parents.length;i>h;h++)this._model.data[b.parents[h]].children_d=a.vakata.array_filter(this._model.data[b.parents[h]].children_d,function(b){return-1===a.inArray(b,g)});for(j=0,k=g.length;k>j;j++)if(this._model.data[g[j]].state.selected){l=!0;break}for(l&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(b){return-1===a.inArray(b,g)})),this.trigger("delete_node",{node:b,parent:e.id}),l&&this.trigger("changed",{action:"delete_node",node:b,selected:this._data.core.selected,parent:e.id}),j=0,k=g.length;k>j;j++)delete this._model.data[g[j]];return-1!==a.inArray(this._data.core.focused,g)&&(this._data.core.focused=null,m=this.element[0].scrollTop,n=this.element[0].scrollLeft,e.id===a.jstree.root?this._model.data[a.jstree.root].children[0]&&this.get_node(this._model.data[a.jstree.root].children[0],!0).children(".jstree-anchor").triger("focus"):this.get_node(e,!0).children(".jstree-anchor").trigger("focus"),this.element[0].scrollTop=m,this.element[0].scrollLeft=n),this.redraw_node(e,!0),!0},check:function(b,c,d,e,f){c=c&&c.id?c:this.get_node(c),d=d&&d.id?d:this.get_node(d);var g=b.match(/^move_node|copy_node|create_node$/i)?d:c,h=this.settings.core.check_callback;if("move_node"===b||"copy_node"===b){if(!(f&&f.is_multi||"move_node"!==b||a.inArray(c.id,d.children)!==e))return this._data.core.last_error={error:"check",plugin:"core",id:"core_08",reason:"Moving node to its current position",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1;if(!(f&&f.is_multi||c.id!==d.id&&("move_node"!==b||a.inArray(c.id,d.children)!==e)&&-1===a.inArray(d.id,c.children_d)))return this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1}return g&&g.data&&(g=g.data),g&&g.functions&&(g.functions[b]===!1||g.functions[b]===!0)?(g.functions[b]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})}),g.functions[b]):h===!1||a.vakata.is_function(h)&&h.call(this,b,c,d,e,f)===!1||h&&h[b]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1):!0},last_error:function(){return this._data.core.last_error},move_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.move_node(c,d,e,f,!0,!1,i)});if(a.vakata.is_array(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(r=this.move_node(c[j],d,e,f,g,!1,i))&&(d=r,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;if(l=(c.parent||a.jstree.root).toString(),n=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,o=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),p=!o||!o._id||this._id!==o._id,m=o&&o._id&&l&&o._model.data[l]&&o._model.data[l].children?a.inArray(c.id,o._model.data[l].children):-1,o&&o._id&&(c=o._model.data[c.id]),p)return(r=this.copy_node(c,d,e,f,g,!1,i))?(o&&o.delete_node(c),r):!1;switch(d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,n.children);break;case"after":e=a.inArray(d.id,n.children)+1;break;case"inside":case"first":e=0;break;case"last":e=n.children.length;break;default:e||(e=0)}if(e>n.children.length&&(e=n.children.length),!this.check("move_node",c,n,e,{core:!0,origin:i,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(c.parent===n.id){for(q=n.children.concat(),r=a.inArray(c.id,q),-1!==r&&(q=a.vakata.array_remove(q,r),e>r&&e--),r=[],s=0,t=q.length;t>s;s++)r[s>=e?s+1:s]=q[s];r[e]=c.id,n.children=r,this._node_changed(n.id),this.redraw(n.id===a.jstree.root)}else{for(r=c.children_d.concat(),r.push(c.id),s=0,t=c.parents.length;t>s;s++){for(q=[],w=o._model.data[c.parents[s]].children_d,u=0,v=w.length;v>u;u++)-1===a.inArray(w[u],r)&&q.push(w[u]);o._model.data[c.parents[s]].children_d=q}for(o._model.data[l].children=a.vakata.array_remove_item(o._model.data[l].children,c.id),s=0,t=n.parents.length;t>s;s++)this._model.data[n.parents[s]].children_d=this._model.data[n.parents[s]].children_d.concat(r);for(q=[],s=0,t=n.children.length;t>s;s++)q[s>=e?s+1:s]=n.children[s];for(q[e]=c.id,n.children=q,n.children_d.push(c.id),n.children_d=n.children_d.concat(c.children_d),c.parent=n.id,r=n.parents.concat(),r.unshift(n.id),w=c.parents.length,c.parents=r,r=r.concat(),s=0,t=c.children_d.length;t>s;s++)this._model.data[c.children_d[s]].parents=this._model.data[c.children_d[s]].parents.slice(0,-1*w),Array.prototype.push.apply(this._model.data[c.children_d[s]].parents,r);(l===a.jstree.root||n.id===a.jstree.root)&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||(this._node_changed(l),this._node_changed(n.id)),h||this.redraw()}return f&&f.call(this,c,n,e),this.trigger("move_node",{node:c,parent:n.id,position:e,old_parent:l,old_position:m,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id,old_instance:o,new_instance:this}),c.id},copy_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.copy_node(c,d,e,f,!0,!1,i)});if(a.vakata.is_array(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(m=this.copy_node(c[j],d,e,f,g,!0,i))&&(d=m,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;switch(q=(c.parent||a.jstree.root).toString(),r=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,s=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),t=!s||!s._id||this._id!==s._id,s&&s._id&&(c=s._model.data[c.id]),d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,r.children);break;case"after":e=a.inArray(d.id,r.children)+1;break;case"inside":case"first":e=0;break;case"last":e=r.children.length;break;default:e||(e=0)}if(e>r.children.length&&(e=r.children.length),!this.check("copy_node",c,r,e,{core:!0,origin:i,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(p=s?s.get_json(c,{no_id:!0,no_data:!0,no_state:!0}):c,!p)return!1;if(p.id===!0&&delete p.id,p=this._parse_model_from_json(p,r.id,r.parents.concat()), +!p)return!1;for(m=this.get_node(p),c&&c.state&&c.state.loaded===!1&&(m.state.loaded=!1),l=[],l.push(p),l=l.concat(m.children_d),this.trigger("model",{nodes:l,parent:r.id}),n=0,o=r.parents.length;o>n;n++)this._model.data[r.parents[n]].children_d=this._model.data[r.parents[n]].children_d.concat(l);for(l=[],n=0,o=r.children.length;o>n;n++)l[n>=e?n+1:n]=r.children[n];return l[e]=m.id,r.children=l,r.children_d.push(m.id),r.children_d=r.children_d.concat(m.children_d),r.id===a.jstree.root&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||this._node_changed(r.id),h||this.redraw(r.id===a.jstree.root),f&&f.call(this,m,r,e),this.trigger("copy_node",{node:m,original:c,parent:r.id,position:e,old_parent:q,old_position:s&&s._id&&q&&s._model.data[q]&&s._model.data[q].children?a.inArray(c.id,s._model.data[q].children):-1,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id,old_instance:s,new_instance:this}),m.id},cut:function(b){if(b||(b=this._data.core.selected.concat()),a.vakata.is_array(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="move_node",void this.trigger("cut",{node:b})):!1},copy:function(b){if(b||(b=this._data.core.selected.concat()),a.vakata.is_array(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="copy_node",void this.trigger("copy",{node:b})):!1},get_buffer:function(){return{mode:e,node:d,inst:f}},can_paste:function(){return e!==!1&&d!==!1},paste:function(a,b){return a=this.get_node(a),a&&e&&e.match(/^(copy_node|move_node)$/)&&d?(this[e](d,a,b,!1,!1,!1,f)&&this.trigger("paste",{parent:a.id,node:d,mode:e}),d=!1,e=!1,void(f=!1)):!1},clear_buffer:function(){d=!1,e=!1,f=!1,this.trigger("clear_buffer")},edit:function(b,c,d){var e,f,g,h,j,k,l,m,n,o=!1;return(b=this.get_node(b))?this.check("edit",b,this.get_parent(b))?(n=b,c="string"==typeof c?c:b.text,this.set_text(b,""),b=this._open_to(b),n.text=c,e=this._data.core.rtl,f=this.element.width(),this._data.core.focused=n.id,g=b.children(".jstree-anchor").trigger("focus"),h=a(""),j=c,k=a("
    ",{css:{position:"absolute",top:"-200px",left:e?"0px":"-1000px",visibility:"hidden"}}).appendTo(i.body),l=a("",{value:j,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:function(c){c.stopImmediatePropagation(),c.preventDefault();var e=h.children(".jstree-rename-input"),f=e.val(),i=this.settings.core.force_text,m;""===f&&(f=j),k.remove(),h.replaceWith(g),h.remove(),j=i?j:a("
    ").append(a.parseHTML(j)).html(),b=this.get_node(b),this.set_text(b,j),m=!!this.rename_node(b,i?a("
    ").text(f).text():a("
    ").append(a.parseHTML(f)).html()),m||this.set_text(b,j),this._data.core.focused=n.id,setTimeout(function(){var a=this.get_node(n.id,!0);a.length&&(this._data.core.focused=n.id,a.children(".jstree-anchor").trigger("focus"))}.bind(this),0),d&&d.call(this,n,m,o,f),l=null}.bind(this),keydown:function(a){var b=a.which;27===b&&(o=!0,this.value=j),(27===b||13===b||37===b||38===b||39===b||40===b||32===b)&&a.stopImmediatePropagation(),(27===b||13===b)&&(a.preventDefault(),this.blur())},click:function(a){a.stopImmediatePropagation()},mousedown:function(a){a.stopImmediatePropagation()},keyup:function(a){l.width(Math.min(k.text("pW"+this.value).width(),f))},keypress:function(a){return 13===a.which?!1:void 0}}),m={fontFamily:g.css("fontFamily")||"",fontSize:g.css("fontSize")||"",fontWeight:g.css("fontWeight")||"",fontStyle:g.css("fontStyle")||"",fontStretch:g.css("fontStretch")||"",fontVariant:g.css("fontVariant")||"",letterSpacing:g.css("letterSpacing")||"",wordSpacing:g.css("wordSpacing")||""},h.attr("class",g.attr("class")).append(g.contents().clone()).append(l),g.replaceWith(h),k.css(m),l.css(m).width(Math.min(k.text("pW"+l[0].value).width(),f))[0].select(),void a(i).one("mousedown.jstree touchstart.jstree dnd_start.vakata",function(b){l&&b.target!==l&&a(l).trigger("blur")})):(this.settings.core.error.call(this,this._data.core.last_error),!1):!1},set_theme:function(b,c){if(!b)return!1;if(c===!0){var d=this.settings.core.themes.dir;d||(d=a.jstree.path+"/themes"),c=d+"/"+b+"/style.css"}c&&-1===a.inArray(c,g)&&(a("head").append(''),g.push(c)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=b,this.element.addClass("jstree-"+b),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+b+"-responsive"),this.trigger("set_theme",{theme:b})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(a){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=a,a&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped"),this.trigger("show_stripes")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped"),this.trigger("hide_stripes")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots"),this.trigger("show_dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots"),this.trigger("hide_dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons"),this.trigger("show_icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons"),this.trigger("hide_icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},show_ellipsis:function(){this._data.core.themes.ellipsis=!0,this.get_container_ul().addClass("jstree-ellipsis"),this.trigger("show_ellipsis")},hide_ellipsis:function(){this._data.core.themes.ellipsis=!1,this.get_container_ul().removeClass("jstree-ellipsis"),this.trigger("hide_ellipsis")},toggle_ellipsis:function(){this._data.core.themes.ellipsis?this.hide_ellipsis():this.show_ellipsis()},set_icon:function(c,d){var e,f,g,h;if(a.vakata.is_array(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.set_icon(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(h=c.icon,c.icon=d===!0||null===d||d===b||""===d?!0:d,g=this.get_node(c,!0).children(".jstree-anchor").children(".jstree-themeicon"),d===!1?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),this.hide_icon(c)):d===!0||null===d||d===b||""===d?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),h===!1&&this.show_icon(c)):-1===d.indexOf("/")&&-1===d.indexOf(".")?(g.removeClass(h).css("background",""),g.addClass(d+" jstree-themeicon-custom").attr("rel",d),h===!1&&this.show_icon(c)):(g.removeClass(h).css("background",""),g.addClass("jstree-themeicon-custom").css("background","url('"+d+"') center center no-repeat").attr("rel",d),h===!1&&this.show_icon(c)),!0):!1},get_icon:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.icon:!1},hide_icon:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.hide_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(b.icon=!1,this.get_node(b,!0).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(b){var c,d,e;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.show_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(e=this.get_node(b,!0),b.icon=e.length?e.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):!0,b.icon||(b.icon=!0),e.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},a.vakata={},a.vakata.attributes=function(b,c){b=a(b)[0];var d=c?{}:[];return b&&b.attributes&&a.each(b.attributes,function(b,e){-1===a.inArray(e.name.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==e.value&&""!==a.vakata.trim(e.value)&&(c?d[e.name]=e.value:d.push(e.name))}),d},a.vakata.array_unique=function(a){var c=[],d,e,f,g={};for(d=0,f=a.length;f>d;d++)g[a[d]]===b&&(c.push(a[d]),g[a[d]]=!0);return c},a.vakata.array_remove=function(a,b){return a.splice(b,1),a},a.vakata.array_remove_item=function(b,c){var d=a.inArray(c,b);return-1!==d?a.vakata.array_remove(b,d):b},a.vakata.array_filter=function(a,b,c,d,e){if(a.filter)return a.filter(b,c);d=[];for(e in a)~~e+""==e+""&&e>=0&&b.call(c,a[e],+e,a)&&d.push(a[e]);return d},a.vakata.trim=function(a){return String.prototype.trim?String.prototype.trim.call(a.toString()):a.toString().replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},a.vakata.is_function=function(a){return"function"==typeof a&&"number"!=typeof a.nodeType},a.vakata.is_array=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},Function.prototype.bind||(Function.prototype.bind=function(){var a=this,b=arguments[0],c=Array.prototype.slice.call(arguments,1);if("function"!=typeof a)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");return function(){var d=c.concat(Array.prototype.slice.call(arguments));return a.apply(b,d)}}),a.jstree.plugins.changed=function(a,b){var c=[];this.trigger=function(a,d){var e,f;if(d||(d={}),"changed"===a.replace(".jstree","")){d.changed={selected:[],deselected:[]};var g={};for(e=0,f=c.length;f>e;e++)g[c[e]]=1;for(e=0,f=d.selected.length;f>e;e++)g[d.selected[e]]?g[d.selected[e]]=2:d.changed.selected.push(d.selected[e]);for(e=0,f=c.length;f>e;e++)1===g[c[e]]&&d.changed.deselected.push(c[e]);c=d.selected.slice()}b.trigger.call(this,a,d)},this.refresh=function(a,d){return c=[],b.refresh.apply(this,arguments)}};var l=i.createElement("I");l.className="jstree-icon jstree-checkbox",l.setAttribute("role","presentation"),a.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0,cascade:"",tie_selection:!0,cascade_to_disabled:!0,cascade_to_hidden:!0},a.jstree.plugins.checkbox=function(c,d){this.bind=function(){d.bind.call(this),this._data.checkbox.uto=!1,this._data.checkbox.selected=[],this.settings.checkbox.three_state&&(this.settings.checkbox.cascade="up+down+undetermined"),this.element.on("init.jstree",function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked"),this.settings.checkbox.tie_selection&&this.element.addClass("jstree-checkbox-selection")}.bind(this)).on("loading.jstree",function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()}.bind(this)),-1!==this.settings.checkbox.cascade.indexOf("undetermined")&&this.element.on("changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(this._undetermined.bind(this),50)}.bind(this)),this.settings.checkbox.tie_selection||this.element.on("model.jstree",function(a,b){var c=this._model.data,d=c[b.parent],e=b.nodes,f,g;for(f=0,g=e.length;g>f;f++)c[e[f]].state.checked=c[e[f]].state.checked||c[e[f]].original&&c[e[f]].original.state&&c[e[f]].original.state.checked,c[e[f]].state.checked&&this._data.checkbox.selected.push(e[f])}.bind(this)),(-1!==this.settings.checkbox.cascade.indexOf("up")||-1!==this.settings.checkbox.cascade.indexOf("down"))&&this.element.on("model.jstree",function(b,c){var d=this._model.data,e=d[c.parent],f=c.nodes,g=[],h,i,j,k,l,m,n=this.settings.checkbox.cascade,o=this.settings.checkbox.tie_selection;if(-1!==n.indexOf("down"))if(e.state[o?"selected":"checked"]){for(i=0,j=f.length;j>i;i++)d[f[i]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(f)}else for(i=0,j=f.length;j>i;i++)if(d[f[i]].state[o?"selected":"checked"]){for(k=0,l=d[f[i]].children_d.length;l>k;k++)d[d[f[i]].children_d[k]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(d[f[i]].children_d)}if(-1!==n.indexOf("up")){for(i=0,j=e.children_d.length;j>i;i++)d[e.children_d[i]].children.length||g.push(d[e.children_d[i]].parent);for(g=a.vakata.array_unique(g),k=0,l=g.length;l>k;k++){e=d[g[k]];while(e&&e.id!==a.jstree.root){for(h=0,i=0,j=e.children.length;j>i;i++)h+=d[e.children[i]].state[o?"selected":"checked"];if(h!==j)break;e.state[o?"selected":"checked"]=!0,this._data[o?"core":"checkbox"].selected.push(e.id),m=this.get_node(e,!0),m&&m.length&&m.attr("aria-selected",!0).children(".jstree-anchor").addClass(o?"jstree-clicked":"jstree-checked"),e=this.get_node(e.parent)}}}this._data[o?"core":"checkbox"].selected=a.vakata.array_unique(this._data[o?"core":"checkbox"].selected)}.bind(this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",function(b,c){var d=this,e=c.node,f=this._model.data,g=this.get_node(e.parent),h,i,j,k,l=this.settings.checkbox.cascade,m=this.settings.checkbox.tie_selection,n={},o=this._data[m?"core":"checkbox"].selected;for(h=0,i=o.length;i>h;h++)n[o[h]]=!0;if(-1!==l.indexOf("down")){var p=this._cascade_new_checked_state(e.id,!0),q=e.children_d.concat(e.id);for(h=0,i=q.length;i>h;h++)p.indexOf(q[h])>-1?n[q[h]]=!0:delete n[q[h]]}if(-1!==l.indexOf("up"))while(g&&g.id!==a.jstree.root){for(j=0,h=0,i=g.children.length;i>h;h++)j+=f[g.children[h]].state[m?"selected":"checked"];if(j!==i)break;g.state[m?"selected":"checked"]=!0,n[g.id]=!0,k=this.get_node(g,!0),k&&k.length&&k.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),g=this.get_node(g.parent)}o=[];for(h in n)n.hasOwnProperty(h)&&o.push(h);this._data[m?"core":"checkbox"].selected=o}.bind(this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",function(b,c){var d=this.get_node(a.jstree.root),e=this._model.data,f,g,h;for(f=0,g=d.children_d.length;g>f;f++)h=e[d.children_d[f]],h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1)}.bind(this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",function(b,c){var d=this,e=c.node,f=this.get_node(e,!0),g,h,i,j=this.settings.checkbox.cascade,k=this.settings.checkbox.tie_selection,l=this._data[k?"core":"checkbox"].selected,m={},n=[],o=e.children_d.concat(e.id);if(-1!==j.indexOf("down")){var p=this._cascade_new_checked_state(e.id,!1);l=a.vakata.array_filter(l,function(a){return-1===o.indexOf(a)||p.indexOf(a)>-1})}if(-1!==j.indexOf("up")&&-1===l.indexOf(e.id)){for(g=0,h=e.parents.length;h>g;g++)i=this._model.data[e.parents[g]],i.state[k?"selected":"checked"]=!1,i&&i.original&&i.original.state&&i.original.state.undetermined&&(i.original.state.undetermined=!1),i=this.get_node(e.parents[g],!0),i&&i.length&&i.attr("aria-selected",!1).children(".jstree-anchor").removeClass(k?"jstree-clicked":"jstree-checked");l=a.vakata.array_filter(l,function(a){return-1===e.parents.indexOf(a)})}this._data[k?"core":"checkbox"].selected=l}.bind(this)),-1!==this.settings.checkbox.cascade.indexOf("up")&&this.element.on("delete_node.jstree",function(b,c){var d=this.get_node(c.parent),e=this._model.data,f,g,h,i,j=this.settings.checkbox.tie_selection;while(d&&d.id!==a.jstree.root&&!d.state[j?"selected":"checked"]){for(h=0,f=0,g=d.children.length;g>f;f++)h+=e[d.children[f]].state[j?"selected":"checked"];if(!(g>0&&h===g))break;d.state[j?"selected":"checked"]=!0,this._data[j?"core":"checkbox"].selected.push(d.id),i=this.get_node(d,!0),i&&i.length&&i.attr("aria-selected",!0).children(".jstree-anchor").addClass(j?"jstree-clicked":"jstree-checked"),d=this.get_node(d.parent)}}.bind(this)).on("move_node.jstree",function(b,c){var d=c.is_multi,e=c.old_parent,f=this.get_node(c.parent),g=this._model.data,h,i,j,k,l,m=this.settings.checkbox.tie_selection;if(!d){h=this.get_node(e);while(h&&h.id!==a.jstree.root&&!h.state[m?"selected":"checked"]){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(!(k>0&&i===k))break;h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),h=this.get_node(h.parent)}}h=f;while(h&&h.id!==a.jstree.root){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(i===k)h.state[m?"selected":"checked"]||(h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"));else{if(!h.state[m?"selected":"checked"])break;h.state[m?"selected":"checked"]=!1,this._data[m?"core":"checkbox"].selected=a.vakata.array_remove_item(this._data[m?"core":"checkbox"].selected,h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(m?"jstree-clicked":"jstree-checked")}h=this.get_node(h.parent)}}.bind(this))},this.get_undetermined=function(c){if(-1===this.settings.checkbox.cascade.indexOf("undetermined"))return[];var d,e,f,g,h={},i=this._model.data,j=this.settings.checkbox.tie_selection,k=this._data[j?"core":"checkbox"].selected,l=[],m=this,n=[];for(d=0,e=k.length;e>d;d++)if(i[k[d]]&&i[k[d]].parents)for(f=0,g=i[k[d]].parents.length;g>f;f++){if(h[i[k[d]].parents[f]]!==b)break;i[k[d]].parents[f]!==a.jstree.root&&(h[i[k[d]].parents[f]]=!0,l.push(i[k[d]].parents[f]))}for(this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var c=m.get_node(this),j;if(c)if(c.state.loaded){for(d=0,e=c.children_d.length;e>d;d++)if(j=i[c.children_d[d]],!j.state.loaded&&j.original&&j.original.state&&j.original.state.undetermined&&j.original.state.undetermined===!0)for(h[j.id]===b&&j.id!==a.jstree.root&&(h[j.id]=!0,l.push(j.id)),f=0,g=j.parents.length;g>f;f++)h[j.parents[f]]===b&&j.parents[f]!==a.jstree.root&&(h[j.parents[f]]=!0,l.push(j.parents[f]))}else if(c.original&&c.original.state&&c.original.state.undetermined&&c.original.state.undetermined===!0)for(h[c.id]===b&&c.id!==a.jstree.root&&(h[c.id]=!0,l.push(c.id)),f=0,g=c.parents.length;g>f;f++)h[c.parents[f]]===b&&c.parents[f]!==a.jstree.root&&(h[c.parents[f]]=!0,l.push(c.parents[f]))}),d=0,e=l.length;e>d;d++)i[l[d]].state[j?"selected":"checked"]||n.push(c?i[l[d]]:l[d]);return n},this._undetermined=function(){if(null!==this.element){var a=this.get_undetermined(!1),b,c,d;for(this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),b=0,c=a.length;c>b;b++)d=this.get_node(a[b],!0),d&&d.length&&d.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined")}},this.redraw_node=function(a,b,c,e){if(a=d.redraw_node.apply(this,arguments)){var f,g,h=null,i=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&(!this.settings.checkbox.tie_selection&&this._model.data[a.id].state.checked&&(h.className+=" jstree-checked"),i=l.cloneNode(!1),this._model.data[a.id].state.checkbox_disabled&&(i.className+=" jstree-checkbox-disabled"),h.insertBefore(i,h.childNodes[0]))}return c||-1===this.settings.checkbox.cascade.indexOf("undetermined")||(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(this._undetermined.bind(this),50)),a},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.get_container_ul().removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.get_container_ul().addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()},this.is_undetermined=function(b){b=this.get_node(b);var c=this.settings.checkbox.cascade,d,e,f=this.settings.checkbox.tie_selection,g=this._data[f?"core":"checkbox"].selected,h=this._model.data;if(!b||b.state[f?"selected":"checked"]===!0||-1===c.indexOf("undetermined")||-1===c.indexOf("down")&&-1===c.indexOf("up"))return!1;if(!b.state.loaded&&b.original.state.undetermined===!0)return!0;for(d=0,e=b.children_d.length;e>d;d++)if(-1!==a.inArray(b.children_d[d],g)||!h[b.children_d[d]].state.loaded&&h[b.children_d[d]].original.state.undetermined)return!0;return!1},this.disable_checkbox=function(b){var c,d,e;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled||(b.state.checkbox_disabled=!0,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-checkbox-disabled"),this.trigger("disable_checkbox",{node:b})))):!1},this.enable_checkbox=function(b){var c,d,e;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled&&(b.state.checkbox_disabled=!1,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").removeClass("jstree-checkbox-disabled"),this.trigger("enable_checkbox",{node:b})))):!1},this.activate_node=function(b,c){return a(c.target).hasClass("jstree-checkbox-disabled")?!1:(this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||a(c.target).hasClass("jstree-checkbox"))&&(c.ctrlKey=!0),this.settings.checkbox.tie_selection||!this.settings.checkbox.whole_node&&!a(c.target).hasClass("jstree-checkbox")?d.activate_node.call(this,b,c):this.is_disabled(b)?!1:(this.is_checked(b)?this.uncheck_node(b,c):this.check_node(b,c),void this.trigger("activate_node",{node:this.get_node(b)})))},this._cascade_new_checked_state=function(a,b){var c=this,d=this.settings.checkbox.tie_selection,e=this._model.data[a],f=[],g=[],h,i,j;if(!this.settings.checkbox.cascade_to_disabled&&e.state.disabled||!this.settings.checkbox.cascade_to_hidden&&e.state.hidden)j=this.get_checked_descendants(a),e.state[d?"selected":"checked"]&&j.push(e.id),f=f.concat(j);else{if(e.children)for(h=0,i=e.children.length;i>h;h++){var k=e.children[h];j=c._cascade_new_checked_state(k,b),f=f.concat(j),j.indexOf(k)>-1&&g.push(k)}var l=c.get_node(e,!0),m=g.length>0&&g.lengthe;e++)this.check_node(b[e],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(d=this.get_node(b,!0),void(b.state.checked||(b.state.checked=!0,this._data.checkbox.selected.push(b.id),d&&d.length&&d.children(".jstree-anchor").addClass("jstree-checked"),this.trigger("check_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.uncheck_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.deselect_node(b,!1,c);var d,e,f;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.uncheck_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.checked&&(b.state.checked=!1,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,b.id),f.length&&f.children(".jstree-anchor").removeClass("jstree-checked"),this.trigger("uncheck_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.check_all=function(){if(this.settings.checkbox.tie_selection)return this.select_all();var b=this._data.checkbox.selected.concat([]),c,d;for(this._data.checkbox.selected=this._model.data[a.jstree.root].children_d.concat(),c=0,d=this._data.checkbox.selected.length;d>c;c++)this._model.data[this._data.checkbox.selected[c]]&&(this._model.data[this._data.checkbox.selected[c]].state.checked=!0);this.redraw(!0),this.trigger("check_all",{selected:this._data.checkbox.selected})},this.uncheck_all=function(){if(this.settings.checkbox.tie_selection)return this.deselect_all();var a=this._data.checkbox.selected.concat([]),b,c;for(b=0,c=this._data.checkbox.selected.length;c>b;b++)this._model.data[this._data.checkbox.selected[b]]&&(this._model.data[this._data.checkbox.selected[b]].state.checked=!1);this._data.checkbox.selected=[],this.element.find(".jstree-checked").removeClass("jstree-checked"),this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:a})},this.is_checked=function(b){return this.settings.checkbox.tie_selection?this.is_selected(b):(b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.checked:!1)},this.get_checked=function(b){return this.settings.checkbox.tie_selection?this.get_selected(b):b?a.map(this._data.checkbox.selected,function(a){return this.get_node(a)}.bind(this)):this._data.checkbox.selected.slice()},this.get_top_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_top_selected(b);var c=this.get_checked(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,function(a){return this.get_node(a)}.bind(this)):c},this.get_bottom_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_bottom_selected(b);var c=this.get_checked(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,function(a){return this.get_node(a)}.bind(this)):d},this.load_node=function(b,c){var e,f,g,h,i,j;if(!a.vakata.is_array(b)&&!this.settings.checkbox.tie_selection&&(j=this.get_node(b),j&&j.state.loaded))for(e=0,f=j.children_d.length;f>e;e++)this._model.data[j.children_d[e]].state.checked&&(i=!0,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,j.children_d[e]));return d.load_node.apply(this,arguments)},this.get_state=function(){var a=d.get_state.apply(this,arguments);return this.settings.checkbox.tie_selection?a:(a.checkbox=this._data.checkbox.selected.slice(),a)},this.set_state=function(b,c){var e=d.set_state.apply(this,arguments);if(e&&b.checkbox){if(!this.settings.checkbox.tie_selection){this.uncheck_all();var f=this;a.each(b.checkbox,function(a,b){f.check_node(b)})}return delete b.checkbox,this.set_state(b,c),!1}return e},this.refresh=function(a,b){return this.settings.checkbox.tie_selection&&(this._data.checkbox.selected=[]),d.refresh.apply(this,arguments)}},a.jstree.defaults.conditionalselect=function(){return!0},a.jstree.plugins.conditionalselect=function(a,b){this.activate_node=function(a,c){return this.settings.conditionalselect.call(this,this.get_node(a),c)?b.activate_node.call(this,a,c):void 0}},a.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(b,c){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.create_node(d,{},"last",function(a){try{c.edit(a)}catch(b){setTimeout(function(){c.edit(a)},0)}})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.edit(d)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.delete_node(c.get_selected()):c.delete_node(d)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.cut(c.get_top_selected()):c.cut(d)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.copy(c.get_top_selected()):c.copy(d)}},paste:{separator_before:!1,icon:!1,_disabled:function(b){return!a.jstree.reference(b.reference).can_paste()},separator_after:!1,label:"Paste",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.paste(d)}}}}}}},a.jstree.plugins.contextmenu=function(c,d){this.bind=function(){d.bind.call(this);var b=0,c=null,e,f;this.element.on("init.jstree loading.jstree ready.jstree",function(){this.get_container_ul().addClass("jstree-contextmenu")}.bind(this)).on("contextmenu.jstree",".jstree-anchor",function(a,d){"input"!==a.target.tagName.toLowerCase()&&(a.preventDefault(),b=a.ctrlKey?+new Date:0,(d||c)&&(b=+new Date+1e4),c&&clearTimeout(c),this.is_loading(a.currentTarget)||this.show_contextmenu(a.currentTarget,a.pageX,a.pageY,a))}.bind(this)).on("click.jstree",".jstree-anchor",function(c){this._data.contextmenu.visible&&(!b||+new Date-b>250)&&a.vakata.context.hide(),b=0}.bind(this)).on("touchstart.jstree",".jstree-anchor",function(b){b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(e=b.originalEvent.changedTouches[0].clientX,f=b.originalEvent.changedTouches[0].clientY,c=setTimeout(function(){a(b.currentTarget).trigger("contextmenu",!0)},750))}).on("touchmove.vakata.jstree",function(b){c&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(Math.abs(e-b.originalEvent.changedTouches[0].clientX)>10||Math.abs(f-b.originalEvent.changedTouches[0].clientY)>10)&&(clearTimeout(c),a.vakata.context.hide())}).on("touchend.vakata.jstree",function(a){c&&clearTimeout(c)}),a(i).on("context_hide.vakata.jstree",function(b,c){this._data.contextmenu.visible=!1,a(c.reference).removeClass("jstree-context")}.bind(this))},this.teardown=function(){this._data.contextmenu.visible&&a.vakata.context.hide(),a(i).off("context_hide.vakata.jstree"),d.teardown.call(this)},this.show_contextmenu=function(c,d,e,f){if(c=this.get_node(c),!c||c.id===a.jstree.root)return!1;var g=this.settings.contextmenu,h=this.get_node(c,!0),i=h.children(".jstree-anchor"),j=!1,k=!1;(g.show_at_node||d===b||e===b)&&(j=i.offset(),d=j.left,e=j.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(c)&&this.activate_node(c,f),k=g.items,a.vakata.is_function(k)&&(k=k.call(this,c,function(a){this._show_contextmenu(c,d,e,a)}.bind(this))),a.isPlainObject(k)&&this._show_contextmenu(c,d,e,k)},this._show_contextmenu=function(b,c,d,e){ +var f=this.get_node(b,!0),g=f.children(".jstree-anchor");a(i).one("context_show.vakata.jstree",function(b,c){var d="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";a(c.element).addClass(d),g.addClass("jstree-context")}.bind(this)),this._data.contextmenu.visible=!0,a.vakata.context.show(g,{x:c,y:d},e),this.trigger("show_contextmenu",{node:b,x:c,y:d})}},function(a){var b=!1,c={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};a.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(b){a(i).triggerHandler("context_"+b+".vakata",{reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}})},_execute:function(b){return b=c.items[b],b&&(!b._disabled||a.vakata.is_function(b._disabled)&&!b._disabled({item:b,reference:c.reference,element:c.element}))&&b.action?b.action.call(null,{item:b,reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}}):!1},_parse:function(b,d){if(!b)return!1;d||(c.html="",c.items=[]);var e="",f=!1,g;return d&&(e+=""),d||(c.html=e,a.vakata.context._trigger("parse")),e.length>10?e:!1},_show_submenu:function(c){if(c=a(c),c.length&&c.children("ul").length){var d=c.children("ul"),e=c.offset().left,f=e+c.outerWidth(),g=c.offset().top,h=d.width(),i=d.height(),j=a(window).width()+a(window).scrollLeft(),k=a(window).height()+a(window).scrollTop();b?c[f-(h+10+c.outerWidth())<0?"addClass":"removeClass"]("vakata-context-left"):c[f+h>j&&e>j-f?"addClass":"removeClass"]("vakata-context-right"),g+i+10>k&&d.css("bottom","-1px"),c.hasClass("vakata-context-right")?h>e&&d.css("margin-right",e-h):h>j-f&&d.css("margin-left",j-f-h),d.show()}},show:function(d,e,f){var g,h,j,k,l,m,n,o,p=!0;switch(c.element&&c.element.length&&c.element.width(""),p){case!e&&!d:return!1;case!!e&&!!d:c.reference=d,c.position_x=e.x,c.position_y=e.y;break;case!e&&!!d:c.reference=d,g=d.offset(),c.position_x=g.left+d.outerHeight(),c.position_y=g.top;break;case!!e&&!d:c.position_x=e.x,c.position_y=e.y}d&&!f&&a(d).data("vakata_contextmenu")&&(f=a(d).data("vakata_contextmenu")),a.vakata.context._parse(f)&&c.element.html(c.html),c.items.length&&(c.element.appendTo(i.body),h=c.element,j=c.position_x,k=c.position_y,l=h.width(),m=h.height(),n=a(window).width()+a(window).scrollLeft(),o=a(window).height()+a(window).scrollTop(),b&&(j-=h.outerWidth()-a(d).outerWidth(),jn&&(j=n-(l+20)),k+m+20>o&&(k=o-(m+20)),c.element.css({left:j,top:k}).show().find("a").first().trigger("focus").parent().addClass("vakata-context-hover"),c.is_visible=!0,a.vakata.context._trigger("show"))},hide:function(){c.is_visible&&(c.element.hide().find("ul").hide().end().find(":focus").trigger("blur").end().detach(),c.is_visible=!1,a.vakata.context._trigger("hide"))}},a(function(){b="rtl"===a(i.body).css("direction");var d=!1;c.element=a("
      "),c.element.on("mouseenter","li",function(b){b.stopImmediatePropagation(),a.contains(this,b.relatedTarget)||(d&&clearTimeout(d),c.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),a(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),a.vakata.context._show_submenu(this))}).on("mouseleave","li",function(b){a.contains(this,b.relatedTarget)||a(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(b){a(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),a.vakata.context.settings.hide_onmouseleave&&(d=setTimeout(function(b){return function(){a.vakata.context.hide()}}(this),a.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(b){b.preventDefault(),a(this).trigger("blur").parent().hasClass("vakata-context-disabled")||a.vakata.context._execute(a(this).attr("rel"))===!1||a.vakata.context.hide()}).on("keydown","a",function(b){var d=null;switch(b.which){case 13:case 32:b.type="click",b.preventDefault(),a(b.currentTarget).trigger(b);break;case 37:c.is_visible&&(c.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 38:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),d.addClass("vakata-context-hover").children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 39:c.is_visible&&(c.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 40:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),d.addClass("vakata-context-hover").children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 27:a.vakata.context.hide(),b.preventDefault()}}).on("keydown",function(a){a.preventDefault();var b=c.element.find(".vakata-contextmenu-shortcut-"+a.which).parent();b.parent().not(".vakata-context-disabled")&&b.trigger("click")}),a(i).on("mousedown.vakata.jstree",function(b){c.is_visible&&c.element[0]!==b.target&&!a.contains(c.element[0],b.target)&&a.vakata.context.hide()}).on("context_show.vakata.jstree",function(a,d){c.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),b&&c.element.addClass("vakata-context-rtl").css("direction","rtl"),c.element.find("ul").hide().end()})})}(a),a.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0,drag_selection:!0,touch:!0,large_drop_target:!1,large_drag_target:!1,use_html5:!1};var m,n;a.jstree.plugins.dnd=function(b,c){this.init=function(a,b){c.init.call(this,a,b),this.settings.dnd.use_html5=this.settings.dnd.use_html5&&"draggable"in i.createElement("span")},this.bind=function(){c.bind.call(this),this.element.on(this.settings.dnd.use_html5?"dragstart.jstree":"mousedown.jstree touchstart.jstree",this.settings.dnd.large_drag_target?".jstree-node":".jstree-anchor",function(b){if(this.settings.dnd.large_drag_target&&a(b.target).closest(".jstree-node")[0]!==b.currentTarget)return!0;if("touchstart"===b.type&&(!this.settings.dnd.touch||"selected"===this.settings.dnd.touch&&!a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").hasClass("jstree-clicked")))return!0;var c=this.get_node(b.target),d=this.is_selected(c)&&this.settings.dnd.drag_selection?this.get_top_selected().length:1,e=d>1?d+" "+this.get_string("nodes"):this.get_text(b.currentTarget);if(this.settings.core.force_text&&(e=a.vakata.html.escape(e)),c&&c.id&&c.id!==a.jstree.root&&(1===b.which||"touchstart"===b.type||"dragstart"===b.type)&&(this.settings.dnd.is_draggable===!0||a.vakata.is_function(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,d>1?this.get_top_selected(!0):[c],b))){if(m={jstree:!0,origin:this,obj:this.get_node(c,!0),nodes:d>1?this.get_top_selected():[c.id]},n=b.currentTarget,!this.settings.dnd.use_html5)return this.element.trigger("mousedown.jstree"),a.vakata.dnd.start(b,m,'
      '+e+'+
      ');a.vakata.dnd._trigger("start",b,{helper:a(),element:n,data:m})}}.bind(this)),this.settings.dnd.use_html5&&this.element.on("dragover.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("move",b,{helper:a(),element:n,data:m}),!1}).on("drop.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("stop",b,{helper:a(),element:n,data:m}),!1}.bind(this))},this.redraw_node=function(a,b,d,e){if(a=c.redraw_node.apply(this,arguments),a&&this.settings.dnd.use_html5)if(this.settings.dnd.large_drag_target)a.setAttribute("draggable",!0);else{var f,g,h=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&h.setAttribute("draggable",!0)}return a}},a(function(){var c=!1,d=!1,e=!1,f=!1,g=a('
       
      ').hide();a(i).on("dragover.vakata.jstree",function(b){n&&a.vakata.dnd._trigger("move",b,{helper:a(),element:n,data:m})}).on("drop.vakata.jstree",function(b){n&&(a.vakata.dnd._trigger("stop",b,{helper:a(),element:n,data:m}),n=null,m=null)}).on("dnd_start.vakata.jstree",function(a,b){c=!1,e=!1,b&&b.data&&b.data.jstree&&g.appendTo(i.body)}).on("dnd_move.vakata.jstree",function(h,i){var j=i.event.target!==e.target;if(f&&(!i.event||"dragover"!==i.event.type||j)&&clearTimeout(f),i&&i.data&&i.data.jstree&&(!i.event.target.id||"jstree-marker"!==i.event.target.id)){e=i.event;var k=a.jstree.reference(i.event.target),l=!1,m=!1,n=!1,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F;if(k&&k._data&&k._data.dnd)if(g.attr("class","jstree-"+k.get_theme()+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")),D=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey)),i.helper.children().attr("class","jstree-"+k.get_theme()+" jstree-"+k.get_theme()+"-"+k.get_theme_variant()+" "+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy").first()[D?"show":"hide"](),i.event.target!==k.element[0]&&i.event.target!==k.get_container_ul()[0]||0!==k.get_container_ul().children().length){if(l=k.settings.dnd.large_drop_target?a(i.event.target).closest(".jstree-node").children(".jstree-anchor"):a(i.event.target).closest(".jstree-anchor"),l&&l.length&&l.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(m=l.offset(),n=(i.event.pageY!==b?i.event.pageY:i.event.originalEvent.pageY)-m.top,r=l.outerHeight(),u=r/3>n?["b","i","a"]:n>r-r/3?["a","i","b"]:n>r/2?["i","a","b"]:["i","b","a"],a.each(u,function(b,e){switch(e){case"b":p=m.left-6,q=m.top,s=k.get_parent(l),t=l.parent().index(),F="jstree-below";break;case"i":B=k.settings.dnd.inside_pos,C=k.get_node(l.parent()),p=m.left-2,q=m.top+r/2+1,s=C.id,t="first"===B?0:"last"===B?C.children.length:Math.min(B,C.children.length),F="jstree-inside";break;case"a":p=m.left-6,q=m.top+r,s=k.get_parent(l),t=l.parent().index()+1,F="jstree-above"}for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(y=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",z=t,"move_node"===y&&"a"===e&&i.data.origin&&i.data.origin===k&&s===k.get_parent(i.data.nodes[w])&&(A=k.get_node(s),z>a.inArray(i.data.nodes[w],A.children)&&(z-=1)),v=v&&(k&&k.settings&&k.settings.dnd&&k.settings.dnd.check_while_dragging===!1||k.check(y,i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],s,z,{dnd:!0,ref:k.get_node(l.parent()),pos:e,origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin})),!v){k&&k.last_error&&(d=k.last_error());break}return"i"===e&&l.parent().is(".jstree-closed")&&k.settings.dnd.open_timeout&&(!i.event||"dragover"!==i.event.type||j)&&(f&&clearTimeout(f),f=setTimeout(function(a,b){return function(){a.open_node(b)}}(k,l),k.settings.dnd.open_timeout)),v?(E=k.get_node(s,!0),E.hasClass(".jstree-dnd-parent")||(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),E.addClass("jstree-dnd-parent")),c={ins:k,par:s,pos:"i"!==e||"last"!==B||0!==t||k.is_loaded(C)?t:"last"},g.css({left:p+"px",top:q+"px"}).show(),g.removeClass("jstree-above jstree-inside jstree-below").addClass(F),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"),d={},u=!0,!1):void 0}),u===!0))return}else{for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(v=v&&k.check(i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],a.jstree.root,"last",{dnd:!0,ref:k.get_node(a.jstree.root),pos:"i",origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin}),!v)break;if(v)return c={ins:k,par:a.jstree.root,pos:"last"},g.hide(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),void(i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"))}a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),c=!1,i.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),i.event.originalEvent&&i.event.originalEvent.dataTransfer,g.hide()}}).on("dnd_scroll.vakata.jstree",function(a,b){b&&b.data&&b.data.jstree&&(g.hide(),c=!1,e=!1,b.helper.find(".jstree-icon").first().removeClass("jstree-ok").addClass("jstree-er"))}).on("dnd_stop.vakata.jstree",function(b,h){if(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),f&&clearTimeout(f),h&&h.data&&h.data.jstree){g.hide().detach();var i,j,k=[];if(c){for(i=0,j=h.data.nodes.length;j>i;i++)k[i]=h.data.origin?h.data.origin.get_node(h.data.nodes[i]):h.data.nodes[i];c.ins[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(h.event.metaKey||h.event.ctrlKey))?"copy_node":"move_node"](k,c.par,c.pos,!1,!1,!1,h.data.origin)}else i=a(h.event.target).closest(".jstree"),i.length&&d&&d.error&&"check"===d.error&&(i=i.jstree(!0),i&&i.settings.core.error.call(this,d));e=!1,c=!1}}).on("keyup.jstree keydown.jstree",function(b,h){h=a.vakata.dnd._get(),h&&h.data&&h.data.jstree&&("keyup"===b.type&&27===b.which?(f&&clearTimeout(f),c=!1,d=!1,e=!1,f=!1,g.hide().detach(),a.vakata.dnd._clean()):(h.helper.find(".jstree-copy").first()[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(b.metaKey||b.ctrlKey))?"show":"hide"](),e&&(e.metaKey=b.metaKey,e.ctrlKey=b.ctrlKey,a.vakata.dnd._trigger("move",e))))})}),function(a){a.vakata.html={div:a("
      "),escape:function(b){return a.vakata.html.div.text(b).html()},strip:function(b){return a.vakata.html.div.empty().append(a.parseHTML(b)).text()}};var c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1};a.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:10},_trigger:function(c,d,e){e===b&&(e=a.vakata.dnd._get()),e.event=d,a(i).triggerHandler("dnd_"+c+".vakata",e)},_get:function(){return{data:c.data,element:c.element,helper:c.helper}},_clean:function(){c.helper&&c.helper.remove(),c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1},n=null,a(i).off("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).off("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop)},_scroll:function(b){if(!c.scroll_e||!c.scroll_l&&!c.scroll_t)return c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),!1;if(!c.scroll_i)return c.scroll_i=setInterval(a.vakata.dnd._scroll,100),!1;if(b===!0)return!1;var d=c.scroll_e.scrollTop(),e=c.scroll_e.scrollLeft();c.scroll_e.scrollTop(d+c.scroll_t*a.vakata.dnd.settings.scroll_speed),c.scroll_e.scrollLeft(e+c.scroll_l*a.vakata.dnd.settings.scroll_speed),(d!==c.scroll_e.scrollTop()||e!==c.scroll_e.scrollLeft())&&a.vakata.dnd._trigger("scroll",c.scroll_e)},start:function(b,d,e){"touchstart"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag&&a.vakata.dnd.stop({});try{b.currentTarget.unselectable="on",b.currentTarget.onselectstart=function(){return!1},b.currentTarget.style&&(b.currentTarget.style.touchAction="none",b.currentTarget.style.msTouchAction="none",b.currentTarget.style.MozUserSelect="none")}catch(f){}return c.init_x=b.pageX,c.init_y=b.pageY,c.data=d,c.is_down=!0,c.element=b.currentTarget,c.target=b.target,c.is_touch="touchstart"===b.type,e!==!1&&(c.helper=a("
      ").html(e).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),a(i).on("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).on("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop),!1},drag:function(b){if("touchmove"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_down){if(!c.is_drag){if(!(Math.abs(b.pageX-c.init_x)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)||Math.abs(b.pageY-c.init_y)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)))return;c.helper&&(c.helper.appendTo(i.body),c.helper_w=c.helper.outerWidth()),c.is_drag=!0,a(c.target).one("click.vakata",!1),a.vakata.dnd._trigger("start",b)}var d=!1,e=!1,f=!1,g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n=!1;return c.scroll_t=0,c.scroll_l=0,c.scroll_e=!1,a(a(b.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(a(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var d=a(this),e=d.offset();return this.scrollHeight>this.offsetHeight&&(e.top+d.height()-b.pageYthis.offsetWidth&&(e.left+d.width()-b.pageXg&&b.pageY-kg&&g-(b.pageY-k)j&&b.pageX-lj&&j-(b.pageX-l)f&&(m=f-50),h&&n+c.helper_w>h&&(n=h-(c.helper_w+2)),c.helper.css({left:n+"px",top:m+"px"})),a.vakata.dnd._trigger("move",b),!1}},stop:function(b){if("touchend"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag)b.target!==c.target&&a(c.target).off("click.vakata"),a.vakata.dnd._trigger("stop",b);else if("touchend"===b.type&&b.target===c.target){var d=setTimeout(function(){a(b.target).trigger("click")},100);a(b.target).one("click",function(){d&&clearTimeout(d)})}return a.vakata.dnd._clean(),!1}}}(a),a.jstree.defaults.massload=null,a.jstree.plugins.massload=function(b,c){this.init=function(a,b){this._data.massload={},c.init.call(this,a,b)},this._load_nodes=function(b,d,e,f){var g=this.settings.massload,h=[],i=this._model.data,j,k,l;if(!e){for(j=0,k=b.length;k>j;j++)(!i[b[j]]||!i[b[j]].state.loaded&&!i[b[j]].state.failed||f)&&(h.push(b[j]),l=this.get_node(b[j],!0),l&&l.length&&l.addClass("jstree-loading").attr("aria-busy",!0));if(this._data.massload={},h.length){if(a.vakata.is_function(g))return g.call(this,h,function(a){var g,h;if(a)for(g in a)a.hasOwnProperty(g)&&(this._data.massload[g]=a[g]);for(g=0,h=b.length;h>g;g++)l=this.get_node(b[g],!0),l&&l.length&&l.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)}.bind(this));if("object"==typeof g&&g&&g.url)return g=a.extend(!0,{},g),a.vakata.is_function(g.url)&&(g.url=g.url.call(this,h)),a.vakata.is_function(g.data)&&(g.data=g.data.call(this,h)),a.ajax(g).done(function(a,g,h){var i,j;if(a)for(i in a)a.hasOwnProperty(i)&&(this._data.massload[i]=a[i]);for(i=0,j=b.length;j>i;i++)l=this.get_node(b[i],!0),l&&l.length&&l.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)}.bind(this)).fail(function(a){c._load_nodes.call(this,b,d,e,f)}.bind(this))}}return c._load_nodes.call(this,b,d,e,f)},this._load_node=function(b,d){var e=this._data.massload[b.id],f=null,g;return e?(f=this["string"==typeof e?"_append_html_data":"_append_json_data"](b,"string"==typeof e?a(a.parseHTML(e)).filter(function(){return 3!==this.nodeType}):e,function(a){d.call(this,a)}),g=this.get_node(b.id,!0),g&&g.length&&g.removeClass("jstree-loading").attr("aria-busy",!1),delete this._data.massload[b.id],f):c._load_node.call(this,b,d)}},a.jstree.defaults.search={ajax:!1,fuzzy:!1,case_sensitive:!1,show_only_matches:!1,show_only_matches_children:!1,close_opened_onclear:!0,search_leaves_only:!1,search_callback:!1},a.jstree.plugins.search=function(c,d){this.bind=function(){d.bind.call(this),this._data.search.str="",this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=!1,this._data.search.smc=!1,this._data.search.hdn=[],this.element.on("search.jstree",function(b,c){if(this._data.search.som&&c.res.length){var d=this._model.data,e,f,g=[],h,i;for(e=0,f=c.res.length;f>e;e++)if(d[c.res[e]]&&!d[c.res[e]].state.hidden&&(g.push(c.res[e]),g=g.concat(d[c.res[e]].parents),this._data.search.smc))for(h=0,i=d[c.res[e]].children_d.length;i>h;h++)d[d[c.res[e]].children_d[h]]&&!d[d[c.res[e]].children_d[h]].state.hidden&&g.push(d[c.res[e]].children_d[h]);g=a.vakata.array_remove_item(a.vakata.array_unique(g),a.jstree.root),this._data.search.hdn=this.hide_all(!0),this.show_node(g,!0),this.redraw(!0)}}.bind(this)).on("clear_search.jstree",function(a,b){this._data.search.som&&b.res.length&&(this.show_node(this._data.search.hdn,!0),this.redraw(!0))}.bind(this))},this.search=function(c,d,e,f,g,h){if(c===!1||""===a.vakata.trim(c.toString()))return this.clear_search();f=this.get_node(f),f=f&&f.id?f.id:null,c=c.toString();var i=this.settings.search,j=i.ajax?i.ajax:!1,k=this._model.data,l=null,m=[],n=[],o,p;if(this._data.search.res.length&&!g&&this.clear_search(),e===b&&(e=i.show_only_matches),h===b&&(h=i.show_only_matches_children),!d&&j!==!1)return a.vakata.is_function(j)?j.call(this,c,function(b){b&&b.d&&(b=b.d),this._load_nodes(a.vakata.is_array(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})}.bind(this),f):(j=a.extend({},j),j.data||(j.data={}),j.data.str=c,f&&(j.data.inside=f),this._data.search.lastRequest&&this._data.search.lastRequest.abort(),this._data.search.lastRequest=a.ajax(j).fail(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(j)},this.settings.core.error.call(this,this._data.core.last_error)}.bind(this)).done(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.vakata.is_array(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})}.bind(this)),this._data.search.lastRequest);if(g||(this._data.search.str=c,this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=e,this._data.search.smc=h),l=new a.vakata.search(c,!0,{caseSensitive:i.case_sensitive,fuzzy:i.fuzzy}),a.each(k[f?f:a.jstree.root].children_d,function(a,b){var d=k[b];d.text&&!d.state.hidden&&(!i.search_leaves_only||d.state.loaded&&0===d.children.length)&&(i.search_callback&&i.search_callback.call(this,c,d)||!i.search_callback&&l.search(d.text).isMatch)&&(m.push(b),n=n.concat(d.parents))}),m.length){for(n=a.vakata.array_unique(n),o=0,p=n.length;p>o;o++)n[o]!==a.jstree.root&&k[n[o]]&&this.open_node(n[o],null,0)===!0&&this._data.search.opn.push(n[o]);g?(this._data.search.dom=this._data.search.dom.add(a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #")))),this._data.search.res=a.vakata.array_unique(this._data.search.res.concat(m))):(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.res=m),this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:c,res:this._data.search.res,show_only_matches:e})},this.clear_search=function(){this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.res.length&&(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(this._data.search.res,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search")),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=a()},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments),b&&-1!==a.inArray(b.id,this._data.search.res)){var g,h,i=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(i.className+=" jstree-search")}return b}},function(a){a.vakata.search=function(b,c,d){d=d||{},d=a.extend({},a.vakata.search.defaults,d),d.fuzzy!==!1&&(d.fuzzy=!0),b=d.caseSensitive?b:b.toLowerCase();var e=d.location,f=d.distance,g=d.threshold,h=b.length,i,j,k,l;return h>32&&(d.fuzzy=!1),d.fuzzy&&(i=1<c;c++)a[b.charAt(c)]=0;for(c=0;h>c;c++)a[b.charAt(c)]|=1<c;c++){o=0,p=q;while(p>o)k(c,e+p)<=m?o=p:q=p,p=Math.floor((q-o)/2+o);for(q=p,s=Math.max(1,e-p+1),t=Math.min(e+p,l)+h,u=new Array(t+2),u[t+1]=(1<=s;f--)if(v=j[a.charAt(f-1)],0===c?u[f]=(u[f+1]<<1|1)&v:u[f]=(u[f+1]<<1|1)&v|((r[f+1]|r[f])<<1|1)|r[f+1],u[f]&i&&(w=k(c,f-1),m>=w)){if(m=w,n=f-1,x.push(n),!(n>e))break;s=Math.max(1,2*e-n)}if(k(c+1,e)>m)break;r=u}return{isMatch:n>=0,score:w}},c===!0?{search:l}:l(c)},a.vakata.search.defaults={location:0,distance:100,threshold:.6,fuzzy:!1,caseSensitive:!1}}(a),a.jstree.defaults.sort=function(a,b){return this.get_text(a)>this.get_text(b)?1:-1},a.jstree.plugins.sort=function(a,b){this.bind=function(){b.bind.call(this),this.element.on("model.jstree",function(a,b){this.sort(b.parent,!0)}.bind(this)).on("rename_node.jstree create_node.jstree",function(a,b){this.sort(b.parent||b.node.parent,!1),this.redraw_node(b.parent||b.node.parent,!0)}.bind(this)).on("move_node.jstree copy_node.jstree",function(a,b){this.sort(b.parent,!1),this.redraw_node(b.parent,!0)}.bind(this))},this.sort=function(a,b){var c,d;if(a=this.get_node(a),a&&a.children&&a.children.length&&(a.children.sort(this.settings.sort.bind(this)),b))for(c=0,d=a.children_d.length;d>c;c++)this.sort(a.children_d[c],!1)}};var o=!1;a.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree",ttl:!1,filter:!1,preserve_loaded:!1},a.jstree.plugins.state=function(b,c){this.bind=function(){c.bind.call(this);var a=function(){this.element.on(this.settings.state.events,function(){o&&clearTimeout(o),o=setTimeout(function(){this.save_state()}.bind(this),100)}.bind(this)),this.trigger("state_ready")}.bind(this);this.element.on("ready.jstree",function(b,c){this.element.one("restore_state.jstree",a),this.restore_state()||a()}.bind(this))},this.save_state=function(){var b=this.get_state();this.settings.state.preserve_loaded||delete b.core.loaded;var c={state:b,ttl:this.settings.state.ttl,sec:+new Date};a.vakata.storage.set(this.settings.state.key,JSON.stringify(c))},this.restore_state=function(){var b=a.vakata.storage.get(this.settings.state.key);if(b)try{b=JSON.parse(b)}catch(c){return!1}return b&&b.ttl&&b.sec&&+new Date-b.sec>b.ttl?!1:(b&&b.state&&(b=b.state),b&&a.vakata.is_function(this.settings.state.filter)&&(b=this.settings.state.filter.call(this,b)),b?(this.settings.state.preserve_loaded||delete b.core.loaded,this.element.one("set_state.jstree",function(c,d){d.instance.trigger("restore_state",{state:a.extend(!0,{},b)})}),this.set_state(b),!0):!1)},this.clear_state=function(){return a.vakata.storage.del(this.settings.state.key)}},function(a,b){a.vakata.storage={set:function(a,b){return window.localStorage.setItem(a,b)},get:function(a){return window.localStorage.getItem(a)},del:function(a){return window.localStorage.removeItem(a)}}}(a),a.jstree.defaults.types={ +"default":{}},a.jstree.defaults.types[a.jstree.root]={},a.jstree.plugins.types=function(c,d){this.init=function(c,e){var f,g;if(e&&e.types&&e.types["default"])for(f in e.types)if("default"!==f&&f!==a.jstree.root&&e.types.hasOwnProperty(f))for(g in e.types["default"])e.types["default"].hasOwnProperty(g)&&e.types[f][g]===b&&(e.types[f][g]=e.types["default"][g]);d.init.call(this,c,e),this._model.data[a.jstree.root].type=a.jstree.root},this.refresh=function(b,c){d.refresh.call(this,b,c),this._model.data[a.jstree.root].type=a.jstree.root},this.bind=function(){this.element.on("model.jstree",function(c,d){var e=this._model.data,f=d.nodes,g=this.settings.types,h,i,j="default",k;for(h=0,i=f.length;i>h;h++){if(j="default",e[f[h]].original&&e[f[h]].original.type&&g[e[f[h]].original.type]&&(j=e[f[h]].original.type),e[f[h]].data&&e[f[h]].data.jstree&&e[f[h]].data.jstree.type&&g[e[f[h]].data.jstree.type]&&(j=e[f[h]].data.jstree.type),e[f[h]].type=j,e[f[h]].icon===!0&&g[j].icon!==b&&(e[f[h]].icon=g[j].icon),g[j].li_attr!==b&&"object"==typeof g[j].li_attr)for(k in g[j].li_attr)if(g[j].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].li_attr[k]===b?e[f[h]].li_attr[k]=g[j].li_attr[k]:"class"===k&&(e[f[h]].li_attr["class"]=g[j].li_attr["class"]+" "+e[f[h]].li_attr["class"])}if(g[j].a_attr!==b&&"object"==typeof g[j].a_attr)for(k in g[j].a_attr)if(g[j].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].a_attr[k]===b?e[f[h]].a_attr[k]=g[j].a_attr[k]:"href"===k&&"#"===e[f[h]].a_attr[k]?e[f[h]].a_attr.href=g[j].a_attr.href:"class"===k&&(e[f[h]].a_attr["class"]=g[j].a_attr["class"]+" "+e[f[h]].a_attr["class"])}}e[a.jstree.root].type=a.jstree.root}.bind(this)),d.bind.call(this)},this.get_json=function(b,c,e){var f,g,h=this._model.data,i=c?a.extend(!0,{},c,{no_id:!1}):{},j=d.get_json.call(this,b,i,e);if(j===!1)return!1;if(a.vakata.is_array(j))for(f=0,g=j.length;g>f;f++)j[f].type=j[f].id&&h[j[f].id]&&h[j[f].id].type?h[j[f].id].type:"default",c&&c.no_id&&(delete j[f].id,j[f].li_attr&&j[f].li_attr.id&&delete j[f].li_attr.id,j[f].a_attr&&j[f].a_attr.id&&delete j[f].a_attr.id);else j.type=j.id&&h[j.id]&&h[j.id].type?h[j.id].type:"default",c&&c.no_id&&(j=this._delete_ids(j));return j},this._delete_ids=function(b){if(a.vakata.is_array(b)){for(var c=0,d=b.length;d>c;c++)b[c]=this._delete_ids(b[c]);return b}return delete b.id,b.li_attr&&b.li_attr.id&&delete b.li_attr.id,b.a_attr&&b.a_attr.id&&delete b.a_attr.id,b.children&&a.vakata.is_array(b.children)&&(b.children=this._delete_ids(b.children)),b},this.check=function(c,e,f,g,h){if(d.check.call(this,c,e,f,g,h)===!1)return!1;e=e&&e.id?e:this.get_node(e),f=f&&f.id?f:this.get_node(f);var i=e&&e.id?h&&h.origin?h.origin:a.jstree.reference(e.id):null,j,k,l,m;switch(i=i&&i._model&&i._model.data?i._model.data:null,c){case"create_node":case"move_node":case"copy_node":if("move_node"!==c||-1===a.inArray(e.id,f.children)){if(j=this.get_rules(f),j.max_children!==b&&-1!==j.max_children&&j.max_children===f.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(j.valid_children!==b&&-1!==j.valid_children&&-1===a.inArray(e.type||"default",j.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(i&&e.children_d&&e.parents){for(k=0,l=0,m=e.children_d.length;m>l;l++)k=Math.max(k,i[e.children_d[l]].parents.length);k=k-e.parents.length+1}(0>=k||k===b)&&(k=1);do{if(j.max_depth!==b&&-1!==j.max_depth&&j.max_depthg;g++)this.set_type(c[g],d);return!0}if(f=this.settings.types,c=this.get_node(c),!f[d]||!c)return!1;if(l=this.get_node(c,!0),l&&l.length&&(m=l.children(".jstree-anchor")),i=c.type,j=this.get_icon(c),c.type=d,(j===!0||!f[i]||f[i].icon!==b&&j===f[i].icon)&&this.set_icon(c,f[d].icon!==b?f[d].icon:!0),f[i]&&f[i].li_attr!==b&&"object"==typeof f[i].li_attr)for(k in f[i].li_attr)if(f[i].li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].li_attr["class"]=(e[c.id].li_attr["class"]||"").replace(f[i].li_attr[k],""),l&&l.removeClass(f[i].li_attr[k])):e[c.id].li_attr[k]===f[i].li_attr[k]&&(e[c.id].li_attr[k]=null,l&&l.removeAttr(k))}if(f[i]&&f[i].a_attr!==b&&"object"==typeof f[i].a_attr)for(k in f[i].a_attr)if(f[i].a_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].a_attr["class"]=(e[c.id].a_attr["class"]||"").replace(f[i].a_attr[k],""),m&&m.removeClass(f[i].a_attr[k])):e[c.id].a_attr[k]===f[i].a_attr[k]&&("href"===k?(e[c.id].a_attr[k]="#",m&&m.attr("href","#")):(delete e[c.id].a_attr[k],m&&m.removeAttr(k)))}if(f[d].li_attr!==b&&"object"==typeof f[d].li_attr)for(k in f[d].li_attr)if(f[d].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].li_attr[k]===b?(e[c.id].li_attr[k]=f[d].li_attr[k],l&&("class"===k?l.addClass(f[d].li_attr[k]):l.attr(k,f[d].li_attr[k]))):"class"===k&&(e[c.id].li_attr["class"]=f[d].li_attr[k]+" "+e[c.id].li_attr["class"],l&&l.addClass(f[d].li_attr[k]))}if(f[d].a_attr!==b&&"object"==typeof f[d].a_attr)for(k in f[d].a_attr)if(f[d].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].a_attr[k]===b?(e[c.id].a_attr[k]=f[d].a_attr[k],m&&("class"===k?m.addClass(f[d].a_attr[k]):m.attr(k,f[d].a_attr[k]))):"href"===k&&"#"===e[c.id].a_attr[k]?(e[c.id].a_attr.href=f[d].a_attr.href,m&&m.attr("href",f[d].a_attr.href)):"class"===k&&(e[c.id].a_attr["class"]=f[d].a_attr["class"]+" "+e[c.id].a_attr["class"],m&&m.addClass(f[d].a_attr[k]))}return!0}},a.jstree.defaults.unique={case_sensitive:!1,trim_whitespace:!1,duplicate:function(a,b){return a+" ("+b+")"}},a.jstree.plugins.unique=function(c,d){this.check=function(b,c,e,f,g){if(d.check.call(this,b,c,e,f,g)===!1)return!1;if(c=c&&c.id?c:this.get_node(c),e=e&&e.id?e:this.get_node(e),!e||!e.children)return!0;var h="rename_node"===b?f:c.text,i=[],j=this.settings.unique.case_sensitive,k=this.settings.unique.trim_whitespace,l=this._model.data,m,n,o;for(m=0,n=e.children.length;n>m;m++)o=l[e.children[m]].text,j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),i.push(o);switch(j||(h=h.toLowerCase()),k&&(h=h.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),b){case"delete_node":return!0;case"rename_node":return o=c.text||"",j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),m=-1===a.inArray(h,i)||c.text&&o===h,m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"create_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"copy_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"move_node":return m=c.parent===e.id&&(!g||!g.is_multi)||-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m}return!0},this.create_node=function(c,e,f,g,h){if(!e||e.text===b){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return d.create_node.call(this,c,e,f,g,h);if(f=f===b?"last":f,!f.toString().match(/^(before|after)$/)&&!h&&!this.is_loaded(c))return d.create_node.call(this,c,e,f,g,h);e||(e={});var i,j,k,l,m,n=this._model.data,o=this.settings.unique.case_sensitive,p=this.settings.unique.trim_whitespace,q=this.settings.unique.duplicate,r;for(j=i=this.get_string("New node"),k=[],l=0,m=c.children.length;m>l;l++)r=n[c.children[l]].text,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),k.push(r);l=1,r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));while(-1!==a.inArray(r,k))j=q.call(this,i,++l).toString(),r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));e.text=j}return d.create_node.call(this,c,e,f,g,h)}};var p=i.createElement("DIV");if(p.setAttribute("unselectable","on"),p.setAttribute("role","presentation"),p.className="jstree-wholerow",p.innerHTML=" ",a.jstree.plugins.wholerow=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("ready.jstree set_state.jstree",function(){this.hide_dots()}.bind(this)).on("init.jstree loading.jstree ready.jstree",function(){this.get_container_ul().addClass("jstree-wholerow-ul")}.bind(this)).on("deselect_all.jstree",function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")}.bind(this)).on("changed.jstree",function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var c=!1,d,e;for(d=0,e=b.selected.length;e>d;d++)c=this.get_node(b.selected[d],!0),c&&c.length&&c.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")}.bind(this)).on("open_node.jstree",function(a,b){this.get_node(b.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")}.bind(this)).on("hover_node.jstree dehover_node.jstree",function(a,b){"hover_node"===a.type&&this.is_disabled(b.node)||this.get_node(b.node,!0).children(".jstree-wholerow")["hover_node"===a.type?"addClass":"removeClass"]("jstree-wholerow-hovered")}.bind(this)).on("contextmenu.jstree",".jstree-wholerow",function(b){if(this._data.contextmenu){b.preventDefault();var c=a.Event("contextmenu",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,pageX:b.pageX,pageY:b.pageY});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c)}}.bind(this)).on("click.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).trigger("focus")}).on("dblclick.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("dblclick",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).trigger("focus")}).on("click.jstree",".jstree-leaf > .jstree-ocl",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).trigger("focus")}.bind(this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",function(a){return a.stopImmediatePropagation(),this.is_disabled(a.currentTarget)||this.hover_node(a.currentTarget),!1}.bind(this)).on("mouseleave.jstree",".jstree-node",function(a){this.dehover_node(a.currentTarget)}.bind(this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),c.teardown.call(this)},this.redraw_node=function(b,d,e,f){if(b=c.redraw_node.apply(this,arguments)){var g=p.cloneNode(!0);-1!==a.inArray(b.id,this._data.core.selected)&&(g.className+=" jstree-wholerow-clicked"),this._data.core.focused&&this._data.core.focused===b.id&&(g.className+=" jstree-wholerow-hovered"),b.insertBefore(g,b.childNodes[0])}return b}},window.customElements&&Object&&Object.create){var q=Object.create(HTMLElement.prototype);q.createdCallback=function(){var b={core:{},plugins:[]},c;for(c in a.jstree.plugins)a.jstree.plugins.hasOwnProperty(c)&&this.attributes[c]&&(b.plugins.push(c),this.getAttribute(c)&&JSON.parse(this.getAttribute(c))&&(b[c]=JSON.parse(this.getAttribute(c))));for(c in a.jstree.defaults.core)a.jstree.defaults.core.hasOwnProperty(c)&&this.attributes[c]&&(b.core[c]=JSON.parse(this.getAttribute(c))||this.getAttribute(c));a(this).jstree(b)};try{window.customElements.define("vakata-jstree",function(){},{prototype:q})}catch(r){}}}}); \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/32px.png b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/32px.png new file mode 100644 index 0000000000000000000000000000000000000000..60395729ef6cfda914b211d5a45c9d2c083b3175 GIT binary patch literal 1525 zcmVx=)z#Iou&|Pnl0QE`#>U2ri;Ey2AZTc4hK7d2!^8jo|LExGnVFgL^78xp`|9fI z{{H^%?(X*X_U!EJ`1ttr^z`-h_21v$+uPgY%*@Ql$jFb6k9c@^bbCf0 z0000UbW%=J05J?b7$qwPPhmTy5d)-?xp^Mm+qHy5%#b-oX_@#U>G}Ww1nNmdK~#9! z?VAfz;xH72Nz$||!ongb>TW_>N?RW4>i_?5dkfnECVkjIX4-l`ADw#akseRQ#%u4! zEU(s^P17GAf(=CKfepk4b_;A^Q}G;^oNyiQraC}50XXf|q%93}?!-BF&P{cI9|d>R z(FVGrPfqlOYpxI20Q7OqRZ3Za*8Hyzun*QhRscKzVy}UKQ+R&yMyVt&ZQ$iguK&kL&-MSz z(+T9N?OlF^`0GuglFiyDd3xXX<9HqWjOHGniWzb2n>El+VYDber6MUKRTiK%f8vwN zJzXbBB=_6Bj1rQk4_J~Yl`xur{91)UMyS?i4U9LNxbO;d0zkqW*ERe8WKAyjbe)89 zyL;VjWk_;$%EB;YwBY#k;0&-ZYoJo9T5Nse)7i=Iluv=gQ8_Mn10~?Bk2HKeq{B8}j zJ0EEK4;Q**-mr52?0Eb0fwme5_WX+ZJ`4V~<^%0O2cp=Ui0TBF75<+U{vSQS{(PXV z279k`~+7i1|2l;w?7|f0Y_AvV4NtG z%~w^91nT-n=3k(HYX0`-11&YsPbm)YIKQV1I%wc;dp^(xl%*4Vh2H!yzy~&Jm#?G5lt`K_QK_m1`>Y%G9zeYkF!fS_S+g@ z37$I-rIf+!v7mpyXPYqEFQQPbCq_>qYZV>=hqeZ|EK88j11V?EG+!RxDHTRfYz_%3 zZW5phW<=s1d=rj*ZNW7NPt!TO<+DiD)sH(K{g+ZH(T_ z45I`yck;d8m+#)YzIFe)d!2Qj{ha+fd#(N3&pzio=asRc7B$6R6aWB#T1Q*m1phn) z00@xeM0l-2m@XLrAj~(`H`BnsN=r*;XJ@ait*x)GZ)|LAZfMU9v-4lC^Q;S%y*(adW@ct+XlP_)WNd8w@Zm!f6BAQYQ~coH z6Y*d?Mo&*qUthnpwDiM=4@E^q`2O|l*R!*;^Yily3k!>ji%UyO%gf6vD=UA9#j}d1 z6wfD~Ogxi+)A%=se+b00htI{AFJJJU%gV~i%gZY&Dk>{0tE#H1tE+2jYHDk1zkdB% zS6BD#+qe4q`i6#v#>U2`rl#iR=I`IXx3siCAduG9*0#2`_V#ut6bggEIyyQ!J3G6& zy1Ki&dwP0$dwcu(`uh9(2L=WP2M33ShK7fSM@B|QM@PrT#(w z$*HNS>FH@W96mEMgO6@*Ztm{@5eNi6MkEsXC(PB=)jyH`e|}^@qa4+2Ft<228qqUY^)|F>TY(tJ|ur<_zu6DxmLRe~OiLkgVYp*qdOT5z9yFr4Y zhlPV}V|Jc83#p%5CKaw?pXr4f;*RqsHjejTK^v(v*S1m~Czsl1q#rYU?wPhS_HSkI7 z9<|LA8U=D3j4PvMYwKJ7CTZJhq%{m2eVK}OiK6juJYRwy*;%K4Sm1B z{t3Rjq#^6F_8puu?C7VCB8gbzEjH$TQd|dkTiIRPsTczvW$yvO`JdMv%d>UY&4LWM$Pnq1MQ&R2xb&;!`;8M4Rn9E?azP8UHdV`eD742=vGS`>FluvU(0ET|bddrv=WR7$oz1T6 zzwhFIlWwp6;G$IfzR;vitlBh16jz+z6v9jQd)l?Gno;qyFYEWw^Vep6Q8L`HGkxi6 z2JN%HsMZ!TFUg9RQg964D#=kgTz^)a6RqF%rn-oZP11J?rl*_G5KGQ;JDz6N;jCPM zwxabXnutN_WZafuFv0;eg~yw@&(%g zYrT!4n70OdZ`p_&T*LRN)+$`QfY-~0q4C}`7*qY>ln16y%{$=4^i2d zav(n4(~PI8fxpa`?vb;S<{IWV_|Tf#aW;K*0P$(8IT|2oST3qHmJlZ1x@RcU>ei0t zkM|z=Zg`#ac1~uJRqZj&(@#ENq4#To2Pj_#>(y&4Pf1tf40Suqwo|6}Y&$JHh^D2Z zj$*SYb;u;*LVZdfk0ZQDrJcRlA zRJ?l&tW{-gQ+rt*p?aCgC?h51COhiQL+6CN+OV|mPPkIhBwpll>duCzV1m?3qh3OC@;*{i4gez)Ib!G-#U7Vf9D zyhQBOCzd%p;+B2LCD-?jr{N233kZj>bXpP!JR9Xnhx&NLa^($LiNCHJ!?JMOo|^kJ zTf6O$u^>{5>tF~h6K@r|6Oia*t{vLs$EJSCjfz_GB6=7^M{$O)M6_VnIb`wiGi|Lc zr7;bT>AK=7=kQT2ag~DOnNQ)Y<2849Y7d;Q-K5t0$dEi-bEm^XS#zVamhqG$Zbfik z85LjDG^#HWwj5?U2!D0aZf6sp*@WvSk{Gk?Rp_xin2EZ|zcSu*B)Qi=wZPBS!k12a zTZ2GJ26y};gIJxI=j3zm6PRwZ+m~$${?8qxM#HLp5WY%g`bY$14MVMPng_INEjnH5 zK6kfY-g{gF&vBP{N2dbSgc}4s!)~$M_>n_Q`Rybnpqde3Do6LA?;pb--4LmC6iFlD zt1GXKg_;hjWF2Gv!uu%69KeX)2GH|90v@iItAX~}DzszRej8{qIS_f+1gVvd-ZsQp zdY<1Fs)fommh~UDP=|Gc()U!7M;}zHQ#(*J7W%O)c!K~f;~_*GI@@tn%yW=51E zg7?Y57!O1aw~9Sz82C_dHo$%RbJZC}7k4@0e*&cC&Sr`%755*)8q-fN{ia73*l=vJ>hU#cET)a;ZS21rDkPQMy{+q zKi}*MysQqjP?7eR zZ`~MP9cesZBn{+$K(P-d%`L(#DS@u;uHB9^=AOvX9lqQ$T*7iQY44u_;-)_xLFb0q zszxikW#lcnUzTvB8#_KIT`jwkwaUh z>hXSCA$~pO!9*F=pC7&33gkdYNi(g_n6#y!JRPe)KKk6K6kT$C;Mx&ea){Wz00Tf8`D|`=KvM@^$?75k$O{uXDMZONuy6-pS9jjsIr{TG>EsgiUsFT9S7@=zao_c{8@_?#ry`m=hFVhavGM$^9Po*jia;}1V z4;V&)3bsZ}N>~IIStgYWd&B_=g<&2$$r5!z=UC>mm>*@pp`-dKs9Dx+Kz3K!Vq7yCqP`ufHt16kF32Eu3>c>3LvLTv{ob$jTI zHO!Uam}5Vmm6%Qv;UNi)Jx?h>lWcDwcS2Ry!IzP(;5X#L5J|sIsHs=j64%L+PV5qg zw|BKnunZECLNuB_LR1#7eW#@qf8XbUfKhWa-*V(=5SdE=r!R`1Y#Q&;25 zZw={!KJvz~jd|%+YyMI93BY#HJnok!u^w}M*e|ETR=wi#-5-N0BL|14A7IAz_aJRqB zed{N>+j`pjQSxQ0nZ;0+g6Xku7RuCK5D65v7S3!&uHg)`hTQs|bH2OrIBTNc=V@?h zhgRUt1!d6!ppYU2D4xyl^0e-rxZ|zQrUHqGuVr8fiBFUOd9Ss1$c`DF4{yxIb%lzp zcxqi9bz}Q%Zxjqt?!?OZPHi8&OO4W-RH^5tlj_VW$hNEZ39RgL30zV}N9198gq+RR zfn^!4{pwv*e!?(PvCb3I4@iy9jJWttT-CNPaFh9I6@!+EB zOF$q!_?WJbV5*;9g-T%?tw~e0yP};5!p415fl2}SIhD3I4p^SY$XG@HX{vrvPwNURn}FkOksJO6HOV2{Mf^I`-Zo$G7cKcarafXi4PYS3I+ zW?gIpeN9W)AI?N>C2S^Y(vVn+f`QJfM}jV9U%v+AJm+gP-y4+$twb-O9Twt^xvEwh zK5Q56A%Bs<@X-(g`@J5Ei={o&nZRSlMKCKvMCICF0Ls*QFNlZHqp zotNB44kS{jFRSeg0EMHcX4COdw1c;5QwDB;SWen)ZnZ*X1az+0a=aK3?d1IeirQElA~rwBaHtQkD%IALvOp3=bjKyoK*6V@Z2yAn$qqJ~jTY9uhh@!_I!4c}e1V z+7y1n`nw@@h=U7{#Wu;4h2U#;XHxC-2(rAOM!$sulJMcs3h1LJw(a|!%9;4R$K?aG zG~g7AF25v>G?w4l@N;g`}4(Cg= zm`l>@rrb@{DQ6m5CfyhNyu=IH-m<;FI#G6K>y5t69swsq2(KqS^M||eceYu-jE&@!Bf*j8mrz3=&~7Z>&7eqX2B|0G$|Hw-LuZls_DDI+CV{MO znj!gv6i$7%l`K?^Lric~bB<^YTPOLc=XjSJRUBW*^b4La0a|5VQFSVJo9iU}QzEM1 z1EXFBC7JYhny14I{g0*X9sM*h1A3nO@W)*gLz5$0CdsA6^4{1BT+cP2(vQY&v~wO* zN+k%lB&)GQUdlb#Hm$^jDy5m!DX9 zC6E{id$;$Pa(NF4XB_G)L2T(Jd$w-U@aICJ zEdtK;FHk(Do?Hn5!Gc1$1VD;JE3Oy#tAdeItqYT(=dwwB6#>i^NsM4e315qnrnEV0 zt0u>4!~$n`WboA^x&YMv5hRhbYi=Jy_Tu%yT|_`_wVX?weEqK6g1^t`yq0%p7Xdgp zLZqZ6H}vA*h&5e~+$R8pdER*Q#p$nwZqDU<5IY!VVj%~7$KLU}T^9`863JfDVqPn8 zuusrM5U2>F0EE45d)WU2-t$l{igc#e3*0=j?kuFG#!g`yQa>_$UT?y&T#R%UX?WcAvSnVL??K$nN1omq zZl@9U2!sI5(N?*df5g@{0izm$o>EGiaLl{(7aCog%f+3BriS-;dXlbAGNWbM&yShJ z-N>?PMaWQYas~>48vQ|bBycS&)z~SXB@; zGf)9+P4RH&kvjLiBCL_7W87|Vv^gI4^xBW?`>FA4%gglhlx;d9Pmp5@I@T;ipFC9+ zQtrEQ)ZQgk{9v<1Y5T^5m?{?g#k7up#A|8#3zFJ z?tXLF4>>3uTM}QYz+MZ{)H@rI%(lg{JDZ+PCEk!1nh7>yT`|tD>Z9))DG3ke7Zxb+ zHkm3~U1y7xs$Y2*S~4i{Gd#tFd|%sKMAUz_ExNEkh1aW|E?Vdl)zW(sz}c#Mi6wEs zElUdS+thvv{_WTDv&LX!(xMuqa`=a~LG*A*X)z`2?Wuwdruyyf|a zsSo{}CT)bv1FGQ7H92=8Y)2~!81o*`=jtkd^<3l``GdsYmp2>sI=+4zJ11lxzlgh6RslrzUWOj#?QBaz!MO8j2NL_b z#e=ZnoR)VL@z~*cR{cNwZR#Erg3+`OQrK&vdZDp|lLyq5<(>fZ4>Q!ovQU3+` C_#XrS literal 0 HcmV?d00001 diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.css b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.css new file mode 100644 index 0000000000..d255ca3896 --- /dev/null +++ b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.css @@ -0,0 +1,1150 @@ +/* jsTree default dark theme */ +.jstree-node, +.jstree-children, +.jstree-container-ul { + display: block; + margin: 0; + padding: 0; + list-style-type: none; + list-style-image: none; +} +.jstree-node { + white-space: nowrap; +} +.jstree-anchor { + display: inline-block; + color: black; + white-space: nowrap; + padding: 0 4px 0 1px; + margin: 0; + vertical-align: top; +} +.jstree-anchor:focus { + outline: 0; +} +.jstree-anchor, +.jstree-anchor:link, +.jstree-anchor:visited, +.jstree-anchor:hover, +.jstree-anchor:active { + text-decoration: none; + color: inherit; +} +.jstree-icon { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0; + vertical-align: top; + text-align: center; +} +.jstree-icon:empty { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0; + vertical-align: top; + text-align: center; +} +.jstree-ocl { + cursor: pointer; +} +.jstree-leaf > .jstree-ocl { + cursor: default; +} +.jstree .jstree-open > .jstree-children { + display: block; +} +.jstree .jstree-closed > .jstree-children, +.jstree .jstree-leaf > .jstree-children { + display: none; +} +.jstree-anchor > .jstree-themeicon { + margin-right: 2px; +} +.jstree-no-icons .jstree-themeicon, +.jstree-anchor > .jstree-themeicon-hidden { + display: none; +} +.jstree-hidden, +.jstree-node.jstree-hidden { + display: none; +} +.jstree-rtl .jstree-anchor { + padding: 0 1px 0 4px; +} +.jstree-rtl .jstree-anchor > .jstree-themeicon { + margin-left: 2px; + margin-right: 0; +} +.jstree-rtl .jstree-node { + margin-left: 0; +} +.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; +} +.jstree-wholerow-ul { + position: relative; + display: inline-block; + min-width: 100%; +} +.jstree-wholerow-ul .jstree-leaf > .jstree-ocl { + cursor: pointer; +} +.jstree-wholerow-ul .jstree-anchor, +.jstree-wholerow-ul .jstree-icon { + position: relative; +} +.jstree-wholerow-ul .jstree-wholerow { + width: 100%; + cursor: pointer; + position: absolute; + left: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.jstree-contextmenu .jstree-anchor { + -webkit-user-select: none; + /* disable selection/Copy of UIWebView */ + -webkit-touch-callout: none; + /* disable the IOS popup when long-press on a link */ + user-select: none; +} +.vakata-context { + display: none; +} +.vakata-context, +.vakata-context ul { + margin: 0; + padding: 2px; + position: absolute; + background: #f5f5f5; + border: 1px solid #979797; + box-shadow: 2px 2px 2px #999999; +} +.vakata-context ul { + list-style: none; + left: 100%; + margin-top: -2.7em; + margin-left: -4px; +} +.vakata-context .vakata-context-right ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context li { + list-style: none; +} +.vakata-context li > a { + display: block; + padding: 0 2em 0 2em; + text-decoration: none; + width: auto; + color: black; + white-space: nowrap; + line-height: 2.4em; + text-shadow: 1px 1px 0 white; + border-radius: 1px; +} +.vakata-context li > a:hover { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); + background-position: right center; + background-repeat: no-repeat; +} +.vakata-context li > a:focus { + outline: 0; +} +.vakata-context .vakata-context-no-icons { + margin-left: 0; +} +.vakata-context .vakata-context-hover > a { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context .vakata-context-separator > a, +.vakata-context .vakata-context-separator > a:hover { + background: white; + border: 0; + border-top: 1px solid #e2e3e3; + height: 1px; + min-height: 1px; + max-height: 1px; + padding: 0; + margin: 0 0 0 2.4em; + border-left: 1px solid #e0e0e0; + text-shadow: 0 0 0 transparent; + box-shadow: 0 0 0 transparent; + border-radius: 0; +} +.vakata-context .vakata-contextmenu-disabled a, +.vakata-context .vakata-contextmenu-disabled a:hover { + color: silver; + background-color: transparent; + border: 0; + box-shadow: 0 0 0; +} +.vakata-context .vakata-contextmenu-disabled > a > i { + filter: grayscale(100%); +} +.vakata-context li > a > i { + text-decoration: none; + display: inline-block; + width: 2.4em; + height: 2.4em; + background: transparent; + margin: 0 0 0 -2em; + vertical-align: top; + text-align: center; + line-height: 2.4em; +} +.vakata-context li > a > i:empty { + width: 2.4em; + line-height: 2.4em; +} +.vakata-context li > a .vakata-contextmenu-sep { + display: inline-block; + width: 1px; + height: 2.4em; + background: white; + margin: 0 0.5em 0 0; + border-left: 1px solid #e2e3e3; +} +.vakata-context .vakata-contextmenu-shortcut { + font-size: 0.8em; + color: silver; + opacity: 0.5; + display: none; +} +.vakata-context-rtl ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context-rtl li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); + background-position: left center; + background-repeat: no-repeat; +} +.vakata-context-rtl .vakata-context-separator > a { + margin: 0 2.4em 0 0; + border-left: 0; + border-right: 1px solid #e2e3e3; +} +.vakata-context-rtl .vakata-context-left ul { + right: auto; + left: 100%; + margin-left: -4px; + margin-right: auto; +} +.vakata-context-rtl li > a > i { + margin: 0 -2em 0 0; +} +.vakata-context-rtl li > a .vakata-contextmenu-sep { + margin: 0 0 0 0.5em; + border-left-color: white; + background: #e2e3e3; +} +#jstree-marker { + position: absolute; + top: 0; + left: 0; + margin: -5px 0 0 0; + padding: 0; + border-right: 0; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid; + width: 0; + height: 0; + font-size: 0; + line-height: 0; +} +#jstree-dnd { + line-height: 16px; + margin: 0; + padding: 4px; +} +#jstree-dnd .jstree-icon, +#jstree-dnd .jstree-copy { + display: inline-block; + text-decoration: none; + margin: 0 2px 0 0; + padding: 0; + width: 16px; + height: 16px; +} +#jstree-dnd .jstree-ok { + background: green; +} +#jstree-dnd .jstree-er { + background: red; +} +#jstree-dnd .jstree-copy { + margin: 0 2px 0 2px; +} +.jstree-default-dark .jstree-node, +.jstree-default-dark .jstree-icon { + background-repeat: no-repeat; + background-color: transparent; +} +.jstree-default-dark .jstree-anchor, +.jstree-default-dark .jstree-animated, +.jstree-default-dark .jstree-wholerow { + transition: background-color 0.15s, box-shadow 0.15s; +} +.jstree-default-dark .jstree-hovered { + background: #555; + border-radius: 2px; + box-shadow: inset 0 0 1px #555; +} +.jstree-default-dark .jstree-context { + background: #555; + border-radius: 2px; + box-shadow: inset 0 0 1px #555; +} +.jstree-default-dark .jstree-clicked { + background: #5fa2db; + border-radius: 2px; + box-shadow: inset 0 0 1px #666666; +} +.jstree-default-dark .jstree-no-icons .jstree-anchor > .jstree-themeicon { + display: none; +} +.jstree-default-dark .jstree-disabled { + background: transparent; + color: #666666; +} +.jstree-default-dark .jstree-disabled.jstree-hovered { + background: transparent; + box-shadow: none; +} +.jstree-default-dark .jstree-disabled.jstree-clicked { + background: #333333; +} +.jstree-default-dark .jstree-disabled > .jstree-icon { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-dark .jstree-search { + font-style: italic; + color: #ffffff; + font-weight: bold; +} +.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox { + display: none !important; +} +.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked { + background: transparent; + box-shadow: none; +} +.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { + background: #555; +} +.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { + background: transparent; +} +.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { + background: #555; +} +.jstree-default-dark > .jstree-striped { + min-width: 100%; + display: inline-block; + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; +} +.jstree-default-dark > .jstree-wholerow-ul .jstree-hovered, +.jstree-default-dark > .jstree-wholerow-ul .jstree-clicked { + background: transparent; + box-shadow: none; + border-radius: 0; +} +.jstree-default-dark .jstree-wholerow { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.jstree-default-dark .jstree-wholerow-hovered { + background: #555; +} +.jstree-default-dark .jstree-wholerow-clicked { + background: #5fa2db; + background: -webkit-linear-gradient(top, #5fa2db 0%, #5fa2db 100%); + background: linear-gradient(to bottom, #5fa2db 0%, #5fa2db 100%); +} +.jstree-default-dark .jstree-node { + min-height: 24px; + line-height: 24px; + margin-left: 24px; + min-width: 24px; +} +.jstree-default-dark .jstree-anchor { + line-height: 24px; + height: 24px; +} +.jstree-default-dark .jstree-icon { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default-dark .jstree-icon:empty { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default-dark.jstree-rtl .jstree-node { + margin-right: 24px; +} +.jstree-default-dark .jstree-wholerow { + height: 24px; +} +.jstree-default-dark .jstree-node, +.jstree-default-dark .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-dark .jstree-node { + background-position: -292px -4px; + background-repeat: repeat-y; +} +.jstree-default-dark .jstree-last { + background: transparent; +} +.jstree-default-dark .jstree-open > .jstree-ocl { + background-position: -132px -4px; +} +.jstree-default-dark .jstree-closed > .jstree-ocl { + background-position: -100px -4px; +} +.jstree-default-dark .jstree-leaf > .jstree-ocl { + background-position: -68px -4px; +} +.jstree-default-dark .jstree-themeicon { + background-position: -260px -4px; +} +.jstree-default-dark > .jstree-no-dots .jstree-node, +.jstree-default-dark > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-dark > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -4px; +} +.jstree-default-dark > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -4px; +} +.jstree-default-dark .jstree-disabled { + background: transparent; +} +.jstree-default-dark .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-dark .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-dark .jstree-checkbox { + background-position: -164px -4px; +} +.jstree-default-dark .jstree-checkbox:hover { + background-position: -164px -36px; +} +.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-dark .jstree-checked > .jstree-checkbox { + background-position: -228px -4px; +} +.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-dark .jstree-checked > .jstree-checkbox:hover { + background-position: -228px -36px; +} +.jstree-default-dark .jstree-anchor > .jstree-undetermined { + background-position: -196px -4px; +} +.jstree-default-dark .jstree-anchor > .jstree-undetermined:hover { + background-position: -196px -36px; +} +.jstree-default-dark .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-dark > .jstree-striped { + background-size: auto 48px; +} +.jstree-default-dark.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-dark.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-dark.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -132px -36px; +} +.jstree-default-dark.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -100px -36px; +} +.jstree-default-dark.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -68px -36px; +} +.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -36px; +} +.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -36px; +} +.jstree-default-dark .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-dark > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-dark .jstree-file { + background: url("32px.png") -100px -68px no-repeat; +} +.jstree-default-dark .jstree-folder { + background: url("32px.png") -260px -4px no-repeat; +} +.jstree-default-dark > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-dark { + line-height: 24px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-dark .jstree-ok, +#jstree-dnd.jstree-default-dark .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-dark i { + background: transparent; + width: 24px; + height: 24px; + line-height: 24px; +} +#jstree-dnd.jstree-default-dark .jstree-ok { + background-position: -4px -68px; +} +#jstree-dnd.jstree-default-dark .jstree-er { + background-position: -36px -68px; +} +.jstree-default-dark .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-dark .jstree-ellipsis .jstree-anchor { + width: calc(100% - 29px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-dark.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); +} +.jstree-default-dark.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-dark-small .jstree-node { + min-height: 18px; + line-height: 18px; + margin-left: 18px; + min-width: 18px; +} +.jstree-default-dark-small .jstree-anchor { + line-height: 18px; + height: 18px; +} +.jstree-default-dark-small .jstree-icon { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-dark-small .jstree-icon:empty { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-dark-small.jstree-rtl .jstree-node { + margin-right: 18px; +} +.jstree-default-dark-small .jstree-wholerow { + height: 18px; +} +.jstree-default-dark-small .jstree-node, +.jstree-default-dark-small .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-dark-small .jstree-node { + background-position: -295px -7px; + background-repeat: repeat-y; +} +.jstree-default-dark-small .jstree-last { + background: transparent; +} +.jstree-default-dark-small .jstree-open > .jstree-ocl { + background-position: -135px -7px; +} +.jstree-default-dark-small .jstree-closed > .jstree-ocl { + background-position: -103px -7px; +} +.jstree-default-dark-small .jstree-leaf > .jstree-ocl { + background-position: -71px -7px; +} +.jstree-default-dark-small .jstree-themeicon { + background-position: -263px -7px; +} +.jstree-default-dark-small > .jstree-no-dots .jstree-node, +.jstree-default-dark-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-dark-small > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -7px; +} +.jstree-default-dark-small > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -7px; +} +.jstree-default-dark-small .jstree-disabled { + background: transparent; +} +.jstree-default-dark-small .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-dark-small .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-dark-small .jstree-checkbox { + background-position: -167px -7px; +} +.jstree-default-dark-small .jstree-checkbox:hover { + background-position: -167px -39px; +} +.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-dark-small .jstree-checked > .jstree-checkbox { + background-position: -231px -7px; +} +.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-dark-small .jstree-checked > .jstree-checkbox:hover { + background-position: -231px -39px; +} +.jstree-default-dark-small .jstree-anchor > .jstree-undetermined { + background-position: -199px -7px; +} +.jstree-default-dark-small .jstree-anchor > .jstree-undetermined:hover { + background-position: -199px -39px; +} +.jstree-default-dark-small .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-dark-small > .jstree-striped { + background-size: auto 36px; +} +.jstree-default-dark-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-dark-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-dark-small.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -135px -39px; +} +.jstree-default-dark-small.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -103px -39px; +} +.jstree-default-dark-small.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -71px -39px; +} +.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -39px; +} +.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -39px; +} +.jstree-default-dark-small .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-dark-small > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-dark-small .jstree-file { + background: url("32px.png") -103px -71px no-repeat; +} +.jstree-default-dark-small .jstree-folder { + background: url("32px.png") -263px -7px no-repeat; +} +.jstree-default-dark-small > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-dark-small { + line-height: 18px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-dark-small .jstree-ok, +#jstree-dnd.jstree-default-dark-small .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-dark-small i { + background: transparent; + width: 18px; + height: 18px; + line-height: 18px; +} +#jstree-dnd.jstree-default-dark-small .jstree-ok { + background-position: -7px -71px; +} +#jstree-dnd.jstree-default-dark-small .jstree-er { + background-position: -39px -71px; +} +.jstree-default-dark-small .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-dark-small .jstree-ellipsis .jstree-anchor { + width: calc(100% - 23px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-dark-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); +} +.jstree-default-dark-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-dark-large .jstree-node { + min-height: 32px; + line-height: 32px; + margin-left: 32px; + min-width: 32px; +} +.jstree-default-dark-large .jstree-anchor { + line-height: 32px; + height: 32px; +} +.jstree-default-dark-large .jstree-icon { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-dark-large .jstree-icon:empty { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-dark-large.jstree-rtl .jstree-node { + margin-right: 32px; +} +.jstree-default-dark-large .jstree-wholerow { + height: 32px; +} +.jstree-default-dark-large .jstree-node, +.jstree-default-dark-large .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-dark-large .jstree-node { + background-position: -288px 0px; + background-repeat: repeat-y; +} +.jstree-default-dark-large .jstree-last { + background: transparent; +} +.jstree-default-dark-large .jstree-open > .jstree-ocl { + background-position: -128px 0px; +} +.jstree-default-dark-large .jstree-closed > .jstree-ocl { + background-position: -96px 0px; +} +.jstree-default-dark-large .jstree-leaf > .jstree-ocl { + background-position: -64px 0px; +} +.jstree-default-dark-large .jstree-themeicon { + background-position: -256px 0px; +} +.jstree-default-dark-large > .jstree-no-dots .jstree-node, +.jstree-default-dark-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-dark-large > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px 0px; +} +.jstree-default-dark-large > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px 0px; +} +.jstree-default-dark-large .jstree-disabled { + background: transparent; +} +.jstree-default-dark-large .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-dark-large .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-dark-large .jstree-checkbox { + background-position: -160px 0px; +} +.jstree-default-dark-large .jstree-checkbox:hover { + background-position: -160px -32px; +} +.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-dark-large .jstree-checked > .jstree-checkbox { + background-position: -224px 0px; +} +.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-dark-large .jstree-checked > .jstree-checkbox:hover { + background-position: -224px -32px; +} +.jstree-default-dark-large .jstree-anchor > .jstree-undetermined { + background-position: -192px 0px; +} +.jstree-default-dark-large .jstree-anchor > .jstree-undetermined:hover { + background-position: -192px -32px; +} +.jstree-default-dark-large .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-dark-large > .jstree-striped { + background-size: auto 64px; +} +.jstree-default-dark-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-dark-large.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-dark-large.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -128px -32px; +} +.jstree-default-dark-large.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -96px -32px; +} +.jstree-default-dark-large.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -64px -32px; +} +.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px -32px; +} +.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px -32px; +} +.jstree-default-dark-large .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-dark-large > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-dark-large .jstree-file { + background: url("32px.png") -96px -64px no-repeat; +} +.jstree-default-dark-large .jstree-folder { + background: url("32px.png") -256px 0px no-repeat; +} +.jstree-default-dark-large > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-dark-large { + line-height: 32px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-dark-large .jstree-ok, +#jstree-dnd.jstree-default-dark-large .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-dark-large i { + background: transparent; + width: 32px; + height: 32px; + line-height: 32px; +} +#jstree-dnd.jstree-default-dark-large .jstree-ok { + background-position: 0px -64px; +} +#jstree-dnd.jstree-default-dark-large .jstree-er { + background-position: -32px -64px; +} +.jstree-default-dark-large .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-dark-large .jstree-ellipsis .jstree-anchor { + width: calc(100% - 37px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-dark-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); +} +.jstree-default-dark-large.jstree-rtl .jstree-last { + background: transparent; +} +@media (max-width: 768px) { + #jstree-dnd.jstree-dnd-responsive { + line-height: 40px; + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + #jstree-dnd.jstree-dnd-responsive > i { + background: transparent; + width: 40px; + height: 40px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-ok { + background-image: url("40px.png"); + background-position: 0 -200px; + background-size: 120px 240px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-er { + background-image: url("40px.png"); + background-position: -40px -200px; + background-size: 120px 240px; + } + #jstree-marker.jstree-dnd-responsive { + border-left-width: 10px; + border-top-width: 10px; + border-bottom-width: 10px; + margin-top: -10px; + } +} +@media (max-width: 768px) { + .jstree-default-dark-responsive { + /* + .jstree-open > .jstree-ocl, + .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } + */ + } + .jstree-default-dark-responsive .jstree-icon { + background-image: url("40px.png"); + } + .jstree-default-dark-responsive .jstree-node, + .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-dark-responsive .jstree-node { + min-height: 40px; + line-height: 40px; + margin-left: 40px; + min-width: 40px; + white-space: nowrap; + } + .jstree-default-dark-responsive .jstree-anchor { + line-height: 40px; + height: 40px; + } + .jstree-default-dark-responsive .jstree-icon, + .jstree-default-dark-responsive .jstree-icon:empty { + width: 40px; + height: 40px; + line-height: 40px; + } + .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + } + .jstree-default-dark-responsive.jstree-rtl .jstree-node { + margin-left: 0; + margin-right: 40px; + background: transparent; + } + .jstree-default-dark-responsive.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; + } + .jstree-default-dark-responsive .jstree-ocl, + .jstree-default-dark-responsive .jstree-themeicon, + .jstree-default-dark-responsive .jstree-checkbox { + background-size: 120px 240px; + } + .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl, + .jstree-default-dark-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-dark-responsive .jstree-open > .jstree-ocl { + background-position: 0 0 !important; + } + .jstree-default-dark-responsive .jstree-closed > .jstree-ocl { + background-position: 0 -40px !important; + } + .jstree-default-dark-responsive.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -40px 0 !important; + } + .jstree-default-dark-responsive .jstree-themeicon { + background-position: -40px -40px; + } + .jstree-default-dark-responsive .jstree-checkbox, + .jstree-default-dark-responsive .jstree-checkbox:hover { + background-position: -40px -80px; + } + .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, + .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, + .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox, + .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox:hover { + background-position: 0 -80px; + } + .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined, + .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined:hover { + background-position: 0 -120px; + } + .jstree-default-dark-responsive .jstree-anchor { + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + .jstree-default-dark-responsive > .jstree-striped { + background: transparent; + } + .jstree-default-dark-responsive .jstree-wholerow { + border-top: 1px solid #666; + border-bottom: 1px solid #000; + background: #333333; + height: 40px; + } + .jstree-default-dark-responsive .jstree-wholerow-hovered { + background: #555; + } + .jstree-default-dark-responsive .jstree-wholerow-clicked { + background: #5fa2db; + } + .jstree-default-dark-responsive .jstree-children .jstree-last > .jstree-wholerow { + box-shadow: inset 0 -6px 3px -5px #111111; + } + .jstree-default-dark-responsive .jstree-children .jstree-open > .jstree-wholerow { + box-shadow: inset 0 6px 3px -5px #111111; + border-top: 0; + } + .jstree-default-dark-responsive .jstree-children .jstree-open + .jstree-open { + box-shadow: none; + } + .jstree-default-dark-responsive .jstree-node, + .jstree-default-dark-responsive .jstree-icon, + .jstree-default-dark-responsive .jstree-node > .jstree-ocl, + .jstree-default-dark-responsive .jstree-themeicon, + .jstree-default-dark-responsive .jstree-checkbox { + background-image: url("40px.png"); + background-size: 120px 240px; + } + .jstree-default-dark-responsive .jstree-node { + background-position: -80px 0; + background-repeat: repeat-y; + } + .jstree-default-dark-responsive .jstree-last { + background: transparent; + } + .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl { + background-position: -40px -120px; + } + .jstree-default-dark-responsive .jstree-last > .jstree-ocl { + background-position: -40px -160px; + } + .jstree-default-dark-responsive .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; + } + .jstree-default-dark-responsive .jstree-file { + background: url("40px.png") 0 -160px no-repeat; + background-size: 120px 240px; + } + .jstree-default-dark-responsive .jstree-folder { + background: url("40px.png") -40px -40px no-repeat; + background-size: 120px 240px; + } + .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; + } +} +.jstree-default-dark { + background: #333; +} +.jstree-default-dark .jstree-anchor { + color: #999; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); +} +.jstree-default-dark .jstree-clicked, +.jstree-default-dark .jstree-checked { + color: white; +} +.jstree-default-dark .jstree-hovered { + color: white; +} +#jstree-marker.jstree-default-dark { + border-left-color: #999; + background: transparent; +} +.jstree-default-dark .jstree-anchor > .jstree-icon { + opacity: 0.75; +} +.jstree-default-dark .jstree-clicked > .jstree-icon, +.jstree-default-dark .jstree-hovered > .jstree-icon, +.jstree-default-dark .jstree-checked > .jstree-icon { + opacity: 1; +} +.jstree-default-dark.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); +} +.jstree-default-dark.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-dark-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); +} +.jstree-default-dark-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-dark-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); +} +.jstree-default-dark-large.jstree-rtl .jstree-last { + background: transparent; +} diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.min.css b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.min.css new file mode 100644 index 0000000000..f3c323fec0 --- /dev/null +++ b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.min.css @@ -0,0 +1 @@ +.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:black;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em 0 2em;text-decoration:none;width:auto;color:black;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 white;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-no-icons{margin-left:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:white;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context .vakata-contextmenu-disabled>a>i{filter:grayscale(100%)}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:transparent;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:white;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:white;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px 0 2px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default-dark .jstree-anchor,.jstree-default-dark .jstree-animated,.jstree-default-dark .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default-dark .jstree-hovered{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-context{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-clicked{background:#5fa2db;border-radius:2px;box-shadow:inset 0 0 1px #666666}.jstree-default-dark .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default-dark .jstree-disabled{background:transparent;color:#666666}.jstree-default-dark .jstree-disabled.jstree-hovered{background:transparent;box-shadow:none}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#333333}.jstree-default-dark .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark .jstree-search{font-style:italic;color:#ffffff;font-weight:bold}.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox{display:none !important}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked{background:transparent;box-shadow:none}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#555}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:transparent}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#555}.jstree-default-dark>.jstree-striped{min-width:100%;display:inline-block;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat}.jstree-default-dark>.jstree-wholerow-ul .jstree-hovered,.jstree-default-dark>.jstree-wholerow-ul .jstree-clicked{background:transparent;box-shadow:none;border-radius:0}.jstree-default-dark .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default-dark .jstree-wholerow-hovered{background:#555}.jstree-default-dark .jstree-wholerow-clicked{background:#5fa2db;background:-webkit-linear-gradient(top, #5fa2db 0, #5fa2db 100%);background:linear-gradient(to bottom, #5fa2db 0, #5fa2db 100%)}.jstree-default-dark .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default-dark .jstree-anchor{line-height:24px;height:24px}.jstree-default-dark .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default-dark .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default-dark.jstree-rtl .jstree-node{margin-right:24px}.jstree-default-dark .jstree-wholerow{height:24px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-image:url("32px.png")}.jstree-default-dark .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default-dark .jstree-last{background:transparent}.jstree-default-dark .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default-dark .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default-dark .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default-dark .jstree-themeicon{background-position:-260px -4px}.jstree-default-dark>.jstree-no-dots .jstree-node,.jstree-default-dark>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default-dark>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default-dark .jstree-disabled{background:transparent}.jstree-default-dark .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark .jstree-checkbox{background-position:-164px -4px}.jstree-default-dark .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default-dark .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default-dark .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default-dark .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark>.jstree-striped{background-size:auto 48px}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default-dark.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default-dark.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default-dark .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-dark .jstree-file{background:url("32px.png") -100px -68px no-repeat}.jstree-default-dark .jstree-folder{background:url("32px.png") -260px -4px no-repeat}.jstree-default-dark>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default-dark .jstree-ok,#jstree-dnd.jstree-default-dark .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark i{background:transparent;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default-dark .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default-dark .jstree-er{background-position:-36px -68px}.jstree-default-dark .jstree-ellipsis{overflow:hidden}.jstree-default-dark .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default-dark.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-dark-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-dark-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-dark-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-dark-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-dark-small .jstree-wholerow{height:18px}.jstree-default-dark-small .jstree-node,.jstree-default-dark-small .jstree-icon{background-image:url("32px.png")}.jstree-default-dark-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-dark-small .jstree-last{background:transparent}.jstree-default-dark-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-dark-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-dark-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-dark-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-node,.jstree-default-dark-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-dark-small .jstree-disabled{background:transparent}.jstree-default-dark-small .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-dark-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-dark-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-dark-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-small>.jstree-striped{background-size:auto 36px}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-dark-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-dark-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-dark-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-dark-small .jstree-file{background:url("32px.png") -103px -71px no-repeat}.jstree-default-dark-small .jstree-folder{background:url("32px.png") -263px -7px no-repeat}.jstree-default-dark-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-dark-small .jstree-ok,#jstree-dnd.jstree-default-dark-small .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-small i{background:transparent;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-dark-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-dark-small .jstree-er{background-position:-39px -71px}.jstree-default-dark-small .jstree-ellipsis{overflow:hidden}.jstree-default-dark-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-dark-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-dark-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-dark-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-dark-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-dark-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-dark-large .jstree-wholerow{height:32px}.jstree-default-dark-large .jstree-node,.jstree-default-dark-large .jstree-icon{background-image:url("32px.png")}.jstree-default-dark-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-dark-large .jstree-last{background:transparent}.jstree-default-dark-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-dark-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-dark-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-dark-large .jstree-themeicon{background-position:-256px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-node,.jstree-default-dark-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-dark-large .jstree-disabled{background:transparent}.jstree-default-dark-large .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-dark-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-large .jstree-checkbox{background-position:-160px 0}.jstree-default-dark-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-dark-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-large>.jstree-striped{background-size:auto 64px}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-large.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-dark-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-dark-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-dark-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-dark-large .jstree-file{background:url("32px.png") -96px -64px no-repeat}.jstree-default-dark-large .jstree-folder{background:url("32px.png") -256px 0 no-repeat}.jstree-default-dark-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-dark-large .jstree-ok,#jstree-dnd.jstree-default-dark-large .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-large i{background:transparent;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-dark-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-dark-large .jstree-er{background-position:-32px -64px}.jstree-default-dark-large .jstree-ellipsis{overflow:hidden}.jstree-default-dark-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-dark-large.jstree-rtl .jstree-last{background:transparent}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}#jstree-dnd.jstree-dnd-responsive>i{background:transparent;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url("40px.png");background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url("40px.png");background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-dark-responsive .jstree-icon{background-image:url("40px.png")}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-dark-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-dark-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:transparent}.jstree-default-dark-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-dark-responsive .jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl,.jstree-default-dark-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-responsive .jstree-open>.jstree-ocl{background-position:0 0 !important}.jstree-default-dark-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px !important}.jstree-default-dark-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0 !important}.jstree-default-dark-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-dark-responsive .jstree-checkbox,.jstree-default-dark-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-dark-responsive .jstree-anchor{font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}.jstree-default-dark-responsive>.jstree-striped{background:transparent}.jstree-default-dark-responsive .jstree-wholerow{border-top:1px solid #666;border-bottom:1px solid #000;background:#333333;height:40px}.jstree-default-dark-responsive .jstree-wholerow-hovered{background:#555}.jstree-default-dark-responsive .jstree-wholerow-clicked{background:#5fa2db}.jstree-default-dark-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #111111}.jstree-default-dark-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #111111;border-top:0}.jstree-default-dark-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-node>.jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-image:url("40px.png");background-size:120px 240px}.jstree-default-dark-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-dark-responsive .jstree-last{background:transparent}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-dark-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-dark-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-responsive .jstree-file{background:url("40px.png") 0 -160px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive .jstree-folder{background:url("40px.png") -40px -40px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}.jstree-default-dark{background:#333}.jstree-default-dark .jstree-anchor{color:#999;text-shadow:1px 1px 0 rgba(0,0,0,0.5)}.jstree-default-dark .jstree-clicked,.jstree-default-dark .jstree-checked{color:white}.jstree-default-dark .jstree-hovered{color:white}#jstree-marker.jstree-default-dark{border-left-color:#999;background:transparent}.jstree-default-dark .jstree-anchor>.jstree-icon{opacity:.75}.jstree-default-dark .jstree-clicked>.jstree-icon,.jstree-default-dark .jstree-hovered>.jstree-icon,.jstree-default-dark .jstree-checked>.jstree-icon{opacity:1}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default-dark.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-dark-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-dark-large.jstree-rtl .jstree-last{background:transparent} \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/throbber.gif b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/throbber.gif new file mode 100644 index 0000000000000000000000000000000000000000..169062cda53296196d81c1e47816e40358d2523d GIT binary patch literal 1464 zcmZvceN0nV7>Ca-x8)Wpy+Fkag4|n5Efb_r&{j9n7J<@Wy@FyvG_6Bu)oDeY-6HOm z^3gJs3Jj_`bvlivkopWdo^HYA_f&J3A?gB1zKWaA-7|`uci_M55E_tX8YtZda?-Mx(K#qeCPT z5q|}$GPdNU%gBu6)j~fA06_d1kzTf2dw6#-epG*0hims}jr$I0i&yLSmmC1Z3z!}N z*dX3_(ie#WDQuYa*65ZW8E(5Y7Rs%ywc!;amUL1HW`Vy4lXCMS@OY%gaUqbvYFxZf zC5NMgDaToQarKDVeHMfzcx*p4#^&^?kLH(=spG8DcKV68xN^-OXW%df!d#cc;v69S zAa;SsgyS%5V+X%E1luf;A+p)WDVrCxI`OrFJ;_>B{0%NE*1Qm9nn@leW!NSY0KXCtvx1n6Hfojth$ zt3xV&07J*R>ZtsIa`&aCOxKN67(r++I~#bw08@2I*Jjv~xsONkxNib3yfT1`X1#Gs zzD;(lZHk1SM?w!$r}#@ZEOQ}v?1}Sm^&KML$!M#2BvV^f#MYj#p29HJ=2p@`l`(F# z6AxDioPin^357J@tF)EZ{U~Qvj7F|t_VT9_zV3g9E%G6YwFdbDGf=Np?obEC!6Va? z1YJPiS!$aiQHw#nbLl2?xAvLxH+w%!3Fj-KWZp7wQ(8Jp)+|wd5yh47RhC@j&`261 z!>7|LVS*NKUO?G9>irdQP7(Y(8)PG(7M`lt5PMT$6vGM7;Yp4k>u!bqBHzNZ zjOpOUVOIJ{Vc!5;`bOhFkh>_JGb5^Ski>S+cMOs7rm@pW-cN6h)O* za_$~c+|_=%JGib13*VPwJQM0t z(m(OO`1*$)FKz5ND>Cis98Nq~qm;Y`2Yhhr zKBvl?UNZD}fcQPY=9!V7WzkO$beCP`TLw*W1=rC)djBa*><=;1OE3Xam5_7DV2?6A zuhtw9RHWYLp9257^QybWIQ6VIJG#@zC84YC45mESiaZH!o83qi(rFXcaaSq(j-Owa z6CIkzqTzH?&sIi53vbMj7F6%rH6u#lLFP(4SVUU_nzw0O(G0%gHpQ*I+>3=mufOJE zafP$lxzy$Pke=Qav-?=?9H^LqhV&8ls=DoW(1KO5zW?mAaDb{Y(>Koc49sZgb+^uF qc@C8(Mp%rgx+mJC3dQo~8dbUO?Q85zP5Hs^+UpbJR`hQGVEx}cw(Vm8 literal 0 HcmV?d00001 diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/32px.png b/InvenTree/InvenTree/static/script/jstree/themes/default/32px.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6af206777a87fb9d27dccf2184934065ceeae8 GIT binary patch literal 5660 zcmaKwcTiJNv%r%WFcGALDoU@?QKU+XpcDy62Pr|CN=JGP2mvWlq!W4-L_mu4E?uNZ zliooIO{54(UhtbYZ|2RL_s`ukyL-=`JNKOP+ub+Xh)372FQMK{)O_inBpdX|pMDt68DqVz@s5*+T;~Wh@8P6Na-8@H#{zVJ~pPtP0xU zSUM(l*7_=N)3a1Ipp1XM?ZSD!)Cr0@vS0o*i97KkJ^A)!y?$!Z`Cv*&*b3<8>WVXu zBI$!h)37n{D$=ttF#Hp|q6m~J24IXbHT@?r?NUTvkoDyY{{-lq`IwcFaZ7Iz+oK)h z7*JDMaCb3ZewZ2mDfyl32FJB@^T3UPknAE;5t`Z; zCa)tp*+JGHN)A{f&IvwS*E2B*Agd~Bl^zaSI=Z|#KEaStBfeyY{CcA~;oLe#($`AK zsB|1d)TXeAKzNnvk;va6k)cO{PgoAG{nkbfy_wGQjrAE4100M{Tu;}8!-u?&_I!o$7!z&41P^fNy)ZAU4(#Wp)<5JTt#DU z#t3E2S~aH$h8$|U@wXgDe@QW4Pl21)dtJmh=?{#1UF8Kx8Juo)o!u0Z;$_KC0<1e$ zyyn;tD!#HDsB&Z|TRNlub=kzIR0;xL|oom-N*Si!fSv={5 zzhrd=tvbv|nDUYJo@H1{`Mr{*xY5>AIG`G8Hj8SW14S%8(MS2MQmj;WRadUUBbsr? zpzoQd^cFnLv3(dih^leKQevS|(o&Q}^;~$_?VIXe$022ONah25+U^1I8L(6Ay}tfIUF_b2KQo5eRtxXN zAYy@`u~rM+Ugse%N$UU9Pz(-#3k_-%N#5c`9u&Sg<#2*EzqSYw&$SW}0;{^^8{lUU zsK`?$brgjrs^&LyCU`qW(l?qi-3sJ@IJYP!EA6KOJ=WAvQCH{J(H)OV4t$_0N+vxs z0}nkr#Pd~hb6Baxm!8{3QL(8xde%_V^Std$Kl)rLZ*}eBPH~5bJ(GlW>lMOK+j2HE ze}7rYd2M4Y0U-492rJX@Zu907t!Ie2yZdsI0J4hK=o{e=mu6d5vX|Z~HnaZbUyz=? zD*vcywVX3R^j;5H1t~?xriIWGGx=i>*H0d}O7vF_;Fyx3@93z*JI+P_x3oE&G{{#! z2;yDo@$ql;*cH;r)zlI3Dyhj?Xu&EBIH;f#SNj?$hyiyu!VX(7a#X&jrzRm?lGU;siS5*}iDf;km^N`QJQHYX ztuP0Ux%t)5BdZ^y2E>XRT|f?v=h@cD+{#*=QBhNz^1>{>I2$fAE!Ydu85u!(SbM2!Fk4Yj9R-pm}Cw*U$K;{V}h41 zXUip$uKqbttzu^2s)6O46pd~;1#&Sn7>Agt%+7x^p7TU=JoJq=02N@(Xj-W$g?CXO zEgJF$O$^-$7fPY5^JY!hNvz=$l$W#@mntf8e~08zXa4$I7+dz$>1dMaxwloH5bfWt5cDlYI(CM6?L`l1WgqkaO@TTEUP>6 z=HK$IFrYwlrGO_v=rA8wa8!{FFf+^M9=-iWt6}9eS21M7++R~3cqf_@eK9b>Vk4>I zS4}QC_`%WGIL)5~!pu-k|J;>3;!e$ny_eCAhPEX>x3f4DRh+<@5Uh*`V3gtQq;PdO zOW6ih{YL=SwE%Etf-Ex5@n-~F7x>kod>zpF}}L;t*@+^$BnTy$tRHSu>((*vR5684;*U z6VQza-8rYsRvIK&d+e5-MM4b)=8@M0F9xU&HiL1wzv7^R* zRh0<$H)O8Nrs!L5>(fy|!?LDK(dod!6N62qFIW?$-X2=YJ+O@ ztb6*MPp`c;M|dY0LrXYr(@*er`PY&>f6xCo*y6%;N6<8cZ&e*5MA>on31Z3@+Z`4O z*%83QphafWfsW;Z_O&F8<*}WgaCcp$d}D}oh5bKt6>9$*iQgVE3`qcVbvpHd3dUqe zB+|hp{>;b+ZNQsRU}jC-1;Xt>T}(n-+A|)Y0c2a>y5}i1tfX%;U!7ddhMIQ1@?FjV zh&;{dJ)dgNfbO1Uz=k+@tvOtEbu)tBoTvJ!?QKuS6y$dQjZ!kvxghe5Os3aVtB+2l zHZ*S$ECb3fp5;p-XU@|0wNAdkaA3h!acYZh&CbLnJ9f>jX$>-#bV^SDm@xtwrn z`6qx~>frB+W!6#oQ$bhSN!#e&#t*mm2h&Lvu81)|{k<7^ZXUeX+7|iei5BYPJ6WH< zJKHhRuHV{E<^Y1tfA84dVhWz_`bG81MQ$P1hi(spy^@_je=r#@pUSivHX3XmamZTM zPgO4l9a)CPQ3Q@<#Bx;TFQ8(SLf+;{?*y?cZYDY}eiYP@4gWNxQJ>}xl6)7Nf6=3& zXKk8LXp|z9P_0)xnPUuzzIS7w%ZeR-=AEODqOTo3(^w=f$d80| zC+G@+CP0Cw`?$M+rbYBXS*zLO!u7(-{gHRr=Wbm~;r#_XrkUa;MX-kjjt)2FK^367 zPhLIXv^7l6NV^;z$PWAKm^5N2>Vmx@b<;~*o_ypMczTBh89*eb$$2&mdH7j34Dc=Y z$d^2F^|+m}jiJym6jH&eWc(8v4;Fz?_Y6LG#uRA4a8r*a#{(9MZdYSuJ%BaCpF*Lv zoq$o_uv)ZT3Du$}LwqZSM40hrUMpa`!4q?>i^l%PNUm_uA~Ha+uGfZ z5Fu5W&m<}b@Q9RS2z0lq-_;9C$7x~;&6_Qw3GtiXp%MMDqY0TgbI3dPIFq2JuC6|2 z#H51?HU(Q+wRqh2WV}C~l4Y5XGW0%^nBq|&DSr#pDJ&?+6FxrVl*hTpV(^I%#QnJ; zT_rBu5HnlbkA3gH{eCxlc;8;2L~PVLPOVx%>1UR|KX0PO!FT$cgx!e4A@5uA)mL~$ zcAGQ*d?@Z2!1;sU%Lh zf5O(@_(w$TrB`w0!F#S+omZQpm$*gdpIv$AvAvQ}hg9m>RUr77&S$z7yxKe1U1{+hA#w8$q#FkNTF1_Ufyr6oRz8t*Xt+P z_B7SEkJJf8ntKE94JPM4pWxTk>wRl=0v#}@kYK+9gHT>YWGR117Lug&_$jVK2242J zD#Jqz4X5mEs3qdSzi8M3$e7ACOii0F?rOv>gG+(|vjO}2znvd8-`bFD*9&;BIsXMPQyJustmX=N2_OQk>yt_9}vu>io3@v(Q&mV3TO5)dC_hc#Mr3E&U zFkZvQ!QV!Ay??2)K8`u)WFxTn_BTCXrHcg)z{rye99Ma(_mP_ex_D<)=fgp+pF9EKu63&Op4osuU!56omX*M zsDNFR8%{hjQ0;OnV%)5tEsd1N6)w;$OM{u~^E05=9GFoNWq4aT?C-VRr@K4}mYckK zW=ej*y60lMNAq4OJW<7(418*F=&qz#IrPPgarGUo_!qvQTWi;=3rQ6WJJG~EmnJ8@ zx?Migq9Lfze)wGn%-1=2KNLa5m1~$2ngu!$F)>YQX5A`o%ylfJv3Du48RT#A9#B?F zaMTIqO6BD%;F|s{;>N4>@yGJ+?zlF{p^tq(F86`Ipshx2!YSqE1&*>ja$KPv#JS$Db3Fy3`!y=X7WJ-m&pP7avqSrz%WGZOR39GdDd|nEbMfZP7(Xn;Xa9=CQM@5!H8}ebF7eEoK+G zQ}@}ah0`d()0|epZW?Cklp!JN?ZaOBYLmp|T4nC~=KA`&xOE>DtFFF2-J7>Oa*ufg z+=nXACNg;5N|%2@y*X+=_x_F*!kUcWet(?WOT5sdW%~;7qHuY2?vxUTjE*9sAfqO2 zY8-Re>k4ILahA2074|;cZKC$sYgruK6R)MoRYTbn+VC_U<~PqhoWVk%#9Nj4Io{k6 z@7Az*i{t7R6CTB%dwx|d!A?#Y@Y%XBss+#4_re279F*Wln{Z{XTm&Lxt12Bsy1JyX zOiIbJ<0vRGnV6WoMDLWGQ?IOTBA5+&03+5mM21g>vrEm4Eo9_jc{ENZ&l_iU{frta z-Ul#t68B+?W)c4@8yh-)e*Vy{0qrN|!2^-%dWLChmaZ`tUbDsVq zDh)kHtWNClF2ncpY>yvhe;=Y3!d-Oi_#{)>eXET)SK3cvBj;6&0Z&g$mcDPLN@Vx` zB_SlMGh3=Th$#P2@A1-uvQ|j8|A8CHuLE^q;may)zbq^&>azZdA_`>wzb2_+wdQ4S tl-L|?sIRZTY>v9R-b=Vd*EsEI(C%%u)9mPYA7a-Rpr(RQ{s>2g{1@mKk){9u literal 0 HcmV?d00001 diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/40px.png b/InvenTree/InvenTree/static/script/jstree/themes/default/40px.png new file mode 100644 index 0000000000000000000000000000000000000000..2a3fcb9dfacf4e82a4c3ac3a6cd1650af966fc29 GIT binary patch literal 2215 zcmZuzdpr|rA0P9&=N6Vrbc&;6OvQ;bysG804oRQpZq($GSx1;iE@jnT7TOk}w=~m@ zc?mHyjiU%P6}84pNH*p&Gq)Wl@25|l_x=6xe7}D@m*4mM{GQ+Exq8&gZIh~@DgXf3 z;06CsAaGgD})FP|{?C6o>uywSxwUvF1b+R5pp>TtI8`*63H~zl_3Wbss z{x!e8k>0suUcT!nC$Ffetg4~A)%2&M{z1Vjt7`)%*X#iRr4^4uuE((-gxrZn&QA68 zVJ+{|-H)uBW$==osQl{pnK{b&(#5_~^EB*9BegpiNPk7}k-Zlm$AFmWazI7(ExV9^ zk-Y#0cT9eW-qNkGHm0{Z5O5JoX;Wk-RbBUUS)3qhKUAusZx0vpau5fs01FHZ*5-?z zR(+Oi^6((%=UlpwA0d*UKQ&wPFC{rFz9!Hm4Gp+@y_JjJvx8-P$lzg7qfPSk?z5(G zMp(`*y5vejLA{Fcg2gn~W@t!_QJ zF>k419eO3fyyo5sZkW)>7~sxY&>|0 z9B_}^J8x6&VRQXUC`8CXH!3|IB2pyjh_v|*6t--jOrorku5t0Px($|-khHKLzCvFO;u*P&09w^Sb-08AfxmU}| zmzOfPpA)O=S8<7>?)SibXpdi#!uE?EU=Ut2;6po`U@i_HW{%JXdQN({pHZ{gwpS4i z3Iy8YyE6jY7nnKWS-ic~FigRKSp!V{CcMZM-=UMCbjQ3vsT^kpaGy~&pHa_1<&(1e zNx2CTjTC+TK0nA?$Hn0KH#&Z zow#nhAIj$MioaGA#>8sbqHUC5p+*|qR>2}2%;#MjOg5-gergaj!tLutFMFzFOwz@x zf`$T;a>KhoPH$xjP9=S^Ibl^m4-Bxy66(uub0xR}d4zUiF|W*JdQ)0G;*b@9H2Y3H zuCX;`+EK{+updqBuV3rgDVp+myKPZ4_k1UIwLODczE8CDaEDLkucD={gFbn?MMYRE zRXa6jLvcX!Jxw?1VWr0-HHNnclAB^pMyR zaUm6lE2xbaXWc)WlC1zh&LL;+-I6{U^=}Qo8ZW+zouOz8;nsY7=oe658`=Je4Y|_> z8562Sw()rtGP^DG(%t3?7~`dT%6m49as5bgSkaN(x@W1{QMzRL|Lfb2)#MGFLR`A5 z{qf05chiRWp9&o@)5lz6c~kBG?qsfZT}a3nI{NCd>Pl|@1tL$->aCd8)q&Q{#N%AR z4oTyss`N}$hvkKSyRWZ%m!rtXB9jAXC5r#;65pqdk!buNg9gLgebf4nP3tNam}!nQS?nGW zNY)j^>s|Y$RB=VC7s$X{$S>cH04{siWUThqWVCQQYM?k%p~Pdmb+yaMxKpztR@sFm z;(HzB2+u_pP~ReRaPnIifi5sZBY-mCmR-F2t>+i|&TB62;TU|M%Z76&l-Hm}i>Ely zqL}Yn+r~t5TK6{vKHroKwV|b-M|=}yvM(T3e{AA&tjQU1>|-8biB$y_ty1M2 zQn`uV*Tqee#kymnX8!EtX1Y|m;4;ZUHmP-vahom%T40;9;QGc4$VUlkd5Wu9t}G~4 zJHOam&@cMXEHlbM413uRH;ofBS;6Nkhuc$HO0qy5Da%1+W%m`_mUUnjwklqNh;uoF zaxG&J{`7(S!X)2i`{2!PzDiyKC@~M+n-bmeAZ97jlG!ub6Q>JxzWsu;e?JOt`rBrQ zr!{`iV0Y&$F?E)&Z6k$}Kkl5!L4X{lhG$g;do=mQ2;hL;)R2~7I}M&4;9vDK<^c|_ z8-ECiU>v^tIY!q(9or|F)`1as4-nllb}`cIvF#keoVTT)%JLsQO;`&^7s@ijz{w+KUWF5I$uu8et;cSaKgDyMzyvMU8o;T`3T z6U>KL=7#yfkQ}N+-7WaVVdb!Qdy@MfwBX7rKkc|=D4L8+73~bx8}82vbsJ&bW)TOi z2T;tavYDAY(!)7469VkflwAv-0C9g;!9-}^zfpJGF3>W`3R??#Z-kvT+J|-yqR$68 z4G2w)6;V*nEPM=rnoH_Y&IL5Fo$8_~jHl#~t^Qr9>Ab{DZXSJp7Y*EQL_{VbN5hN< zh#ljWG)_yMotEI*Nc>g@a_!41lU&a>YUA$;#a;pW?{K)xVCnfvd1^k1qMBZfM9@no znUdmv#^!V&Y2e^qB5zlee2IH3^&;K+H~dlI5Hs+;C2YH{@G_pYp!&8&YA03I-}LzM@R GnSTO{AtE3E literal 0 HcmV?d00001 diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/style.css b/InvenTree/InvenTree/static/script/jstree/themes/default/style.css new file mode 100644 index 0000000000..b50e6a2c53 --- /dev/null +++ b/InvenTree/InvenTree/static/script/jstree/themes/default/style.css @@ -0,0 +1,1106 @@ +/* jsTree default theme */ +.jstree-node, +.jstree-children, +.jstree-container-ul { + display: block; + margin: 0; + padding: 0; + list-style-type: none; + list-style-image: none; +} +.jstree-node { + white-space: nowrap; +} +.jstree-anchor { + display: inline-block; + color: black; + white-space: nowrap; + padding: 0 4px 0 1px; + margin: 0; + vertical-align: top; +} +.jstree-anchor:focus { + outline: 0; +} +.jstree-anchor, +.jstree-anchor:link, +.jstree-anchor:visited, +.jstree-anchor:hover, +.jstree-anchor:active { + text-decoration: none; + color: inherit; +} +.jstree-icon { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0; + vertical-align: top; + text-align: center; +} +.jstree-icon:empty { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0; + vertical-align: top; + text-align: center; +} +.jstree-ocl { + cursor: pointer; +} +.jstree-leaf > .jstree-ocl { + cursor: default; +} +.jstree .jstree-open > .jstree-children { + display: block; +} +.jstree .jstree-closed > .jstree-children, +.jstree .jstree-leaf > .jstree-children { + display: none; +} +.jstree-anchor > .jstree-themeicon { + margin-right: 2px; +} +.jstree-no-icons .jstree-themeicon, +.jstree-anchor > .jstree-themeicon-hidden { + display: none; +} +.jstree-hidden, +.jstree-node.jstree-hidden { + display: none; +} +.jstree-rtl .jstree-anchor { + padding: 0 1px 0 4px; +} +.jstree-rtl .jstree-anchor > .jstree-themeicon { + margin-left: 2px; + margin-right: 0; +} +.jstree-rtl .jstree-node { + margin-left: 0; +} +.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; +} +.jstree-wholerow-ul { + position: relative; + display: inline-block; + min-width: 100%; +} +.jstree-wholerow-ul .jstree-leaf > .jstree-ocl { + cursor: pointer; +} +.jstree-wholerow-ul .jstree-anchor, +.jstree-wholerow-ul .jstree-icon { + position: relative; +} +.jstree-wholerow-ul .jstree-wholerow { + width: 100%; + cursor: pointer; + position: absolute; + left: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.jstree-contextmenu .jstree-anchor { + -webkit-user-select: none; + /* disable selection/Copy of UIWebView */ + -webkit-touch-callout: none; + /* disable the IOS popup when long-press on a link */ + user-select: none; +} +.vakata-context { + display: none; +} +.vakata-context, +.vakata-context ul { + margin: 0; + padding: 2px; + position: absolute; + background: #f5f5f5; + border: 1px solid #979797; + box-shadow: 2px 2px 2px #999999; +} +.vakata-context ul { + list-style: none; + left: 100%; + margin-top: -2.7em; + margin-left: -4px; +} +.vakata-context .vakata-context-right ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context li { + list-style: none; +} +.vakata-context li > a { + display: block; + padding: 0 2em 0 2em; + text-decoration: none; + width: auto; + color: black; + white-space: nowrap; + line-height: 2.4em; + text-shadow: 1px 1px 0 white; + border-radius: 1px; +} +.vakata-context li > a:hover { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); + background-position: right center; + background-repeat: no-repeat; +} +.vakata-context li > a:focus { + outline: 0; +} +.vakata-context .vakata-context-no-icons { + margin-left: 0; +} +.vakata-context .vakata-context-hover > a { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context .vakata-context-separator > a, +.vakata-context .vakata-context-separator > a:hover { + background: white; + border: 0; + border-top: 1px solid #e2e3e3; + height: 1px; + min-height: 1px; + max-height: 1px; + padding: 0; + margin: 0 0 0 2.4em; + border-left: 1px solid #e0e0e0; + text-shadow: 0 0 0 transparent; + box-shadow: 0 0 0 transparent; + border-radius: 0; +} +.vakata-context .vakata-contextmenu-disabled a, +.vakata-context .vakata-contextmenu-disabled a:hover { + color: silver; + background-color: transparent; + border: 0; + box-shadow: 0 0 0; +} +.vakata-context .vakata-contextmenu-disabled > a > i { + filter: grayscale(100%); +} +.vakata-context li > a > i { + text-decoration: none; + display: inline-block; + width: 2.4em; + height: 2.4em; + background: transparent; + margin: 0 0 0 -2em; + vertical-align: top; + text-align: center; + line-height: 2.4em; +} +.vakata-context li > a > i:empty { + width: 2.4em; + line-height: 2.4em; +} +.vakata-context li > a .vakata-contextmenu-sep { + display: inline-block; + width: 1px; + height: 2.4em; + background: white; + margin: 0 0.5em 0 0; + border-left: 1px solid #e2e3e3; +} +.vakata-context .vakata-contextmenu-shortcut { + font-size: 0.8em; + color: silver; + opacity: 0.5; + display: none; +} +.vakata-context-rtl ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context-rtl li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); + background-position: left center; + background-repeat: no-repeat; +} +.vakata-context-rtl .vakata-context-separator > a { + margin: 0 2.4em 0 0; + border-left: 0; + border-right: 1px solid #e2e3e3; +} +.vakata-context-rtl .vakata-context-left ul { + right: auto; + left: 100%; + margin-left: -4px; + margin-right: auto; +} +.vakata-context-rtl li > a > i { + margin: 0 -2em 0 0; +} +.vakata-context-rtl li > a .vakata-contextmenu-sep { + margin: 0 0 0 0.5em; + border-left-color: white; + background: #e2e3e3; +} +#jstree-marker { + position: absolute; + top: 0; + left: 0; + margin: -5px 0 0 0; + padding: 0; + border-right: 0; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid; + width: 0; + height: 0; + font-size: 0; + line-height: 0; +} +#jstree-dnd { + line-height: 16px; + margin: 0; + padding: 4px; +} +#jstree-dnd .jstree-icon, +#jstree-dnd .jstree-copy { + display: inline-block; + text-decoration: none; + margin: 0 2px 0 0; + padding: 0; + width: 16px; + height: 16px; +} +#jstree-dnd .jstree-ok { + background: green; +} +#jstree-dnd .jstree-er { + background: red; +} +#jstree-dnd .jstree-copy { + margin: 0 2px 0 2px; +} +.jstree-default .jstree-node, +.jstree-default .jstree-icon { + background-repeat: no-repeat; + background-color: transparent; +} +.jstree-default .jstree-anchor, +.jstree-default .jstree-animated, +.jstree-default .jstree-wholerow { + transition: background-color 0.15s, box-shadow 0.15s; +} +.jstree-default .jstree-hovered { + background: #e7f4f9; + border-radius: 2px; + box-shadow: inset 0 0 1px #cccccc; +} +.jstree-default .jstree-context { + background: #e7f4f9; + border-radius: 2px; + box-shadow: inset 0 0 1px #cccccc; +} +.jstree-default .jstree-clicked { + background: #beebff; + border-radius: 2px; + box-shadow: inset 0 0 1px #999999; +} +.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { + display: none; +} +.jstree-default .jstree-disabled { + background: transparent; + color: #666666; +} +.jstree-default .jstree-disabled.jstree-hovered { + background: transparent; + box-shadow: none; +} +.jstree-default .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default .jstree-disabled > .jstree-icon { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default .jstree-search { + font-style: italic; + color: #8b0000; + font-weight: bold; +} +.jstree-default .jstree-no-checkboxes .jstree-checkbox { + display: none !important; +} +.jstree-default.jstree-checkbox-no-clicked .jstree-clicked { + background: transparent; + box-shadow: none; +} +.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { + background: #e7f4f9; +} +.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { + background: transparent; +} +.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { + background: #e7f4f9; +} +.jstree-default > .jstree-striped { + min-width: 100%; + display: inline-block; + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; +} +.jstree-default > .jstree-wholerow-ul .jstree-hovered, +.jstree-default > .jstree-wholerow-ul .jstree-clicked { + background: transparent; + box-shadow: none; + border-radius: 0; +} +.jstree-default .jstree-wholerow { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.jstree-default .jstree-wholerow-hovered { + background: #e7f4f9; +} +.jstree-default .jstree-wholerow-clicked { + background: #beebff; + background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); + background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); +} +.jstree-default .jstree-node { + min-height: 24px; + line-height: 24px; + margin-left: 24px; + min-width: 24px; +} +.jstree-default .jstree-anchor { + line-height: 24px; + height: 24px; +} +.jstree-default .jstree-icon { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default .jstree-icon:empty { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default.jstree-rtl .jstree-node { + margin-right: 24px; +} +.jstree-default .jstree-wholerow { + height: 24px; +} +.jstree-default .jstree-node, +.jstree-default .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default .jstree-node { + background-position: -292px -4px; + background-repeat: repeat-y; +} +.jstree-default .jstree-last { + background: transparent; +} +.jstree-default .jstree-open > .jstree-ocl { + background-position: -132px -4px; +} +.jstree-default .jstree-closed > .jstree-ocl { + background-position: -100px -4px; +} +.jstree-default .jstree-leaf > .jstree-ocl { + background-position: -68px -4px; +} +.jstree-default .jstree-themeicon { + background-position: -260px -4px; +} +.jstree-default > .jstree-no-dots .jstree-node, +.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -4px; +} +.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -4px; +} +.jstree-default .jstree-disabled { + background: transparent; +} +.jstree-default .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default .jstree-checkbox { + background-position: -164px -4px; +} +.jstree-default .jstree-checkbox:hover { + background-position: -164px -36px; +} +.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default .jstree-checked > .jstree-checkbox { + background-position: -228px -4px; +} +.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default .jstree-checked > .jstree-checkbox:hover { + background-position: -228px -36px; +} +.jstree-default .jstree-anchor > .jstree-undetermined { + background-position: -196px -4px; +} +.jstree-default .jstree-anchor > .jstree-undetermined:hover { + background-position: -196px -36px; +} +.jstree-default .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default > .jstree-striped { + background-size: auto 48px; +} +.jstree-default.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -132px -36px; +} +.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -100px -36px; +} +.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -68px -36px; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -36px; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -36px; +} +.jstree-default .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default .jstree-file { + background: url("32px.png") -100px -68px no-repeat; +} +.jstree-default .jstree-folder { + background: url("32px.png") -260px -4px no-repeat; +} +.jstree-default > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default { + line-height: 24px; + padding: 0 4px; +} +#jstree-dnd.jstree-default .jstree-ok, +#jstree-dnd.jstree-default .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default i { + background: transparent; + width: 24px; + height: 24px; + line-height: 24px; +} +#jstree-dnd.jstree-default .jstree-ok { + background-position: -4px -68px; +} +#jstree-dnd.jstree-default .jstree-er { + background-position: -36px -68px; +} +.jstree-default .jstree-ellipsis { + overflow: hidden; +} +.jstree-default .jstree-ellipsis .jstree-anchor { + width: calc(100% - 29px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); +} +.jstree-default.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-small .jstree-node { + min-height: 18px; + line-height: 18px; + margin-left: 18px; + min-width: 18px; +} +.jstree-default-small .jstree-anchor { + line-height: 18px; + height: 18px; +} +.jstree-default-small .jstree-icon { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-small .jstree-icon:empty { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-small.jstree-rtl .jstree-node { + margin-right: 18px; +} +.jstree-default-small .jstree-wholerow { + height: 18px; +} +.jstree-default-small .jstree-node, +.jstree-default-small .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-small .jstree-node { + background-position: -295px -7px; + background-repeat: repeat-y; +} +.jstree-default-small .jstree-last { + background: transparent; +} +.jstree-default-small .jstree-open > .jstree-ocl { + background-position: -135px -7px; +} +.jstree-default-small .jstree-closed > .jstree-ocl { + background-position: -103px -7px; +} +.jstree-default-small .jstree-leaf > .jstree-ocl { + background-position: -71px -7px; +} +.jstree-default-small .jstree-themeicon { + background-position: -263px -7px; +} +.jstree-default-small > .jstree-no-dots .jstree-node, +.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -7px; +} +.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -7px; +} +.jstree-default-small .jstree-disabled { + background: transparent; +} +.jstree-default-small .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-small .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-small .jstree-checkbox { + background-position: -167px -7px; +} +.jstree-default-small .jstree-checkbox:hover { + background-position: -167px -39px; +} +.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-small .jstree-checked > .jstree-checkbox { + background-position: -231px -7px; +} +.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-small .jstree-checked > .jstree-checkbox:hover { + background-position: -231px -39px; +} +.jstree-default-small .jstree-anchor > .jstree-undetermined { + background-position: -199px -7px; +} +.jstree-default-small .jstree-anchor > .jstree-undetermined:hover { + background-position: -199px -39px; +} +.jstree-default-small .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-small > .jstree-striped { + background-size: auto 36px; +} +.jstree-default-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -135px -39px; +} +.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -103px -39px; +} +.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -71px -39px; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -39px; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -39px; +} +.jstree-default-small .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-small .jstree-file { + background: url("32px.png") -103px -71px no-repeat; +} +.jstree-default-small .jstree-folder { + background: url("32px.png") -263px -7px no-repeat; +} +.jstree-default-small > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-small { + line-height: 18px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-small .jstree-ok, +#jstree-dnd.jstree-default-small .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-small i { + background: transparent; + width: 18px; + height: 18px; + line-height: 18px; +} +#jstree-dnd.jstree-default-small .jstree-ok { + background-position: -7px -71px; +} +#jstree-dnd.jstree-default-small .jstree-er { + background-position: -39px -71px; +} +.jstree-default-small .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-small .jstree-ellipsis .jstree-anchor { + width: calc(100% - 23px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); +} +.jstree-default-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-large .jstree-node { + min-height: 32px; + line-height: 32px; + margin-left: 32px; + min-width: 32px; +} +.jstree-default-large .jstree-anchor { + line-height: 32px; + height: 32px; +} +.jstree-default-large .jstree-icon { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-large .jstree-icon:empty { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-large.jstree-rtl .jstree-node { + margin-right: 32px; +} +.jstree-default-large .jstree-wholerow { + height: 32px; +} +.jstree-default-large .jstree-node, +.jstree-default-large .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-large .jstree-node { + background-position: -288px 0px; + background-repeat: repeat-y; +} +.jstree-default-large .jstree-last { + background: transparent; +} +.jstree-default-large .jstree-open > .jstree-ocl { + background-position: -128px 0px; +} +.jstree-default-large .jstree-closed > .jstree-ocl { + background-position: -96px 0px; +} +.jstree-default-large .jstree-leaf > .jstree-ocl { + background-position: -64px 0px; +} +.jstree-default-large .jstree-themeicon { + background-position: -256px 0px; +} +.jstree-default-large > .jstree-no-dots .jstree-node, +.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px 0px; +} +.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px 0px; +} +.jstree-default-large .jstree-disabled { + background: transparent; +} +.jstree-default-large .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-large .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-large .jstree-checkbox { + background-position: -160px 0px; +} +.jstree-default-large .jstree-checkbox:hover { + background-position: -160px -32px; +} +.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-large .jstree-checked > .jstree-checkbox { + background-position: -224px 0px; +} +.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-large .jstree-checked > .jstree-checkbox:hover { + background-position: -224px -32px; +} +.jstree-default-large .jstree-anchor > .jstree-undetermined { + background-position: -192px 0px; +} +.jstree-default-large .jstree-anchor > .jstree-undetermined:hover { + background-position: -192px -32px; +} +.jstree-default-large .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-large > .jstree-striped { + background-size: auto 64px; +} +.jstree-default-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-large.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -128px -32px; +} +.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -96px -32px; +} +.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -64px -32px; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px -32px; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px -32px; +} +.jstree-default-large .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-large .jstree-file { + background: url("32px.png") -96px -64px no-repeat; +} +.jstree-default-large .jstree-folder { + background: url("32px.png") -256px 0px no-repeat; +} +.jstree-default-large > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-large { + line-height: 32px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-large .jstree-ok, +#jstree-dnd.jstree-default-large .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-large i { + background: transparent; + width: 32px; + height: 32px; + line-height: 32px; +} +#jstree-dnd.jstree-default-large .jstree-ok { + background-position: 0px -64px; +} +#jstree-dnd.jstree-default-large .jstree-er { + background-position: -32px -64px; +} +.jstree-default-large .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-large .jstree-ellipsis .jstree-anchor { + width: calc(100% - 37px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); +} +.jstree-default-large.jstree-rtl .jstree-last { + background: transparent; +} +@media (max-width: 768px) { + #jstree-dnd.jstree-dnd-responsive { + line-height: 40px; + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + #jstree-dnd.jstree-dnd-responsive > i { + background: transparent; + width: 40px; + height: 40px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-ok { + background-image: url("40px.png"); + background-position: 0 -200px; + background-size: 120px 240px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-er { + background-image: url("40px.png"); + background-position: -40px -200px; + background-size: 120px 240px; + } + #jstree-marker.jstree-dnd-responsive { + border-left-width: 10px; + border-top-width: 10px; + border-bottom-width: 10px; + margin-top: -10px; + } +} +@media (max-width: 768px) { + .jstree-default-responsive { + /* + .jstree-open > .jstree-ocl, + .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } + */ + } + .jstree-default-responsive .jstree-icon { + background-image: url("40px.png"); + } + .jstree-default-responsive .jstree-node, + .jstree-default-responsive .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-responsive .jstree-node { + min-height: 40px; + line-height: 40px; + margin-left: 40px; + min-width: 40px; + white-space: nowrap; + } + .jstree-default-responsive .jstree-anchor { + line-height: 40px; + height: 40px; + } + .jstree-default-responsive .jstree-icon, + .jstree-default-responsive .jstree-icon:empty { + width: 40px; + height: 40px; + line-height: 40px; + } + .jstree-default-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + } + .jstree-default-responsive.jstree-rtl .jstree-node { + margin-left: 0; + margin-right: 40px; + background: transparent; + } + .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; + } + .jstree-default-responsive .jstree-ocl, + .jstree-default-responsive .jstree-themeicon, + .jstree-default-responsive .jstree-checkbox { + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-leaf > .jstree-ocl, + .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-responsive .jstree-open > .jstree-ocl { + background-position: 0 0 !important; + } + .jstree-default-responsive .jstree-closed > .jstree-ocl { + background-position: 0 -40px !important; + } + .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -40px 0 !important; + } + .jstree-default-responsive .jstree-themeicon { + background-position: -40px -40px; + } + .jstree-default-responsive .jstree-checkbox, + .jstree-default-responsive .jstree-checkbox:hover { + background-position: -40px -80px; + } + .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, + .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, + .jstree-default-responsive .jstree-checked > .jstree-checkbox, + .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { + background-position: 0 -80px; + } + .jstree-default-responsive .jstree-anchor > .jstree-undetermined, + .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { + background-position: 0 -120px; + } + .jstree-default-responsive .jstree-anchor { + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + .jstree-default-responsive > .jstree-striped { + background: transparent; + } + .jstree-default-responsive .jstree-wholerow { + border-top: 1px solid rgba(255, 255, 255, 0.7); + border-bottom: 1px solid rgba(64, 64, 64, 0.2); + background: #ebebeb; + height: 40px; + } + .jstree-default-responsive .jstree-wholerow-hovered { + background: #e7f4f9; + } + .jstree-default-responsive .jstree-wholerow-clicked { + background: #beebff; + } + .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { + box-shadow: inset 0 -6px 3px -5px #666666; + } + .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { + box-shadow: inset 0 6px 3px -5px #666666; + border-top: 0; + } + .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { + box-shadow: none; + } + .jstree-default-responsive .jstree-node, + .jstree-default-responsive .jstree-icon, + .jstree-default-responsive .jstree-node > .jstree-ocl, + .jstree-default-responsive .jstree-themeicon, + .jstree-default-responsive .jstree-checkbox { + background-image: url("40px.png"); + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-node { + background-position: -80px 0; + background-repeat: repeat-y; + } + .jstree-default-responsive .jstree-last { + background: transparent; + } + .jstree-default-responsive .jstree-leaf > .jstree-ocl { + background-position: -40px -120px; + } + .jstree-default-responsive .jstree-last > .jstree-ocl { + background-position: -40px -160px; + } + .jstree-default-responsive .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; + } + .jstree-default-responsive .jstree-file { + background: url("40px.png") 0 -160px no-repeat; + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-folder { + background: url("40px.png") -40px -40px no-repeat; + background-size: 120px 240px; + } + .jstree-default-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; + } +} diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/style.min.css b/InvenTree/InvenTree/static/script/jstree/themes/default/style.min.css new file mode 100644 index 0000000000..0c6897a98f --- /dev/null +++ b/InvenTree/InvenTree/static/script/jstree/themes/default/style.min.css @@ -0,0 +1 @@ +.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:black;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em 0 2em;text-decoration:none;width:auto;color:black;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 white;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-no-icons{margin-left:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:white;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context .vakata-contextmenu-disabled>a>i{filter:grayscale(100%)}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:transparent;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:white;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:white;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px 0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-animated,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #cccccc}.jstree-default .jstree-context{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #cccccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:transparent;color:#666666}.jstree-default .jstree-disabled.jstree-hovered{background:transparent;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:bold}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none !important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:transparent;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:transparent}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:transparent;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:linear-gradient(to bottom, #beebff 0, #a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url("32px.png")}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:transparent}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:transparent}.jstree-default .jstree-disabled.jstree-hovered{background:transparent}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default .jstree-file{background:url("32px.png") -100px -68px no-repeat}.jstree-default .jstree-folder{background:url("32px.png") -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:transparent;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default .jstree-ellipsis{overflow:hidden}.jstree-default .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url("32px.png")}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:transparent}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:transparent}.jstree-default-small .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-small .jstree-file{background:url("32px.png") -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url("32px.png") -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:transparent;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small .jstree-ellipsis{overflow:hidden}.jstree-default-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url("32px.png")}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:transparent}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:transparent}.jstree-default-large .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-large .jstree-file{background:url("32px.png") -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url("32px.png") -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:transparent;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large .jstree-ellipsis{overflow:hidden}.jstree-default-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}#jstree-dnd.jstree-dnd-responsive>i{background:transparent;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url("40px.png");background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url("40px.png");background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url("40px.png")}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:transparent}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl,.jstree-default-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0 !important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px !important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0 !important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}.jstree-default-responsive>.jstree-striped{background:transparent}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,0.7);border-bottom:1px solid rgba(64,64,64,0.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url("40px.png");background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:transparent}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url("40px.png") 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url("40px.png") -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}} \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/throbber.gif b/InvenTree/InvenTree/static/script/jstree/themes/default/throbber.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf06c1ad0f00be54b10f73e03c11d182d411fad1 GIT binary patch literal 1464 zcmZvceN0nV9EQ&=r=^8TFHo@{ANQ70%LFN(7Ima80;R!PL9rm3)*-a&w4%$!u$DOG!y_yWJ*}DKj&Z!{KyycdONE2;suQ z0>0oY%h;NiE|O;?tl@hho}Kt#A?am%R7ds{W5+Z{)R=0oO1J-@s(6j&K*>RXzl3BT zzyL9xm7Yix2%*;PtW~c(I@)n*B9Lt|nX$@5x^P+w+`!wx60-9`uo!Bs<$^EHs)-UfnV9p;}KqjClm$MVbM$&>WbPV&ij*ka|M=U@X9sGyLDa1jBO)0C&2bFU5^USyT%ow`Y6z3+!yPy*Q>C*G{34S5-7|bGDZQ z;p6Czucr+YRHzuORgJ5K?Gb~I)~a}v9rie@5~I_JSG?&Y0H19O93PH4T#q0ADD;!P zk^f0VJ^TO`dJ=PNij?y~;w)~e*CcK*ZY52{2MQ$)2O(_;C7G%3Zo-!*0`gZhYhSL< znt;k5!N~ERdLnRmTxxns-8=KZykgLf4(wIkTqMjv3H^P0 z0}wE)29!5I&o+~aFX!~k)T{bi(Dhe zIH87(qxAGc0w`-lB2B++2#J?l`gGWV+B}h2SM(t^bWT#g9>Fcs52mlk>PRPILR$oj*LlzNEnI}n!K<3 z)aPyCTC2f!DRM}V09yub^?|M=!+Y@mELj`_)TX%OO>kCHio!~( znD>rK?x{ZA<6qyz3f`ZjI~5!kK{oSzRuM%1ivpD2V-;hMHZiNKhH-%|h?1H9lphlk zFgW#r;6}N_Nt!r84^6u^hv5%Xq^WPf0T0|iW8f(hZ6Nk)qHY$>y?>U{G)$G{h>Nyn zpO@v$E*p6=g#Y1VcDTfCbn@Au-m=SFxmH%8-f*3fsjN8kedp=8=
      +
      + +
      -
      - -
      -
      From 9ebbf8190c4e45979b5cdae7c084eb6abbb585ca Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 6 Dec 2021 01:35:14 +0100 Subject: [PATCH 03/35] add tree to replication --- InvenTree/templates/base.html | 1 + 1 file changed, 1 insertion(+) diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index 7a8f256105..834ebd0db0 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -156,6 +156,7 @@ + From 70939a0cf9a652a9287a39a89ae309d8ecb63429 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 6 Dec 2021 22:35:14 +0100 Subject: [PATCH 04/35] first working example --- InvenTree/part/api.py | 27 +++++++++++++++ InvenTree/part/serializers.py | 33 ++++++++++++++++++ InvenTree/part/templates/part/category.html | 5 +++ InvenTree/part/templates/part/detail.html | 5 +++ InvenTree/templates/base.html | 1 + InvenTree/templates/js/dynamic/nav.js | 37 +++++++++++++++++++++ 6 files changed, 108 insertions(+) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index c1b86b6528..05b94aef38 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -239,6 +239,32 @@ class CategoryParameterList(generics.ListAPIView): return queryset +class CategoryTree(generics.ListAPIView): + """ API endpoint for accessing a list of PartCategory objects ready for rendering a jstree. + """ + + queryset = PartCategory.objects.all() + serializer_class = part_serializers.CategoryTree + + def filter_queryset(self, queryset): + """ + """ + queryset = super().filter_queryset(queryset) + + params = self.request.query_params + cat_id = params.get('id', None) + + if cat_id in (None, '', '#', ): + queryset = queryset.filter(parent=None) + else: + queryset = queryset.filter(parent_id=cat_id) + + return queryset + + def get(self, request, *args, **kwargs): + return super().get(request, *args, **kwargs) + + class PartSalePriceList(generics.ListCreateAPIView): """ API endpoint for list view of PartSalePriceBreak model @@ -1515,6 +1541,7 @@ part_api_urls = [ # Base URL for PartCategory API endpoints url(r'^category/', include([ + url(r'^tree/(?P[-\w]+)/', CategoryTree.as_view(), name='api-part-category-tree'), url(r'^parameters/', CategoryParameterList.as_view(), name='api-part-category-parameter-list'), url(r'^(?P\d+)/?', CategoryDetail.as_view(), name='api-part-category-detail'), diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 1be81c16ba..7d15f7c4e6 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -70,6 +70,39 @@ class CategorySerializer(InvenTreeModelSerializer): ] +class CategoryTree(InvenTreeModelSerializer): + """ Serializer for PartCategory """ + + id = serializers.IntegerField(source='pk', read_only=True) + + text = serializers.CharField(source='name', read_only=True) + + parent = serializers.SerializerMethodField() + + children = serializers.SerializerMethodField() + + a_attr = serializers.SerializerMethodField() + + def get_parent(self, obj): + return obj.parent.pk if obj.parent else '#' + + def get_children(self, obj): + return True if obj.has_children else False + + def get_a_attr(self, obj): + return {'href': obj.get_absolute_url()} + + class Meta: + model = PartCategory + fields = [ + 'id', + 'text', + 'parent', + 'children', + 'a_attr', + ] + + class PartAttachmentSerializer(InvenTreeAttachmentSerializer): """ Serializer for the PartAttachment class diff --git a/InvenTree/part/templates/part/category.html b/InvenTree/part/templates/part/category.html index 4797571fda..62817516b7 100644 --- a/InvenTree/part/templates/part/category.html +++ b/InvenTree/part/templates/part/category.html @@ -6,6 +6,10 @@ {% include 'part/category_sidebar.html' %} {% endblock %} +{% block sidetree %} +
      +{% endblock %} + {% block heading %} {% if category %} {% trans "Part Category" %}: {{ category.name }} @@ -240,6 +244,7 @@ {% endif %} enableSidebar('category'); + enableSidetree('category'); loadPartCategoryTable( $('#subcategory-table'), { diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index 38bd406d75..67845d4611 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -9,6 +9,10 @@ {% include 'part/part_sidebar.html' %} {% endblock %} +{% block sidetree %} +
      +{% endblock %} + {% block page_content %}
      @@ -1061,5 +1065,6 @@ {% endif %} enableSidebar('part'); + enableSidetree('part'); {% endblock %} diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index e97324bf74..70abcca433 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -46,6 +46,7 @@ + diff --git a/InvenTree/templates/js/dynamic/nav.js b/InvenTree/templates/js/dynamic/nav.js index b99a3bb6bd..b0ffdb574c 100644 --- a/InvenTree/templates/js/dynamic/nav.js +++ b/InvenTree/templates/js/dynamic/nav.js @@ -145,6 +145,43 @@ function enableSidebar(label, options={}) { } +/** + * Enable support for a sidetree on this page + */ + function enableSidetree(label, options={}) { + $('#tree').jstree({ + 'core' : { + 'data' : { + 'url' : function (node) { + return '/api/part/category/tree/root/' + }, + 'data' : function (node) { + return { 'id' : node.id }; + } + } + } + }).bind("select_node.jstree",function (e, data) { + window.location.href = data.node.a_attr.href; + }); + + $('#sidetree-toggle').click(function() { + // Add callback to "collapse" and "expand" the sidebar + + // By default, the menu is "expanded" + var state = localStorage.getItem(`inventree-tree-state-${label}`) || 'expanded'; + + // We wish to "toggle" the state! + setSidebarState(label, state == 'expanded' ? 'collapsed' : 'expanded'); + }); + + // Set the initial state (default = expanded) + var state = localStorage.getItem(`inventree-tree-state-${label}`) || 'expanded'; + + // setSidebarState(label, state); + + // Finally, show the sidebar + $('#sidetree').show(); +} /* * Set the "toggle" state of the sidebar From 8e425e67a14ee89b16d0f793388c763dc6d9d7f0 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 6 Dec 2021 22:37:17 +0100 Subject: [PATCH 05/35] reduce --- InvenTree/templates/js/dynamic/nav.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/InvenTree/templates/js/dynamic/nav.js b/InvenTree/templates/js/dynamic/nav.js index b0ffdb574c..34a445a913 100644 --- a/InvenTree/templates/js/dynamic/nav.js +++ b/InvenTree/templates/js/dynamic/nav.js @@ -148,16 +148,12 @@ function enableSidebar(label, options={}) { /** * Enable support for a sidetree on this page */ - function enableSidetree(label, options={}) { + function enableSidetree(label) { $('#tree').jstree({ 'core' : { 'data' : { - 'url' : function (node) { - return '/api/part/category/tree/root/' - }, - 'data' : function (node) { - return { 'id' : node.id }; - } + 'url' : '/api/part/category/tree/root/', + 'data' : function (node) { return { 'id' : node.id }; } } } }).bind("select_node.jstree",function (e, data) { From c703f9993fe199f03773168997d28a4a7c84ca93 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 6 Dec 2021 22:37:42 +0100 Subject: [PATCH 06/35] make url simpler --- InvenTree/part/api.py | 2 +- InvenTree/templates/js/dynamic/nav.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 05b94aef38..fbd2ad939b 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1541,7 +1541,7 @@ part_api_urls = [ # Base URL for PartCategory API endpoints url(r'^category/', include([ - url(r'^tree/(?P[-\w]+)/', CategoryTree.as_view(), name='api-part-category-tree'), + url(r'^tree/', CategoryTree.as_view(), name='api-part-category-tree'), url(r'^parameters/', CategoryParameterList.as_view(), name='api-part-category-parameter-list'), url(r'^(?P\d+)/?', CategoryDetail.as_view(), name='api-part-category-detail'), diff --git a/InvenTree/templates/js/dynamic/nav.js b/InvenTree/templates/js/dynamic/nav.js index 34a445a913..7f3d789f41 100644 --- a/InvenTree/templates/js/dynamic/nav.js +++ b/InvenTree/templates/js/dynamic/nav.js @@ -152,7 +152,7 @@ function enableSidebar(label, options={}) { $('#tree').jstree({ 'core' : { 'data' : { - 'url' : '/api/part/category/tree/root/', + 'url' : '/api/part/category/tree/', 'data' : function (node) { return { 'id' : node.id }; } } } From b5ae9edc2ee33c5176d05aab45240f958df511ce Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 6 Dec 2021 23:48:21 +0100 Subject: [PATCH 07/35] style fixes --- InvenTree/templates/js/dynamic/nav.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/InvenTree/templates/js/dynamic/nav.js b/InvenTree/templates/js/dynamic/nav.js index 7f3d789f41..1c16c22200 100644 --- a/InvenTree/templates/js/dynamic/nav.js +++ b/InvenTree/templates/js/dynamic/nav.js @@ -7,6 +7,7 @@ addSidebarItem, addSidebarLink, enableSidebar, + enableSidetree, onPanelLoad, */ @@ -148,15 +149,15 @@ function enableSidebar(label, options={}) { /** * Enable support for a sidetree on this page */ - function enableSidetree(label) { +function enableSidetree(label) { $('#tree').jstree({ - 'core' : { - 'data' : { - 'url' : '/api/part/category/tree/', - 'data' : function (node) { return { 'id' : node.id }; } + 'core': { + 'data': { + 'url': '/api/part/category/tree/', + 'data': function(node){return {'id': node.id }; } } } - }).bind("select_node.jstree",function (e, data) { + }).bind('select_node.jstree', function(e, data) { window.location.href = data.node.a_attr.href; }); From f375ba96ae919e5465b4f7fbff0e141c15e407e4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 7 Dec 2021 00:21:33 +0100 Subject: [PATCH 08/35] add sidetree toggler function --- .../part/templates/part/category_sidebar.html | 3 +++ InvenTree/part/templates/part/part_sidebar.html | 4 +++- InvenTree/templates/base.html | 2 +- InvenTree/templates/js/dynamic/nav.js | 17 ++++++++++++++--- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/InvenTree/part/templates/part/category_sidebar.html b/InvenTree/part/templates/part/category_sidebar.html index 3d945d0433..fe3f33b780 100644 --- a/InvenTree/part/templates/part/category_sidebar.html +++ b/InvenTree/part/templates/part/category_sidebar.html @@ -4,6 +4,9 @@ {% settings_value 'PART_SHOW_IMPORT' as show_import %} +{% include "sidebar_toggle.html" with target="sidetree" %} + + {% trans "Subcategories" as text %} {% include "sidebar_item.html" with label="subcategories" text=text icon="fa-sitemap" %} {% trans "Parts" as text %} diff --git a/InvenTree/part/templates/part/part_sidebar.html b/InvenTree/part/templates/part/part_sidebar.html index 6299c6fedc..2a24623b0b 100644 --- a/InvenTree/part/templates/part/part_sidebar.html +++ b/InvenTree/part/templates/part/part_sidebar.html @@ -5,7 +5,9 @@ {% settings_value "PART_INTERNAL_PRICE" as show_internal_price %} {% settings_value 'PART_SHOW_RELATED' as show_related %} -{% include "sidebar_toggle.html" with target="#sidetree" %} +{% include "sidebar_toggle.html" with target="sidetree" %} + + {% trans "Parameters" as text %} {% include "sidebar_item.html" with label="part-parameters" text=text icon="fa-th-list" %} {% if part.is_template %} diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index 70abcca433..4ec04b4ff8 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -74,7 +74,7 @@
      -
      +
    • "); - this.element.attr('aria-activedescendant','j'+this._id+'_loading'); - } - this.load_node($.jstree.root, function (o, s) { - if(s) { - this.get_container_ul()[0].className = c; - if(this._firstChild(this.get_container_ul()[0])) { - this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id); - } - this.set_state($.extend(true, {}, this._data.core.state), function () { - /** - * triggered when a `refresh` call completes - * @event - * @name refresh.jstree - */ - this.trigger('refresh'); - }); - } - this._data.core.state = null; - }); - }, - /** - * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`. - * @name refresh_node(obj) - * @param {mixed} obj the node - * @trigger refresh_node.jstree - */ - refresh_node : function (obj) { - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - var opened = [], to_load = [], s = this._data.core.selected.concat([]); - to_load.push(obj.id); - if(obj.state.opened === true) { opened.push(obj.id); } - this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); }); - this._load_nodes(to_load, function (nodes) { - this.open_node(opened, false, 0); - this.select_node(s); - /** - * triggered when a node is refreshed - * @event - * @name refresh_node.jstree - * @param {Object} node - the refreshed node - * @param {Array} nodes - an array of the IDs of the nodes that were reloaded - */ - this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes }); - }.bind(this), false, true); - }, - /** - * set (change) the ID of a node - * @name set_id(obj, id) - * @param {mixed} obj the node - * @param {String} id the new ID - * @return {Boolean} - * @trigger set_id.jstree - */ - set_id : function (obj, id) { - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - var i, j, m = this._model.data, old = obj.id; - id = id.toString(); - // update parents (replace current ID with new one in children and children_d) - m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id; - for(i = 0, j = obj.parents.length; i < j; i++) { - m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id; - } - // update children (replace current ID with new one in parent and parents) - for(i = 0, j = obj.children.length; i < j; i++) { - m[obj.children[i]].parent = id; - } - for(i = 0, j = obj.children_d.length; i < j; i++) { - m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id; - } - i = $.inArray(obj.id, this._data.core.selected); - if(i !== -1) { this._data.core.selected[i] = id; } - // update model and obj itself (obj.id, this._model.data[KEY]) - i = this.get_node(obj.id, true); - if(i) { - i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor'); - if(this.element.attr('aria-activedescendant') === obj.id) { - this.element.attr('aria-activedescendant', id); - } - } - delete m[obj.id]; - obj.id = id; - obj.li_attr.id = id; - m[id] = obj; - /** - * triggered when a node id value is changed - * @event - * @name set_id.jstree - * @param {Object} node - * @param {String} old the old id - */ - this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old }); - return true; - }, - /** - * get the text value of a node - * @name get_text(obj) - * @param {mixed} obj the node - * @return {String} - */ - get_text : function (obj) { - obj = this.get_node(obj); - return (!obj || obj.id === $.jstree.root) ? false : obj.text; - }, - /** - * set the text value of a node. Used internally, please use `rename_node(obj, val)`. - * @private - * @name set_text(obj, val) - * @param {mixed} obj the node, you can pass an array to set the text on multiple nodes - * @param {String} val the new text value - * @return {Boolean} - * @trigger set_text.jstree - */ - set_text : function (obj, val) { - var t1, t2; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.set_text(obj[t1], val); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - obj.text = val; - if(this.get_node(obj, true).length) { - this.redraw_node(obj.id); - } - /** - * triggered when a node text value is changed - * @event - * @name set_text.jstree - * @param {Object} obj - * @param {String} text the new value - */ - this.trigger('set_text',{ "obj" : obj, "text" : val }); - return true; - }, - /** - * gets a JSON representation of a node (or the whole tree) - * @name get_json([obj, options]) - * @param {mixed} obj - * @param {Object} options - * @param {Boolean} options.no_state do not return state information - * @param {Boolean} options.no_id do not return ID - * @param {Boolean} options.no_children do not include children - * @param {Boolean} options.no_data do not include node data - * @param {Boolean} options.no_li_attr do not include LI attributes - * @param {Boolean} options.no_a_attr do not include A attributes - * @param {Boolean} options.flat return flat JSON instead of nested - * @return {Object} - */ - get_json : function (obj, options, flat) { - obj = this.get_node(obj || $.jstree.root); - if(!obj) { return false; } - if(options && options.flat && !flat) { flat = []; } - var tmp = { - 'id' : obj.id, - 'text' : obj.text, - 'icon' : this.get_icon(obj), - 'li_attr' : $.extend(true, {}, obj.li_attr), - 'a_attr' : $.extend(true, {}, obj.a_attr), - 'state' : {}, - 'data' : options && options.no_data ? false : $.extend(true, $.vakata.is_array(obj.data)?[]:{}, obj.data) - //( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ), - }, i, j; - if(options && options.flat) { - tmp.parent = obj.parent; - } - else { - tmp.children = []; - } - if(!options || !options.no_state) { - for(i in obj.state) { - if(obj.state.hasOwnProperty(i)) { - tmp.state[i] = obj.state[i]; - } - } - } else { - delete tmp.state; - } - if(options && options.no_li_attr) { - delete tmp.li_attr; - } - if(options && options.no_a_attr) { - delete tmp.a_attr; - } - if(options && options.no_id) { - delete tmp.id; - if(tmp.li_attr && tmp.li_attr.id) { - delete tmp.li_attr.id; - } - if(tmp.a_attr && tmp.a_attr.id) { - delete tmp.a_attr.id; - } - } - if(options && options.flat && obj.id !== $.jstree.root) { - flat.push(tmp); - } - if(!options || !options.no_children) { - for(i = 0, j = obj.children.length; i < j; i++) { - if(options && options.flat) { - this.get_json(obj.children[i], options, flat); - } - else { - tmp.children.push(this.get_json(obj.children[i], options)); - } - } - } - return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp); - }, - /** - * create a new node (do not confuse with load_node) - * @name create_node([par, node, pos, callback, is_loaded]) - * @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`) - * @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name) - * @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last" - * @param {Function} callback a function to be called once the node is created - * @param {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded - * @return {String} the ID of the newly create node - * @trigger model.jstree, create_node.jstree - */ - create_node : function (par, node, pos, callback, is_loaded) { - if(par === null) { par = $.jstree.root; } - par = this.get_node(par); - if(!par) { return false; } - pos = pos === undefined ? "last" : pos; - if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { - return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); }); - } - if(!node) { node = { "text" : this.get_string('New node') }; } - if(typeof node === "string") { - node = { "text" : node }; - } else { - node = $.extend(true, {}, node); - } - if(node.text === undefined) { node.text = this.get_string('New node'); } - var tmp, dpc, i, j; - - if(par.id === $.jstree.root) { - if(pos === "before") { pos = "first"; } - if(pos === "after") { pos = "last"; } - } - switch(pos) { - case "before": - tmp = this.get_node(par.parent); - pos = $.inArray(par.id, tmp.children); - par = tmp; - break; - case "after" : - tmp = this.get_node(par.parent); - pos = $.inArray(par.id, tmp.children) + 1; - par = tmp; - break; - case "inside": - case "first": - pos = 0; - break; - case "last": - pos = par.children.length; - break; - default: - if(!pos) { pos = 0; } - break; - } - if(pos > par.children.length) { pos = par.children.length; } - if(!node.id) { node.id = true; } - if(!this.check("create_node", node, par, pos)) { - this.settings.core.error.call(this, this._data.core.last_error); - return false; - } - if(node.id === true) { delete node.id; } - node = this._parse_model_from_json(node, par.id, par.parents.concat()); - if(!node) { return false; } - tmp = this.get_node(node); - dpc = []; - dpc.push(node); - dpc = dpc.concat(tmp.children_d); - this.trigger('model', { "nodes" : dpc, "parent" : par.id }); - - par.children_d = par.children_d.concat(dpc); - for(i = 0, j = par.parents.length; i < j; i++) { - this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc); - } - node = tmp; - tmp = []; - for(i = 0, j = par.children.length; i < j; i++) { - tmp[i >= pos ? i+1 : i] = par.children[i]; - } - tmp[pos] = node.id; - par.children = tmp; - - this.redraw_node(par, true); - /** - * triggered when a node is created - * @event - * @name create_node.jstree - * @param {Object} node - * @param {String} parent the parent's ID - * @param {Number} position the position of the new node among the parent's children - */ - this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos }); - if(callback) { callback.call(this, this.get_node(node)); } - return node.id; - }, - /** - * set the text value of a node - * @name rename_node(obj, val) - * @param {mixed} obj the node, you can pass an array to rename multiple nodes to the same name - * @param {String} val the new text value - * @return {Boolean} - * @trigger rename_node.jstree - */ - rename_node : function (obj, val) { - var t1, t2, old; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.rename_node(obj[t1], val); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - old = obj.text; - if(!this.check("rename_node", obj, this.get_parent(obj), val)) { - this.settings.core.error.call(this, this._data.core.last_error); - return false; - } - this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments)) - /** - * triggered when a node is renamed - * @event - * @name rename_node.jstree - * @param {Object} node - * @param {String} text the new value - * @param {String} old the old value - */ - this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old }); - return true; - }, - /** - * remove a node - * @name delete_node(obj) - * @param {mixed} obj the node, you can pass an array to delete multiple nodes - * @return {Boolean} - * @trigger delete_node.jstree, changed.jstree - */ - delete_node : function (obj) { - var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.delete_node(obj[t1]); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - par = this.get_node(obj.parent); - pos = $.inArray(obj.id, par.children); - c = false; - if(!this.check("delete_node", obj, par, pos)) { - this.settings.core.error.call(this, this._data.core.last_error); - return false; - } - if(pos !== -1) { - par.children = $.vakata.array_remove(par.children, pos); - } - tmp = obj.children_d.concat([]); - tmp.push(obj.id); - for(i = 0, j = obj.parents.length; i < j; i++) { - this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) { - return $.inArray(v, tmp) === -1; - }); - } - for(k = 0, l = tmp.length; k < l; k++) { - if(this._model.data[tmp[k]].state.selected) { - c = true; - break; - } - } - if (c) { - this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) { - return $.inArray(v, tmp) === -1; - }); - } - /** - * triggered when a node is deleted - * @event - * @name delete_node.jstree - * @param {Object} node - * @param {String} parent the parent's ID - */ - this.trigger('delete_node', { "node" : obj, "parent" : par.id }); - if(c) { - this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id }); - } - for(k = 0, l = tmp.length; k < l; k++) { - delete this._model.data[tmp[k]]; - } - if($.inArray(this._data.core.focused, tmp) !== -1) { - this._data.core.focused = null; - top = this.element[0].scrollTop; - lft = this.element[0].scrollLeft; - if(par.id === $.jstree.root) { - if (this._model.data[$.jstree.root].children[0]) { - this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').triger('focus'); - } - } - else { - this.get_node(par, true).children('.jstree-anchor').trigger('focus'); - } - this.element[0].scrollTop = top; - this.element[0].scrollLeft = lft; - } - this.redraw_node(par, true); - return true; - }, - /** - * check if an operation is premitted on the tree. Used internally. - * @private - * @name check(chk, obj, par, pos) - * @param {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node" - * @param {mixed} obj the node - * @param {mixed} par the parent - * @param {mixed} pos the position to insert at, or if "rename_node" - the new name - * @param {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node - * @return {Boolean} - */ - check : function (chk, obj, par, pos, more) { - obj = obj && obj.id ? obj : this.get_node(obj); - par = par && par.id ? par : this.get_node(par); - var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj, - chc = this.settings.core.check_callback; - if(chk === "move_node" || chk === "copy_node") { - if((!more || !more.is_multi) && (chk === "move_node" && $.inArray(obj.id, par.children) === pos)) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_08', 'reason' : 'Moving node to its current position', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - return false; - } - if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - return false; - } - } - if(tmp && tmp.data) { tmp = tmp.data; } - if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) { - if(tmp.functions[chk] === false) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - } - return tmp.functions[chk]; - } - if(chc === false || ($.vakata.is_function(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - return false; - } - return true; - }, - /** - * get the last error - * @name last_error() - * @return {Object} - */ - last_error : function () { - return this._data.core.last_error; - }, - /** - * move a node to a new parent - * @name move_node(obj, par [, pos, callback, is_loaded]) - * @param {mixed} obj the node to move, pass an array to move multiple nodes - * @param {mixed} par the new parent - * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` - * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position - * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded - * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn - * @param {Boolean} instance internal parameter indicating if the node comes from another instance - * @trigger move_node.jstree - */ - move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { - var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p; - - par = this.get_node(par); - pos = pos === undefined ? 0 : pos; - if(!par) { return false; } - if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { - return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); }); - } - - if($.vakata.is_array(obj)) { - if(obj.length === 1) { - obj = obj[0]; - } - else { - //obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) { - par = tmp; - pos = "after"; - } - } - this.redraw(); - return true; - } - } - obj = obj && obj.id ? obj : this.get_node(obj); - - if(!obj || obj.id === $.jstree.root) { return false; } - - old_par = (obj.parent || $.jstree.root).toString(); - new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); - old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); - is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); - old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1; - if(old_ins && old_ins._id) { - obj = old_ins._model.data[obj.id]; - } - - if(is_multi) { - if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) { - if(old_ins) { old_ins.delete_node(obj); } - return tmp; - } - return false; - } - //var m = this._model.data; - if(par.id === $.jstree.root) { - if(pos === "before") { pos = "first"; } - if(pos === "after") { pos = "last"; } - } - switch(pos) { - case "before": - pos = $.inArray(par.id, new_par.children); - break; - case "after" : - pos = $.inArray(par.id, new_par.children) + 1; - break; - case "inside": - case "first": - pos = 0; - break; - case "last": - pos = new_par.children.length; - break; - default: - if(!pos) { pos = 0; } - break; - } - if(pos > new_par.children.length) { pos = new_par.children.length; } - if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { - this.settings.core.error.call(this, this._data.core.last_error); - return false; - } - if(obj.parent === new_par.id) { - dpc = new_par.children.concat(); - tmp = $.inArray(obj.id, dpc); - if(tmp !== -1) { - dpc = $.vakata.array_remove(dpc, tmp); - if(pos > tmp) { pos--; } - } - tmp = []; - for(i = 0, j = dpc.length; i < j; i++) { - tmp[i >= pos ? i+1 : i] = dpc[i]; - } - tmp[pos] = obj.id; - new_par.children = tmp; - this._node_changed(new_par.id); - this.redraw(new_par.id === $.jstree.root); - } - else { - // clean old parent and up - tmp = obj.children_d.concat(); - tmp.push(obj.id); - for(i = 0, j = obj.parents.length; i < j; i++) { - dpc = []; - p = old_ins._model.data[obj.parents[i]].children_d; - for(k = 0, l = p.length; k < l; k++) { - if($.inArray(p[k], tmp) === -1) { - dpc.push(p[k]); - } - } - old_ins._model.data[obj.parents[i]].children_d = dpc; - } - old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id); - - // insert into new parent and up - for(i = 0, j = new_par.parents.length; i < j; i++) { - this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp); - } - dpc = []; - for(i = 0, j = new_par.children.length; i < j; i++) { - dpc[i >= pos ? i+1 : i] = new_par.children[i]; - } - dpc[pos] = obj.id; - new_par.children = dpc; - new_par.children_d.push(obj.id); - new_par.children_d = new_par.children_d.concat(obj.children_d); - - // update object - obj.parent = new_par.id; - tmp = new_par.parents.concat(); - tmp.unshift(new_par.id); - p = obj.parents.length; - obj.parents = tmp; - - // update object children - tmp = tmp.concat(); - for(i = 0, j = obj.children_d.length; i < j; i++) { - this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1); - Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp); - } - - if(old_par === $.jstree.root || new_par.id === $.jstree.root) { - this._model.force_full_redraw = true; - } - if(!this._model.force_full_redraw) { - this._node_changed(old_par); - this._node_changed(new_par.id); - } - if(!skip_redraw) { - this.redraw(); - } - } - if(callback) { callback.call(this, obj, new_par, pos); } - /** - * triggered when a node is moved - * @event - * @name move_node.jstree - * @param {Object} node - * @param {String} parent the parent's ID - * @param {Number} position the position of the node among the parent's children - * @param {String} old_parent the old parent of the node - * @param {Number} old_position the old position of the node - * @param {Boolean} is_multi do the node and new parent belong to different instances - * @param {jsTree} old_instance the instance the node came from - * @param {jsTree} new_instance the instance of the new parent - */ - this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); - return obj.id; - }, - /** - * copy a node to a new parent - * @name copy_node(obj, par [, pos, callback, is_loaded]) - * @param {mixed} obj the node to copy, pass an array to copy multiple nodes - * @param {mixed} par the new parent - * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` - * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position - * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded - * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn - * @param {Boolean} instance internal parameter indicating if the node comes from another instance - * @trigger model.jstree copy_node.jstree - */ - copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { - var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi; - - par = this.get_node(par); - pos = pos === undefined ? 0 : pos; - if(!par) { return false; } - if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { - return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); }); - } - - if($.vakata.is_array(obj)) { - if(obj.length === 1) { - obj = obj[0]; - } - else { - //obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) { - par = tmp; - pos = "after"; - } - } - this.redraw(); - return true; - } - } - obj = obj && obj.id ? obj : this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - - old_par = (obj.parent || $.jstree.root).toString(); - new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); - old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); - is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); - - if(old_ins && old_ins._id) { - obj = old_ins._model.data[obj.id]; - } - - if(par.id === $.jstree.root) { - if(pos === "before") { pos = "first"; } - if(pos === "after") { pos = "last"; } - } - switch(pos) { - case "before": - pos = $.inArray(par.id, new_par.children); - break; - case "after" : - pos = $.inArray(par.id, new_par.children) + 1; - break; - case "inside": - case "first": - pos = 0; - break; - case "last": - pos = new_par.children.length; - break; - default: - if(!pos) { pos = 0; } - break; - } - if(pos > new_par.children.length) { pos = new_par.children.length; } - if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { - this.settings.core.error.call(this, this._data.core.last_error); - return false; - } - node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj; - if(!node) { return false; } - if(node.id === true) { delete node.id; } - node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat()); - if(!node) { return false; } - tmp = this.get_node(node); - if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; } - dpc = []; - dpc.push(node); - dpc = dpc.concat(tmp.children_d); - this.trigger('model', { "nodes" : dpc, "parent" : new_par.id }); - - // insert into new parent and up - for(i = 0, j = new_par.parents.length; i < j; i++) { - this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc); - } - dpc = []; - for(i = 0, j = new_par.children.length; i < j; i++) { - dpc[i >= pos ? i+1 : i] = new_par.children[i]; - } - dpc[pos] = tmp.id; - new_par.children = dpc; - new_par.children_d.push(tmp.id); - new_par.children_d = new_par.children_d.concat(tmp.children_d); - - if(new_par.id === $.jstree.root) { - this._model.force_full_redraw = true; - } - if(!this._model.force_full_redraw) { - this._node_changed(new_par.id); - } - if(!skip_redraw) { - this.redraw(new_par.id === $.jstree.root); - } - if(callback) { callback.call(this, tmp, new_par, pos); } - /** - * triggered when a node is copied - * @event - * @name copy_node.jstree - * @param {Object} node the copied node - * @param {Object} original the original node - * @param {String} parent the parent's ID - * @param {Number} position the position of the node among the parent's children - * @param {String} old_parent the old parent of the node - * @param {Number} old_position the position of the original node - * @param {Boolean} is_multi do the node and new parent belong to different instances - * @param {jsTree} old_instance the instance the node came from - * @param {jsTree} new_instance the instance of the new parent - */ - this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); - return tmp.id; - }, - /** - * cut a node (a later call to `paste(obj)` would move the node) - * @name cut(obj) - * @param {mixed} obj multiple objects can be passed using an array - * @trigger cut.jstree - */ - cut : function (obj) { - if(!obj) { obj = this._data.core.selected.concat(); } - if(!$.vakata.is_array(obj)) { obj = [obj]; } - if(!obj.length) { return false; } - var tmp = [], o, t1, t2; - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - o = this.get_node(obj[t1]); - if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } - } - if(!tmp.length) { return false; } - ccp_node = tmp; - ccp_inst = this; - ccp_mode = 'move_node'; - /** - * triggered when nodes are added to the buffer for moving - * @event - * @name cut.jstree - * @param {Array} node - */ - this.trigger('cut', { "node" : obj }); - }, - /** - * copy a node (a later call to `paste(obj)` would copy the node) - * @name copy(obj) - * @param {mixed} obj multiple objects can be passed using an array - * @trigger copy.jstree - */ - copy : function (obj) { - if(!obj) { obj = this._data.core.selected.concat(); } - if(!$.vakata.is_array(obj)) { obj = [obj]; } - if(!obj.length) { return false; } - var tmp = [], o, t1, t2; - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - o = this.get_node(obj[t1]); - if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } - } - if(!tmp.length) { return false; } - ccp_node = tmp; - ccp_inst = this; - ccp_mode = 'copy_node'; - /** - * triggered when nodes are added to the buffer for copying - * @event - * @name copy.jstree - * @param {Array} node - */ - this.trigger('copy', { "node" : obj }); - }, - /** - * get the current buffer (any nodes that are waiting for a paste operation) - * @name get_buffer() - * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance) - */ - get_buffer : function () { - return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst }; - }, - /** - * check if there is something in the buffer to paste - * @name can_paste() - * @return {Boolean} - */ - can_paste : function () { - return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node]; - }, - /** - * copy or move the previously cut or copied nodes to a new parent - * @name paste(obj [, pos]) - * @param {mixed} obj the new parent - * @param {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0` - * @trigger paste.jstree - */ - paste : function (obj, pos) { - obj = this.get_node(obj); - if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; } - if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) { - /** - * triggered when paste is invoked - * @event - * @name paste.jstree - * @param {String} parent the ID of the receiving node - * @param {Array} node the nodes in the buffer - * @param {String} mode the performed operation - "copy_node" or "move_node" - */ - this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode }); - } - ccp_node = false; - ccp_mode = false; - ccp_inst = false; - }, - /** - * clear the buffer of previously copied or cut nodes - * @name clear_buffer() - * @trigger clear_buffer.jstree - */ - clear_buffer : function () { - ccp_node = false; - ccp_mode = false; - ccp_inst = false; - /** - * triggered when the copy / cut buffer is cleared - * @event - * @name clear_buffer.jstree - */ - this.trigger('clear_buffer'); - }, - /** - * put a node in edit mode (input field to rename the node) - * @name edit(obj [, default_text, callback]) - * @param {mixed} obj - * @param {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used) - * @param {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise), a boolean indicating if the user cancelled the edit and the original unescaped value provided by the user. You can also access the node's title using .text - */ - edit : function (obj, default_text, callback) { - var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false; - obj = this.get_node(obj); - if(!obj) { return false; } - if(!this.check("edit", obj, this.get_parent(obj))) { - this.settings.core.error.call(this, this._data.core.last_error); - return false; - } - tmp = obj; - default_text = typeof default_text === 'string' ? default_text : obj.text; - this.set_text(obj, ""); - obj = this._open_to(obj); - tmp.text = default_text; - - rtl = this._data.core.rtl; - w = this.element.width(); - this._data.core.focused = tmp.id; - a = obj.children('.jstree-anchor').trigger('focus'); - s = $(''); - /*! - oi = obj.children("i:visible"), - ai = a.children("i:visible"), - w1 = oi.width() * oi.length, - w2 = ai.width() * ai.length, - */ - t = default_text; - h1 = $("<"+"div>", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo(document.body); - h2 = $("<"+"input />", { - "value" : t, - "class" : "jstree-rename-input", - // "size" : t.length, - "css" : { - "padding" : "0", - "border" : "1px solid silver", - "box-sizing" : "border-box", - "display" : "inline-block", - "height" : (this._data.core.li_height) + "px", - "lineHeight" : (this._data.core.li_height) + "px", - "width" : "150px" // will be set a bit further down - }, - "blur" : function (e) { - e.stopImmediatePropagation(); - e.preventDefault(); - var i = s.children(".jstree-rename-input"), - v = i.val(), - f = this.settings.core.force_text, - nv; - if(v === "") { v = t; } - h1.remove(); - s.replaceWith(a); - s.remove(); - t = f ? t : $('
      ').append($.parseHTML(t)).html(); - obj = this.get_node(obj); - this.set_text(obj, t); - nv = !!this.rename_node(obj, f ? $('
      ').text(v).text() : $('
      ').append($.parseHTML(v)).html()); - if(!nv) { - this.set_text(obj, t); // move this up? and fix #483 - } - this._data.core.focused = tmp.id; - setTimeout(function () { - var node = this.get_node(tmp.id, true); - if(node.length) { - this._data.core.focused = tmp.id; - node.children('.jstree-anchor').trigger('focus'); - } - }.bind(this), 0); - if(callback) { - callback.call(this, tmp, nv, cancel, v); - } - h2 = null; - }.bind(this), - "keydown" : function (e) { - var key = e.which; - if(key === 27) { - cancel = true; - this.value = t; - } - if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { - e.stopImmediatePropagation(); - } - if(key === 27 || key === 13) { - e.preventDefault(); - this.blur(); - } - }, - "click" : function (e) { e.stopImmediatePropagation(); }, - "mousedown" : function (e) { e.stopImmediatePropagation(); }, - "keyup" : function (e) { - h2.width(Math.min(h1.text("pW" + this.value).width(),w)); - }, - "keypress" : function(e) { - if(e.which === 13) { return false; } - } - }); - fn = { - fontFamily : a.css('fontFamily') || '', - fontSize : a.css('fontSize') || '', - fontWeight : a.css('fontWeight') || '', - fontStyle : a.css('fontStyle') || '', - fontStretch : a.css('fontStretch') || '', - fontVariant : a.css('fontVariant') || '', - letterSpacing : a.css('letterSpacing') || '', - wordSpacing : a.css('wordSpacing') || '' - }; - s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2); - a.replaceWith(s); - h1.css(fn); - h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); - $(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) { - if (h2 && e.target !== h2) { - $(h2).trigger('blur'); - } - }); - }, - - - /** - * changes the theme - * @name set_theme(theme_name [, theme_url]) - * @param {String} theme_name the name of the new theme to apply - * @param {mixed} theme_url the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory. - * @trigger set_theme.jstree - */ - set_theme : function (theme_name, theme_url) { - if(!theme_name) { return false; } - if(theme_url === true) { - var dir = this.settings.core.themes.dir; - if(!dir) { dir = $.jstree.path + '/themes'; } - theme_url = dir + '/' + theme_name + '/style.css'; - } - if(theme_url && $.inArray(theme_url, themes_loaded) === -1) { - $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />'); - themes_loaded.push(theme_url); - } - if(this._data.core.themes.name) { - this.element.removeClass('jstree-' + this._data.core.themes.name); - } - this._data.core.themes.name = theme_name; - this.element.addClass('jstree-' + theme_name); - this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive'); - /** - * triggered when a theme is set - * @event - * @name set_theme.jstree - * @param {String} theme the new theme - */ - this.trigger('set_theme', { 'theme' : theme_name }); - }, - /** - * gets the name of the currently applied theme name - * @name get_theme() - * @return {String} - */ - get_theme : function () { return this._data.core.themes.name; }, - /** - * changes the theme variant (if the theme has variants) - * @name set_theme_variant(variant_name) - * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed) - */ - set_theme_variant : function (variant_name) { - if(this._data.core.themes.variant) { - this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); - } - this._data.core.themes.variant = variant_name; - if(variant_name) { - this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); - } - }, - /** - * gets the name of the currently applied theme variant - * @name get_theme() - * @return {String} - */ - get_theme_variant : function () { return this._data.core.themes.variant; }, - /** - * shows a striped background on the container (if the theme supports it) - * @name show_stripes() - */ - show_stripes : function () { - this._data.core.themes.stripes = true; - this.get_container_ul().addClass("jstree-striped"); - /** - * triggered when stripes are shown - * @event - * @name show_stripes.jstree - */ - this.trigger('show_stripes'); - }, - /** - * hides the striped background on the container - * @name hide_stripes() - */ - hide_stripes : function () { - this._data.core.themes.stripes = false; - this.get_container_ul().removeClass("jstree-striped"); - /** - * triggered when stripes are hidden - * @event - * @name hide_stripes.jstree - */ - this.trigger('hide_stripes'); - }, - /** - * toggles the striped background on the container - * @name toggle_stripes() - */ - toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } }, - /** - * shows the connecting dots (if the theme supports it) - * @name show_dots() - */ - show_dots : function () { - this._data.core.themes.dots = true; - this.get_container_ul().removeClass("jstree-no-dots"); - /** - * triggered when dots are shown - * @event - * @name show_dots.jstree - */ - this.trigger('show_dots'); - }, - /** - * hides the connecting dots - * @name hide_dots() - */ - hide_dots : function () { - this._data.core.themes.dots = false; - this.get_container_ul().addClass("jstree-no-dots"); - /** - * triggered when dots are hidden - * @event - * @name hide_dots.jstree - */ - this.trigger('hide_dots'); - }, - /** - * toggles the connecting dots - * @name toggle_dots() - */ - toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } }, - /** - * show the node icons - * @name show_icons() - */ - show_icons : function () { - this._data.core.themes.icons = true; - this.get_container_ul().removeClass("jstree-no-icons"); - /** - * triggered when icons are shown - * @event - * @name show_icons.jstree - */ - this.trigger('show_icons'); - }, - /** - * hide the node icons - * @name hide_icons() - */ - hide_icons : function () { - this._data.core.themes.icons = false; - this.get_container_ul().addClass("jstree-no-icons"); - /** - * triggered when icons are hidden - * @event - * @name hide_icons.jstree - */ - this.trigger('hide_icons'); - }, - /** - * toggle the node icons - * @name toggle_icons() - */ - toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }, - /** - * show the node ellipsis - * @name show_icons() - */ - show_ellipsis : function () { - this._data.core.themes.ellipsis = true; - this.get_container_ul().addClass("jstree-ellipsis"); - /** - * triggered when ellisis is shown - * @event - * @name show_ellipsis.jstree - */ - this.trigger('show_ellipsis'); - }, - /** - * hide the node ellipsis - * @name hide_ellipsis() - */ - hide_ellipsis : function () { - this._data.core.themes.ellipsis = false; - this.get_container_ul().removeClass("jstree-ellipsis"); - /** - * triggered when ellisis is hidden - * @event - * @name hide_ellipsis.jstree - */ - this.trigger('hide_ellipsis'); - }, - /** - * toggle the node ellipsis - * @name toggle_icons() - */ - toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } }, - /** - * set the node icon for a node - * @name set_icon(obj, icon) - * @param {mixed} obj - * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class - */ - set_icon : function (obj, icon) { - var t1, t2, dom, old; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.set_icon(obj[t1], icon); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - old = obj.icon; - obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon; - dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon"); - if(icon === false) { - dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); - this.hide_icon(obj); - } - else if(icon === true || icon === null || icon === undefined || icon === '') { - dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); - if(old === false) { this.show_icon(obj); } - } - else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) { - dom.removeClass(old).css("background",""); - dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon); - if(old === false) { this.show_icon(obj); } - } - else { - dom.removeClass(old).css("background",""); - dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon); - if(old === false) { this.show_icon(obj); } - } - return true; - }, - /** - * get the node icon for a node - * @name get_icon(obj) - * @param {mixed} obj - * @return {String} - */ - get_icon : function (obj) { - obj = this.get_node(obj); - return (!obj || obj.id === $.jstree.root) ? false : obj.icon; - }, - /** - * hide the icon on an individual node - * @name hide_icon(obj) - * @param {mixed} obj - */ - hide_icon : function (obj) { - var t1, t2; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.hide_icon(obj[t1]); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj === $.jstree.root) { return false; } - obj.icon = false; - this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden'); - return true; - }, - /** - * show the icon on an individual node - * @name show_icon(obj) - * @param {mixed} obj - */ - show_icon : function (obj) { - var t1, t2, dom; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.show_icon(obj[t1]); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj === $.jstree.root) { return false; } - dom = this.get_node(obj, true); - obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true; - if(!obj.icon) { obj.icon = true; } - dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden'); - return true; - } - }; - - // helpers - $.vakata = {}; - // collect attributes - $.vakata.attributes = function(node, with_values) { - node = $(node)[0]; - var attr = with_values ? {} : []; - if(node && node.attributes) { - $.each(node.attributes, function (i, v) { - if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; } - if(v.value !== null && $.vakata.trim(v.value) !== '') { - if(with_values) { attr[v.name] = v.value; } - else { attr.push(v.name); } - } - }); - } - return attr; - }; - $.vakata.array_unique = function(array) { - var a = [], i, j, l, o = {}; - for(i = 0, l = array.length; i < l; i++) { - if(o[array[i]] === undefined) { - a.push(array[i]); - o[array[i]] = true; - } - } - return a; - }; - // remove item from array - $.vakata.array_remove = function(array, from) { - array.splice(from, 1); - return array; - //var rest = array.slice((to || from) + 1 || array.length); - //array.length = from < 0 ? array.length + from : from; - //array.push.apply(array, rest); - //return array; - }; - // remove item from array - $.vakata.array_remove_item = function(array, item) { - var tmp = $.inArray(item, array); - return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array; - }; - $.vakata.array_filter = function(c,a,b,d,e) { - if (c.filter) { - return c.filter(a, b); - } - d=[]; - for (e in c) { - if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) { - d.push(c[e]); - } - } - return d; - }; - $.vakata.trim = function (text) { - return String.prototype.trim ? - String.prototype.trim.call(text.toString()) : - text.toString().replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - }; - $.vakata.is_function = function(obj) { - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - $.vakata.is_array = Array.isArray || function (obj) { - return Object.prototype.toString.call(obj) === "[object Array]"; - }; - - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind#polyfill - if (!Function.prototype.bind) { - Function.prototype.bind = function () { - var thatFunc = this, thatArg = arguments[0]; - var args = Array.prototype.slice.call(arguments, 1); - if (typeof thatFunc !== 'function') { - // closest thing possible to the ECMAScript 5 - // internal IsCallable function - throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); - } - return function(){ - var funcArgs = args.concat(Array.prototype.slice.call(arguments)); - return thatFunc.apply(thatArg, funcArgs); - }; - }; - } - - -/** - * ### Changed plugin - * - * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes. - */ - - $.jstree.plugins.changed = function (options, parent) { - var last = []; - this.trigger = function (ev, data) { - var i, j; - if(!data) { - data = {}; - } - if(ev.replace('.jstree','') === 'changed') { - data.changed = { selected : [], deselected : [] }; - var tmp = {}; - for(i = 0, j = last.length; i < j; i++) { - tmp[last[i]] = 1; - } - for(i = 0, j = data.selected.length; i < j; i++) { - if(!tmp[data.selected[i]]) { - data.changed.selected.push(data.selected[i]); - } - else { - tmp[data.selected[i]] = 2; - } - } - for(i = 0, j = last.length; i < j; i++) { - if(tmp[last[i]] === 1) { - data.changed.deselected.push(last[i]); - } - } - last = data.selected.slice(); - } - /** - * triggered when selection changes (the "changed" plugin enhances the original event with more data) - * @event - * @name changed.jstree - * @param {Object} node - * @param {Object} action the action that caused the selection to change - * @param {Array} selected the current selection - * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event - * @param {Object} event the event (if any) that triggered this changed event - * @plugin changed - */ - parent.trigger.call(this, ev, data); - }; - this.refresh = function (skip_loading, forget_state) { - last = []; - return parent.refresh.apply(this, arguments); - }; - }; - -/** - * ### Checkbox plugin - * - * This plugin renders checkbox icons in front of each node, making multiple selection much easier. - * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up. - */ - - var _i = document.createElement('I'); - _i.className = 'jstree-icon jstree-checkbox'; - _i.setAttribute('role', 'presentation'); - /** - * stores all defaults for the checkbox plugin - * @name $.jstree.defaults.checkbox - * @plugin checkbox - */ - $.jstree.defaults.checkbox = { - /** - * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`. - * @name $.jstree.defaults.checkbox.visible - * @plugin checkbox - */ - visible : true, - /** - * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`. - * @name $.jstree.defaults.checkbox.three_state - * @plugin checkbox - */ - three_state : true, - /** - * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`. - * @name $.jstree.defaults.checkbox.whole_node - * @plugin checkbox - */ - whole_node : true, - /** - * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`. - * @name $.jstree.defaults.checkbox.keep_selected_style - * @plugin checkbox - */ - keep_selected_style : true, - /** - * This setting controls how cascading and undetermined nodes are applied. - * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used. - * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''. - * @name $.jstree.defaults.checkbox.cascade - * @plugin checkbox - */ - cascade : '', - /** - * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing. - * @name $.jstree.defaults.checkbox.tie_selection - * @plugin checkbox - */ - tie_selection : true, - - /** - * This setting controls if cascading down affects disabled checkboxes - * @name $.jstree.defaults.checkbox.cascade_to_disabled - * @plugin checkbox - */ - cascade_to_disabled : true, - - /** - * This setting controls if cascading down affects hidden checkboxes - * @name $.jstree.defaults.checkbox.cascade_to_hidden - * @plugin checkbox - */ - cascade_to_hidden : true - }; - $.jstree.plugins.checkbox = function (options, parent) { - this.bind = function () { - parent.bind.call(this); - this._data.checkbox.uto = false; - this._data.checkbox.selected = []; - if(this.settings.checkbox.three_state) { - this.settings.checkbox.cascade = 'up+down+undetermined'; - } - this.element - .on("init.jstree", function () { - this._data.checkbox.visible = this.settings.checkbox.visible; - if(!this.settings.checkbox.keep_selected_style) { - this.element.addClass('jstree-checkbox-no-clicked'); - } - if(this.settings.checkbox.tie_selection) { - this.element.addClass('jstree-checkbox-selection'); - } - }.bind(this)) - .on("loading.jstree", function () { - this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ](); - }.bind(this)); - if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { - this.element - .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', function () { - // only if undetermined is in setting - if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } - this._data.checkbox.uto = setTimeout(this._undetermined.bind(this), 50); - }.bind(this)); - } - if(!this.settings.checkbox.tie_selection) { - this.element - .on('model.jstree', function (e, data) { - var m = this._model.data, - p = m[data.parent], - dpc = data.nodes, - i, j; - for(i = 0, j = dpc.length; i < j; i++) { - m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked); - if(m[dpc[i]].state.checked) { - this._data.checkbox.selected.push(dpc[i]); - } - } - }.bind(this)); - } - if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) { - this.element - .on('model.jstree', function (e, data) { - var m = this._model.data, - p = m[data.parent], - dpc = data.nodes, - chd = [], - c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; - - if(s.indexOf('down') !== -1) { - // apply down - if(p.state[ t ? 'selected' : 'checked' ]) { - for(i = 0, j = dpc.length; i < j; i++) { - m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true; - } - - this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc); - } - else { - for(i = 0, j = dpc.length; i < j; i++) { - if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) { - for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) { - m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true; - } - this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d); - } - } - } - } - - if(s.indexOf('up') !== -1) { - // apply up - for(i = 0, j = p.children_d.length; i < j; i++) { - if(!m[p.children_d[i]].children.length) { - chd.push(m[p.children_d[i]].parent); - } - } - chd = $.vakata.array_unique(chd); - for(k = 0, l = chd.length; k < l; k++) { - p = m[chd[k]]; - while(p && p.id !== $.jstree.root) { - c = 0; - for(i = 0, j = p.children.length; i < j; i++) { - c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; - } - if(c === j) { - p.state[ t ? 'selected' : 'checked' ] = true; - this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); - tmp = this.get_node(p, true); - if(tmp && tmp.length) { - tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked'); - } - } - else { - break; - } - p = this.get_node(p.parent); - } - } - } - - this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected); - }.bind(this)) - .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', function (e, data) { - var self = this, - obj = data.node, - m = this._model.data, - par = this.get_node(obj.parent), - i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, - sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected; - - for (i = 0, j = cur.length; i < j; i++) { - sel[cur[i]] = true; - } - - // apply down - if(s.indexOf('down') !== -1) { - //this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d)); - var selectedIds = this._cascade_new_checked_state(obj.id, true); - var temp = obj.children_d.concat(obj.id); - for (i = 0, j = temp.length; i < j; i++) { - if (selectedIds.indexOf(temp[i]) > -1) { - sel[temp[i]] = true; - } - else { - delete sel[temp[i]]; - } - } - } - - // apply up - if(s.indexOf('up') !== -1) { - while(par && par.id !== $.jstree.root) { - c = 0; - for(i = 0, j = par.children.length; i < j; i++) { - c += m[par.children[i]].state[ t ? 'selected' : 'checked' ]; - } - if(c === j) { - par.state[ t ? 'selected' : 'checked' ] = true; - sel[par.id] = true; - //this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id); - tmp = this.get_node(par, true); - if(tmp && tmp.length) { - tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - } - else { - break; - } - par = this.get_node(par.parent); - } - } - - cur = []; - for (i in sel) { - if (sel.hasOwnProperty(i)) { - cur.push(i); - } - } - this._data[ t ? 'core' : 'checkbox' ].selected = cur; - }.bind(this)) - .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', function (e, data) { - var obj = this.get_node($.jstree.root), - m = this._model.data, - i, j, tmp; - for(i = 0, j = obj.children_d.length; i < j; i++) { - tmp = m[obj.children_d[i]]; - if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { - tmp.original.state.undetermined = false; - } - } - }.bind(this)) - .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', function (e, data) { - var self = this, - obj = data.node, - dom = this.get_node(obj, true), - i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, - cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {}, - stillSelectedIds = [], - allIds = obj.children_d.concat(obj.id); - - // apply down - if(s.indexOf('down') !== -1) { - var selectedIds = this._cascade_new_checked_state(obj.id, false); - - cur = $.vakata.array_filter(cur, function(id) { - return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1; - }); - } - - // only apply up if cascade up is enabled and if this node is not selected - // (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected). - if(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) { - for(i = 0, j = obj.parents.length; i < j; i++) { - tmp = this._model.data[obj.parents[i]]; - tmp.state[ t ? 'selected' : 'checked' ] = false; - if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { - tmp.original.state.undetermined = false; - } - tmp = this.get_node(obj.parents[i], true); - if(tmp && tmp.length) { - tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - } - - cur = $.vakata.array_filter(cur, function(id) { - return obj.parents.indexOf(id) === -1; - }); - } - - this._data[ t ? 'core' : 'checkbox' ].selected = cur; - }.bind(this)); - } - if(this.settings.checkbox.cascade.indexOf('up') !== -1) { - this.element - .on('delete_node.jstree', function (e, data) { - // apply up (whole handler) - var p = this.get_node(data.parent), - m = this._model.data, - i, j, c, tmp, t = this.settings.checkbox.tie_selection; - while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { - c = 0; - for(i = 0, j = p.children.length; i < j; i++) { - c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; - } - if(j > 0 && c === j) { - p.state[ t ? 'selected' : 'checked' ] = true; - this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); - tmp = this.get_node(p, true); - if(tmp && tmp.length) { - tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - } - else { - break; - } - p = this.get_node(p.parent); - } - }.bind(this)) - .on('move_node.jstree', function (e, data) { - // apply up (whole handler) - var is_multi = data.is_multi, - old_par = data.old_parent, - new_par = this.get_node(data.parent), - m = this._model.data, - p, c, i, j, tmp, t = this.settings.checkbox.tie_selection; - if(!is_multi) { - p = this.get_node(old_par); - while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { - c = 0; - for(i = 0, j = p.children.length; i < j; i++) { - c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; - } - if(j > 0 && c === j) { - p.state[ t ? 'selected' : 'checked' ] = true; - this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); - tmp = this.get_node(p, true); - if(tmp && tmp.length) { - tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - } - else { - break; - } - p = this.get_node(p.parent); - } - } - p = new_par; - while(p && p.id !== $.jstree.root) { - c = 0; - for(i = 0, j = p.children.length; i < j; i++) { - c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; - } - if(c === j) { - if(!p.state[ t ? 'selected' : 'checked' ]) { - p.state[ t ? 'selected' : 'checked' ] = true; - this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); - tmp = this.get_node(p, true); - if(tmp && tmp.length) { - tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - } - } - else { - if(p.state[ t ? 'selected' : 'checked' ]) { - p.state[ t ? 'selected' : 'checked' ] = false; - this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id); - tmp = this.get_node(p, true); - if(tmp && tmp.length) { - tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - } - else { - break; - } - } - p = this.get_node(p.parent); - } - }.bind(this)); - } - }; - /** - * get an array of all nodes whose state is "undetermined" - * @name get_undetermined([full]) - * @param {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned - * @return {Array} - * @plugin checkbox - */ - this.get_undetermined = function (full) { - if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) { - return []; - } - var i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = []; - for(i = 0, j = s.length; i < j; i++) { - if(m[s[i]] && m[s[i]].parents) { - for(k = 0, l = m[s[i]].parents.length; k < l; k++) { - if(o[m[s[i]].parents[k]] !== undefined) { - break; - } - if(m[s[i]].parents[k] !== $.jstree.root) { - o[m[s[i]].parents[k]] = true; - p.push(m[s[i]].parents[k]); - } - } - } - } - // attempt for server side undetermined state - this.element.find('.jstree-closed').not(':has(.jstree-children)') - .each(function () { - var tmp = tt.get_node(this), tmp2; - - if(!tmp) { return; } - - if(!tmp.state.loaded) { - if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) { - if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) { - o[tmp.id] = true; - p.push(tmp.id); - } - for(k = 0, l = tmp.parents.length; k < l; k++) { - if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) { - o[tmp.parents[k]] = true; - p.push(tmp.parents[k]); - } - } - } - } - else { - for(i = 0, j = tmp.children_d.length; i < j; i++) { - tmp2 = m[tmp.children_d[i]]; - if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) { - if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) { - o[tmp2.id] = true; - p.push(tmp2.id); - } - for(k = 0, l = tmp2.parents.length; k < l; k++) { - if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) { - o[tmp2.parents[k]] = true; - p.push(tmp2.parents[k]); - } - } - } - } - } - }); - for (i = 0, j = p.length; i < j; i++) { - if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) { - r.push(full ? m[p[i]] : p[i]); - } - } - return r; - }; - /** - * set the undetermined state where and if necessary. Used internally. - * @private - * @name _undetermined() - * @plugin checkbox - */ - this._undetermined = function () { - if(this.element === null) { return; } - var p = this.get_undetermined(false), i, j, s; - - this.element.find('.jstree-undetermined').removeClass('jstree-undetermined'); - for (i = 0, j = p.length; i < j; i++) { - s = this.get_node(p[i], true); - if(s && s.length) { - s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined'); - } - } - }; - this.redraw_node = function(obj, deep, is_callback, force_render) { - obj = parent.redraw_node.apply(this, arguments); - if(obj) { - var i, j, tmp = null, icon = null; - for(i = 0, j = obj.childNodes.length; i < j; i++) { - if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { - tmp = obj.childNodes[i]; - break; - } - } - if(tmp) { - if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; } - icon = _i.cloneNode(false); - if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; } - tmp.insertBefore(icon, tmp.childNodes[0]); - } - } - if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { - if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } - this._data.checkbox.uto = setTimeout(this._undetermined.bind(this), 50); - } - return obj; - }; - /** - * show the node checkbox icons - * @name show_checkboxes() - * @plugin checkbox - */ - this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); }; - /** - * hide the node checkbox icons - * @name hide_checkboxes() - * @plugin checkbox - */ - this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); }; - /** - * toggle the node icons - * @name toggle_checkboxes() - * @plugin checkbox - */ - this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } }; - /** - * checks if a node is in an undetermined state - * @name is_undetermined(obj) - * @param {mixed} obj - * @return {Boolean} - */ - this.is_undetermined = function (obj) { - obj = this.get_node(obj); - var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data; - if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) { - return false; - } - if(!obj.state.loaded && obj.original.state.undetermined === true) { - return true; - } - for(i = 0, j = obj.children_d.length; i < j; i++) { - if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) { - return true; - } - } - return false; - }; - /** - * disable a node's checkbox - * @name disable_checkbox(obj) - * @param {mixed} obj an array can be used too - * @trigger disable_checkbox.jstree - * @plugin checkbox - */ - this.disable_checkbox = function (obj) { - var t1, t2, dom; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.disable_checkbox(obj[t1]); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { - return false; - } - dom = this.get_node(obj, true); - if(!obj.state.checkbox_disabled) { - obj.state.checkbox_disabled = true; - if(dom && dom.length) { - dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled'); - } - /** - * triggered when an node's checkbox is disabled - * @event - * @name disable_checkbox.jstree - * @param {Object} node - * @plugin checkbox - */ - this.trigger('disable_checkbox', { 'node' : obj }); - } - }; - /** - * enable a node's checkbox - * @name enable_checkbox(obj) - * @param {mixed} obj an array can be used too - * @trigger enable_checkbox.jstree - * @plugin checkbox - */ - this.enable_checkbox = function (obj) { - var t1, t2, dom; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.enable_checkbox(obj[t1]); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { - return false; - } - dom = this.get_node(obj, true); - if(obj.state.checkbox_disabled) { - obj.state.checkbox_disabled = false; - if(dom && dom.length) { - dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled'); - } - /** - * triggered when an node's checkbox is enabled - * @event - * @name enable_checkbox.jstree - * @param {Object} node - * @plugin checkbox - */ - this.trigger('enable_checkbox', { 'node' : obj }); - } - }; - - this.activate_node = function (obj, e) { - if($(e.target).hasClass('jstree-checkbox-disabled')) { - return false; - } - if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) { - e.ctrlKey = true; - } - if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) { - return parent.activate_node.call(this, obj, e); - } - if(this.is_disabled(obj)) { - return false; - } - if(this.is_checked(obj)) { - this.uncheck_node(obj, e); - } - else { - this.check_node(obj, e); - } - this.trigger('activate_node', { 'node' : this.get_node(obj) }); - }; - - /** - * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants). - * However if these unaffected nodes are already selected their ids will be included in the returned array. - * @private - * @name _cascade_new_checked_state(id, checkedState) - * @param {string} id the node ID - * @param {bool} checkedState should the nodes be checked or not - * @returns {Array} Array of all node id's (in this tree branch) that are checked. - */ - this._cascade_new_checked_state = function (id, checkedState) { - var self = this; - var t = this.settings.checkbox.tie_selection; - var node = this._model.data[id]; - var selectedNodeIds = []; - var selectedChildrenIds = [], i, j, selectedChildIds; - - if ( - (this.settings.checkbox.cascade_to_disabled || !node.state.disabled) && - (this.settings.checkbox.cascade_to_hidden || !node.state.hidden) - ) { - //First try and check/uncheck the children - if (node.children) { - for (i = 0, j = node.children.length; i < j; i++) { - var childId = node.children[i]; - selectedChildIds = self._cascade_new_checked_state(childId, checkedState); - selectedNodeIds = selectedNodeIds.concat(selectedChildIds); - if (selectedChildIds.indexOf(childId) > -1) { - selectedChildrenIds.push(childId); - } - } - } - - var dom = self.get_node(node, true); - - //A node's state is undetermined if some but not all of it's children are checked/selected . - var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length; - - if(node.original && node.original.state && node.original.state.undetermined) { - node.original.state.undetermined = undetermined; - } - - //If a node is undetermined then remove selected class - if (undetermined) { - node.state[ t ? 'selected' : 'checked' ] = false; - dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - //Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children), - //check the node and style it correctly. - else if (checkedState && selectedChildrenIds.length === node.children.length) { - node.state[ t ? 'selected' : 'checked' ] = checkedState; - selectedNodeIds.push(node.id); - - dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - else { - node.state[ t ? 'selected' : 'checked' ] = false; - dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); - } - } - else { - selectedChildIds = this.get_checked_descendants(id); - - if (node.state[ t ? 'selected' : 'checked' ]) { - selectedChildIds.push(node.id); - } - - selectedNodeIds = selectedNodeIds.concat(selectedChildIds); - } - - return selectedNodeIds; - }; - - /** - * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id) - * @name get_checked_descendants(obj) - * @param {string} id the node ID - * @return {Array} array of IDs - * @plugin checkbox - */ - this.get_checked_descendants = function (id) { - var self = this; - var t = self.settings.checkbox.tie_selection; - var node = self._model.data[id]; - - return $.vakata.array_filter(node.children_d, function(_id) { - return self._model.data[_id].state[ t ? 'selected' : 'checked' ]; - }); - }; - - /** - * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally) - * @name check_node(obj) - * @param {mixed} obj an array can be used to check multiple nodes - * @trigger check_node.jstree - * @plugin checkbox - */ - this.check_node = function (obj, e) { - if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); } - var dom, t1, t2, th; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.check_node(obj[t1], e); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { - return false; - } - dom = this.get_node(obj, true); - if(!obj.state.checked) { - obj.state.checked = true; - this._data.checkbox.selected.push(obj.id); - if(dom && dom.length) { - dom.children('.jstree-anchor').addClass('jstree-checked'); - } - /** - * triggered when an node is checked (only if tie_selection in checkbox settings is false) - * @event - * @name check_node.jstree - * @param {Object} node - * @param {Array} selected the current selection - * @param {Object} event the event (if any) that triggered this check_node - * @plugin checkbox - */ - this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); - } - }; - /** - * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally) - * @name uncheck_node(obj) - * @param {mixed} obj an array can be used to uncheck multiple nodes - * @trigger uncheck_node.jstree - * @plugin checkbox - */ - this.uncheck_node = function (obj, e) { - if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); } - var t1, t2, dom; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.uncheck_node(obj[t1], e); - } - return true; - } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { - return false; - } - dom = this.get_node(obj, true); - if(obj.state.checked) { - obj.state.checked = false; - this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id); - if(dom.length) { - dom.children('.jstree-anchor').removeClass('jstree-checked'); - } - /** - * triggered when an node is unchecked (only if tie_selection in checkbox settings is false) - * @event - * @name uncheck_node.jstree - * @param {Object} node - * @param {Array} selected the current selection - * @param {Object} event the event (if any) that triggered this uncheck_node - * @plugin checkbox - */ - this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); - } - }; - - /** - * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally) - * @name check_all() - * @trigger check_all.jstree, changed.jstree - * @plugin checkbox - */ - this.check_all = function () { - if(this.settings.checkbox.tie_selection) { return this.select_all(); } - var tmp = this._data.checkbox.selected.concat([]), i, j; - this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat(); - for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { - if(this._model.data[this._data.checkbox.selected[i]]) { - this._model.data[this._data.checkbox.selected[i]].state.checked = true; - } - } - this.redraw(true); - /** - * triggered when all nodes are checked (only if tie_selection in checkbox settings is false) - * @event - * @name check_all.jstree - * @param {Array} selected the current selection - * @plugin checkbox - */ - this.trigger('check_all', { 'selected' : this._data.checkbox.selected }); - }; - /** - * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally) - * @name uncheck_all() - * @trigger uncheck_all.jstree - * @plugin checkbox - */ - this.uncheck_all = function () { - if(this.settings.checkbox.tie_selection) { return this.deselect_all(); } - var tmp = this._data.checkbox.selected.concat([]), i, j; - for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { - if(this._model.data[this._data.checkbox.selected[i]]) { - this._model.data[this._data.checkbox.selected[i]].state.checked = false; - } - } - this._data.checkbox.selected = []; - this.element.find('.jstree-checked').removeClass('jstree-checked'); - /** - * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false) - * @event - * @name uncheck_all.jstree - * @param {Object} node the previous selection - * @param {Array} selected the current selection - * @plugin checkbox - */ - this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp }); - }; - /** - * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected) - * @name is_checked(obj) - * @param {mixed} obj - * @return {Boolean} - * @plugin checkbox - */ - this.is_checked = function (obj) { - if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); } - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - return obj.state.checked; - }; - /** - * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected) - * @name get_checked([full]) - * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned - * @return {Array} - * @plugin checkbox - */ - this.get_checked = function (full) { - if(this.settings.checkbox.tie_selection) { return this.get_selected(full); } - return full ? $.map(this._data.checkbox.selected, function (i) { return this.get_node(i); }.bind(this)) : this._data.checkbox.selected.slice(); - }; - /** - * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected) - * @name get_top_checked([full]) - * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned - * @return {Array} - * @plugin checkbox - */ - this.get_top_checked = function (full) { - if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); } - var tmp = this.get_checked(true), - obj = {}, i, j, k, l; - for(i = 0, j = tmp.length; i < j; i++) { - obj[tmp[i].id] = tmp[i]; - } - for(i = 0, j = tmp.length; i < j; i++) { - for(k = 0, l = tmp[i].children_d.length; k < l; k++) { - if(obj[tmp[i].children_d[k]]) { - delete obj[tmp[i].children_d[k]]; - } - } - } - tmp = []; - for(i in obj) { - if(obj.hasOwnProperty(i)) { - tmp.push(i); - } - } - return full ? $.map(tmp, function (i) { return this.get_node(i); }.bind(this)) : tmp; - }; - /** - * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected) - * @name get_bottom_checked([full]) - * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned - * @return {Array} - * @plugin checkbox - */ - this.get_bottom_checked = function (full) { - if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); } - var tmp = this.get_checked(true), - obj = [], i, j; - for(i = 0, j = tmp.length; i < j; i++) { - if(!tmp[i].children.length) { - obj.push(tmp[i].id); - } - } - return full ? $.map(obj, function (i) { return this.get_node(i); }.bind(this)) : obj; - }; - this.load_node = function (obj, callback) { - var k, l, i, j, c, tmp; - if(!$.vakata.is_array(obj) && !this.settings.checkbox.tie_selection) { - tmp = this.get_node(obj); - if(tmp && tmp.state.loaded) { - for(k = 0, l = tmp.children_d.length; k < l; k++) { - if(this._model.data[tmp.children_d[k]].state.checked) { - c = true; - this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]); - } - } - } - } - return parent.load_node.apply(this, arguments); - }; - this.get_state = function () { - var state = parent.get_state.apply(this, arguments); - if(this.settings.checkbox.tie_selection) { return state; } - state.checkbox = this._data.checkbox.selected.slice(); - return state; - }; - this.set_state = function (state, callback) { - var res = parent.set_state.apply(this, arguments); - if(res && state.checkbox) { - if(!this.settings.checkbox.tie_selection) { - this.uncheck_all(); - var _this = this; - $.each(state.checkbox, function (i, v) { - _this.check_node(v); - }); - } - delete state.checkbox; - this.set_state(state, callback); - return false; - } - return res; - }; - this.refresh = function (skip_loading, forget_state) { - if(this.settings.checkbox.tie_selection) { - this._data.checkbox.selected = []; - } - return parent.refresh.apply(this, arguments); - }; - }; - - // include the checkbox plugin by default - // $.jstree.defaults.plugins.push("checkbox"); - - -/** - * ### Conditionalselect plugin - * - * This plugin allows defining a callback to allow or deny node selection by user input (activate node method). - */ - - /** - * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`. - * @name $.jstree.defaults.checkbox.visible - * @plugin checkbox - */ - $.jstree.defaults.conditionalselect = function () { return true; }; - $.jstree.plugins.conditionalselect = function (options, parent) { - // own function - this.activate_node = function (obj, e) { - if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) { - return parent.activate_node.call(this, obj, e); - } - }; - }; - - -/** - * ### Contextmenu plugin - * - * Shows a context menu when a node is right-clicked. - */ - - /** - * stores all defaults for the contextmenu plugin - * @name $.jstree.defaults.contextmenu - * @plugin contextmenu - */ - $.jstree.defaults.contextmenu = { - /** - * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`. - * @name $.jstree.defaults.contextmenu.select_node - * @plugin contextmenu - */ - select_node : true, - /** - * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used. - * @name $.jstree.defaults.contextmenu.show_at_node - * @plugin contextmenu - */ - show_at_node : true, - /** - * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too). - * - * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu. - * - * * `separator_before` - a boolean indicating if there should be a separator before this item - * * `separator_after` - a boolean indicating if there should be a separator after this item - * * `_disabled` - a boolean indicating if this action should be disabled - * * `label` - a string - the name of the action (could be a function returning a string) - * * `title` - a string - an optional tooltip for the item - * * `action` - a function to be executed if this item is chosen, the function will receive - * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class - * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2) - * * `shortcut_label` - shortcut label (like for example `F2` for rename) - * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered - * - * @name $.jstree.defaults.contextmenu.items - * @plugin contextmenu - */ - items : function (o, cb) { // Could be an object directly - return { - "create" : { - "separator_before" : false, - "separator_after" : true, - "_disabled" : false, //(this.check("create_node", data.reference, {}, "last")), - "label" : "Create", - "action" : function (data) { - var inst = $.jstree.reference(data.reference), - obj = inst.get_node(data.reference); - inst.create_node(obj, {}, "last", function (new_node) { - try { - inst.edit(new_node); - } catch (ex) { - setTimeout(function () { inst.edit(new_node); },0); - } - }); - } - }, - "rename" : { - "separator_before" : false, - "separator_after" : false, - "_disabled" : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")), - "label" : "Rename", - /*! - "shortcut" : 113, - "shortcut_label" : 'F2', - "icon" : "glyphicon glyphicon-leaf", - */ - "action" : function (data) { - var inst = $.jstree.reference(data.reference), - obj = inst.get_node(data.reference); - inst.edit(obj); - } - }, - "remove" : { - "separator_before" : false, - "icon" : false, - "separator_after" : false, - "_disabled" : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")), - "label" : "Delete", - "action" : function (data) { - var inst = $.jstree.reference(data.reference), - obj = inst.get_node(data.reference); - if(inst.is_selected(obj)) { - inst.delete_node(inst.get_selected()); - } - else { - inst.delete_node(obj); - } - } - }, - "ccp" : { - "separator_before" : true, - "icon" : false, - "separator_after" : false, - "label" : "Edit", - "action" : false, - "submenu" : { - "cut" : { - "separator_before" : false, - "separator_after" : false, - "label" : "Cut", - "action" : function (data) { - var inst = $.jstree.reference(data.reference), - obj = inst.get_node(data.reference); - if(inst.is_selected(obj)) { - inst.cut(inst.get_top_selected()); - } - else { - inst.cut(obj); - } - } - }, - "copy" : { - "separator_before" : false, - "icon" : false, - "separator_after" : false, - "label" : "Copy", - "action" : function (data) { - var inst = $.jstree.reference(data.reference), - obj = inst.get_node(data.reference); - if(inst.is_selected(obj)) { - inst.copy(inst.get_top_selected()); - } - else { - inst.copy(obj); - } - } - }, - "paste" : { - "separator_before" : false, - "icon" : false, - "_disabled" : function (data) { - return !$.jstree.reference(data.reference).can_paste(); - }, - "separator_after" : false, - "label" : "Paste", - "action" : function (data) { - var inst = $.jstree.reference(data.reference), - obj = inst.get_node(data.reference); - inst.paste(obj); - } - } - } - } - }; - } - }; - - $.jstree.plugins.contextmenu = function (options, parent) { - this.bind = function () { - parent.bind.call(this); - - var last_ts = 0, cto = null, ex, ey; - this.element - .on("init.jstree loading.jstree ready.jstree", function () { - this.get_container_ul().addClass('jstree-contextmenu'); - }.bind(this)) - .on("contextmenu.jstree", ".jstree-anchor", function (e, data) { - if (e.target.tagName.toLowerCase() === 'input') { - return; - } - e.preventDefault(); - last_ts = e.ctrlKey ? +new Date() : 0; - if(data || cto) { - last_ts = (+new Date()) + 10000; - } - if(cto) { - clearTimeout(cto); - } - if(!this.is_loading(e.currentTarget)) { - this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e); - } - }.bind(this)) - .on("click.jstree", ".jstree-anchor", function (e) { - if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click - $.vakata.context.hide(); - } - last_ts = 0; - }.bind(this)) - .on("touchstart.jstree", ".jstree-anchor", function (e) { - if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) { - return; - } - ex = e.originalEvent.changedTouches[0].clientX; - ey = e.originalEvent.changedTouches[0].clientY; - cto = setTimeout(function () { - $(e.currentTarget).trigger('contextmenu', true); - }, 750); - }) - .on('touchmove.vakata.jstree', function (e) { - if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) { - clearTimeout(cto); - $.vakata.context.hide(); - } - }) - .on('touchend.vakata.jstree', function (e) { - if(cto) { - clearTimeout(cto); - } - }); - - /*! - if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) { - var el = null, tm = null; - this.element - .on("touchstart", ".jstree-anchor", function (e) { - el = e.currentTarget; - tm = +new Date(); - $(document).one("touchend", function (e) { - e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset); - e.currentTarget = e.target; - tm = ((+(new Date())) - tm); - if(e.target === el && tm > 600 && tm < 1000) { - e.preventDefault(); - $(el).trigger('contextmenu', e); - } - el = null; - tm = null; - }); - }); - } - */ - $(document).on("context_hide.vakata.jstree", function (e, data) { - this._data.contextmenu.visible = false; - $(data.reference).removeClass('jstree-context'); - }.bind(this)); - }; - this.teardown = function () { - if(this._data.contextmenu.visible) { - $.vakata.context.hide(); - } - $(document).off("context_hide.vakata.jstree"); - parent.teardown.call(this); - }; - - /** - * prepare and show the context menu for a node - * @name show_contextmenu(obj [, x, y]) - * @param {mixed} obj the node - * @param {Number} x the x-coordinate relative to the document to show the menu at - * @param {Number} y the y-coordinate relative to the document to show the menu at - * @param {Object} e the event if available that triggered the contextmenu - * @plugin contextmenu - * @trigger show_contextmenu.jstree - */ - this.show_contextmenu = function (obj, x, y, e) { - obj = this.get_node(obj); - if(!obj || obj.id === $.jstree.root) { return false; } - var s = this.settings.contextmenu, - d = this.get_node(obj, true), - a = d.children(".jstree-anchor"), - o = false, - i = false; - if(s.show_at_node || x === undefined || y === undefined) { - o = a.offset(); - x = o.left; - y = o.top + this._data.core.li_height; - } - if(this.settings.contextmenu.select_node && !this.is_selected(obj)) { - this.activate_node(obj, e); - } - - i = s.items; - if($.vakata.is_function(i)) { - i = i.call(this, obj, function (i) { - this._show_contextmenu(obj, x, y, i); - }.bind(this)); - } - if($.isPlainObject(i)) { - this._show_contextmenu(obj, x, y, i); - } - }; - /** - * show the prepared context menu for a node - * @name _show_contextmenu(obj, x, y, i) - * @param {mixed} obj the node - * @param {Number} x the x-coordinate relative to the document to show the menu at - * @param {Number} y the y-coordinate relative to the document to show the menu at - * @param {Number} i the object of items to show - * @plugin contextmenu - * @trigger show_contextmenu.jstree - * @private - */ - this._show_contextmenu = function (obj, x, y, i) { - var d = this.get_node(obj, true), - a = d.children(".jstree-anchor"); - $(document).one("context_show.vakata.jstree", function (e, data) { - var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu'; - $(data.element).addClass(cls); - a.addClass('jstree-context'); - }.bind(this)); - this._data.contextmenu.visible = true; - $.vakata.context.show(a, { 'x' : x, 'y' : y }, i); - /** - * triggered when the contextmenu is shown for a node - * @event - * @name show_contextmenu.jstree - * @param {Object} node the node - * @param {Number} x the x-coordinate of the menu relative to the document - * @param {Number} y the y-coordinate of the menu relative to the document - * @plugin contextmenu - */ - this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y }); - }; - }; - - // contextmenu helper - (function ($) { - var right_to_left = false, - vakata_context = { - element : false, - reference : false, - position_x : 0, - position_y : 0, - items : [], - html : "", - is_visible : false - }; - - $.vakata.context = { - settings : { - hide_onmouseleave : 0, - icons : true - }, - _trigger : function (event_name) { - $(document).triggerHandler("context_" + event_name + ".vakata", { - "reference" : vakata_context.reference, - "element" : vakata_context.element, - "position" : { - "x" : vakata_context.position_x, - "y" : vakata_context.position_y - } - }); - }, - _execute : function (i) { - i = vakata_context.items[i]; - return i && (!i._disabled || ($.vakata.is_function(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, { - "item" : i, - "reference" : vakata_context.reference, - "element" : vakata_context.element, - "position" : { - "x" : vakata_context.position_x, - "y" : vakata_context.position_y - } - }) : false; - }, - _parse : function (o, is_callback) { - if(!o) { return false; } - if(!is_callback) { - vakata_context.html = ""; - vakata_context.items = []; - } - var str = "", - sep = false, - tmp; - - if(is_callback) { str += "<"+"ul>"; } - $.each(o, function (i, val) { - if(!val) { return true; } - vakata_context.items.push(val); - if(!sep && val.separator_before) { - str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'class="vakata-context-no-icons"') + "> <"+"/a><"+"/li>"; - } - sep = false; - str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.vakata.is_function(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">"; - str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">"; - if($.vakata.context.settings.icons) { - str += "<"+"i "; - if(val.icon) { - if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; } - else { str += " class='" + val.icon + "' "; } - } - str += "><"+"/i><"+"span class='vakata-contextmenu-sep'> <"+"/span>"; - } - str += ($.vakata.is_function(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' '+ (val.shortcut_label || '') +'':'') + "<"+"/a>"; - if(val.submenu) { - tmp = $.vakata.context._parse(val.submenu, true); - if(tmp) { str += tmp; } - } - str += "<"+"/li>"; - if(val.separator_after) { - str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'class="vakata-context-no-icons"') + "> <"+"/a><"+"/li>"; - sep = true; - } - }); - str = str.replace(/
    • <\/li\>$/,""); - if(is_callback) { str += ""; } - /** - * triggered on the document when the contextmenu is parsed (HTML is built) - * @event - * @plugin contextmenu - * @name context_parse.vakata - * @param {jQuery} reference the element that was right clicked - * @param {jQuery} element the DOM element of the menu itself - * @param {Object} position the x & y coordinates of the menu - */ - if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); } - return str.length > 10 ? str : false; - }, - _show_submenu : function (o) { - o = $(o); - if(!o.length || !o.children("ul").length) { return; } - var e = o.children("ul"), - xl = o.offset().left, - x = xl + o.outerWidth(), - y = o.offset().top, - w = e.width(), - h = e.height(), - dw = $(window).width() + $(window).scrollLeft(), - dh = $(window).height() + $(window).scrollTop(); - // може да се спести е една проверка - дали няма някой от класовете вече нагоре - if(right_to_left) { - o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left"); - } - else { - o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right"); - } - if(y + h + 10 > dh) { - e.css("bottom","-1px"); - } - - //if does not fit - stick it to the side - if (o.hasClass('vakata-context-right')) { - if (xl < w) { - e.css("margin-right", xl - w); - } - } else { - if (dw - x < w) { - e.css("margin-left", dw - x - w); - } - } - - e.show(); - }, - show : function (reference, position, data) { - var o, e, x, y, w, h, dw, dh, cond = true; - if(vakata_context.element && vakata_context.element.length) { - vakata_context.element.width(''); - } - switch(cond) { - case (!position && !reference): - return false; - case (!!position && !!reference): - vakata_context.reference = reference; - vakata_context.position_x = position.x; - vakata_context.position_y = position.y; - break; - case (!position && !!reference): - vakata_context.reference = reference; - o = reference.offset(); - vakata_context.position_x = o.left + reference.outerHeight(); - vakata_context.position_y = o.top; - break; - case (!!position && !reference): - vakata_context.position_x = position.x; - vakata_context.position_y = position.y; - break; - } - if(!!reference && !data && $(reference).data('vakata_contextmenu')) { - data = $(reference).data('vakata_contextmenu'); - } - if($.vakata.context._parse(data)) { - vakata_context.element.html(vakata_context.html); - } - if(vakata_context.items.length) { - vakata_context.element.appendTo(document.body); - e = vakata_context.element; - x = vakata_context.position_x; - y = vakata_context.position_y; - w = e.width(); - h = e.height(); - dw = $(window).width() + $(window).scrollLeft(); - dh = $(window).height() + $(window).scrollTop(); - if(right_to_left) { - x -= (e.outerWidth() - $(reference).outerWidth()); - if(x < $(window).scrollLeft() + 20) { - x = $(window).scrollLeft() + 20; - } - } - if(x + w + 20 > dw) { - x = dw - (w + 20); - } - if(y + h + 20 > dh) { - y = dh - (h + 20); - } - - vakata_context.element - .css({ "left" : x, "top" : y }) - .show() - .find('a').first().trigger('focus').parent().addClass("vakata-context-hover"); - vakata_context.is_visible = true; - /** - * triggered on the document when the contextmenu is shown - * @event - * @plugin contextmenu - * @name context_show.vakata - * @param {jQuery} reference the element that was right clicked - * @param {jQuery} element the DOM element of the menu itself - * @param {Object} position the x & y coordinates of the menu - */ - $.vakata.context._trigger("show"); - } - }, - hide : function () { - if(vakata_context.is_visible) { - vakata_context.element.hide().find("ul").hide().end().find(':focus').trigger('blur').end().detach(); - vakata_context.is_visible = false; - /** - * triggered on the document when the contextmenu is hidden - * @event - * @plugin contextmenu - * @name context_hide.vakata - * @param {jQuery} reference the element that was right clicked - * @param {jQuery} element the DOM element of the menu itself - * @param {Object} position the x & y coordinates of the menu - */ - $.vakata.context._trigger("hide"); - } - } - }; - $(function () { - right_to_left = $(document.body).css("direction") === "rtl"; - var to = false; - - vakata_context.element = $("
        "); - vakata_context.element - .on("mouseenter", "li", function (e) { - e.stopImmediatePropagation(); - - if($.contains(this, e.relatedTarget)) { - // премахнато заради delegate mouseleave по-долу - // $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); - return; - } - - if(to) { clearTimeout(to); } - vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(); - - $(this) - .siblings().find("ul").hide().end().end() - .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover"); - $.vakata.context._show_submenu(this); - }) - // тестово - дали не натоварва? - .on("mouseleave", "li", function (e) { - if($.contains(this, e.relatedTarget)) { return; } - $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover"); - }) - .on("mouseleave", function (e) { - $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); - if($.vakata.context.settings.hide_onmouseleave) { - to = setTimeout( - (function (t) { - return function () { $.vakata.context.hide(); }; - }(this)), $.vakata.context.settings.hide_onmouseleave); - } - }) - .on("click", "a", function (e) { - e.preventDefault(); - //}) - //.on("mouseup", "a", function (e) { - if(!$(this).trigger('blur').parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) { - $.vakata.context.hide(); - } - }) - .on('keydown', 'a', function (e) { - var o = null; - switch(e.which) { - case 13: - case 32: - e.type = "click"; - e.preventDefault(); - $(e.currentTarget).trigger(e); - break; - case 37: - if(vakata_context.is_visible) { - vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').trigger('focus'); - e.stopImmediatePropagation(); - e.preventDefault(); - } - break; - case 38: - if(vakata_context.is_visible) { - o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(); - if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); } - o.addClass("vakata-context-hover").children('a').trigger('focus'); - e.stopImmediatePropagation(); - e.preventDefault(); - } - break; - case 39: - if(vakata_context.is_visible) { - vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').trigger('focus'); - e.stopImmediatePropagation(); - e.preventDefault(); - } - break; - case 40: - if(vakata_context.is_visible) { - o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(); - if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); } - o.addClass("vakata-context-hover").children('a').trigger('focus'); - e.stopImmediatePropagation(); - e.preventDefault(); - } - break; - case 27: - $.vakata.context.hide(); - e.preventDefault(); - break; - default: - //console.log(e.which); - break; - } - }) - .on('keydown', function (e) { - e.preventDefault(); - var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent(); - if(a.parent().not('.vakata-context-disabled')) { - a.trigger('click'); - } - }); - - $(document) - .on("mousedown.vakata.jstree", function (e) { - if(vakata_context.is_visible && vakata_context.element[0] !== e.target && !$.contains(vakata_context.element[0], e.target)) { - $.vakata.context.hide(); - } - }) - .on("context_show.vakata.jstree", function (e, data) { - vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"); - if(right_to_left) { - vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl"); - } - // also apply a RTL class? - vakata_context.element.find("ul").hide().end(); - }); - }); - }($)); - // $.jstree.defaults.plugins.push("contextmenu"); - - -/** - * ### Drag'n'drop plugin - * - * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations. - */ - - /** - * stores all defaults for the drag'n'drop plugin - * @name $.jstree.defaults.dnd - * @plugin dnd - */ - $.jstree.defaults.dnd = { - /** - * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`. - * @name $.jstree.defaults.dnd.copy - * @plugin dnd - */ - copy : true, - /** - * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`. - * @name $.jstree.defaults.dnd.open_timeout - * @plugin dnd - */ - open_timeout : 500, - /** - * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging - * @name $.jstree.defaults.dnd.is_draggable - * @plugin dnd - */ - is_draggable : true, - /** - * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true` - * @name $.jstree.defaults.dnd.check_while_dragging - * @plugin dnd - */ - check_while_dragging : true, - /** - * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false` - * @name $.jstree.defaults.dnd.always_copy - * @plugin dnd - */ - always_copy : false, - /** - * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0` - * @name $.jstree.defaults.dnd.inside_pos - * @plugin dnd - */ - inside_pos : 0, - /** - * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node - * @name $.jstree.defaults.dnd.drag_selection - * @plugin dnd - */ - drag_selection : true, - /** - * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string "selected" which means only selected nodes can be dragged on touch devices. - * @name $.jstree.defaults.dnd.touch - * @plugin dnd - */ - touch : true, - /** - * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target. - * @name $.jstree.defaults.dnd.large_drop_target - * @plugin dnd - */ - large_drop_target : false, - /** - * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to "selected". - * @name $.jstree.defaults.dnd.large_drag_target - * @plugin dnd - */ - large_drag_target : false, - /** - * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls. - * @reference http://caniuse.com/#feat=dragndrop - * @name $.jstree.defaults.dnd.use_html5 - * @plugin dnd - */ - use_html5: false - }; - var drg, elm; - // TODO: now check works by checking for each node individually, how about max_children, unique, etc? - $.jstree.plugins.dnd = function (options, parent) { - this.init = function (el, options) { - parent.init.call(this, el, options); - this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span')); - }; - this.bind = function () { - parent.bind.call(this); - - this.element - .on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', function (e) { - if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) { - return true; - } - if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) { - return true; - } - var obj = this.get_node(e.target), - mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1, - txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget)); - if(this.settings.core.force_text) { - txt = $.vakata.html.escape(txt); - } - if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") && - (this.settings.dnd.is_draggable === true || ($.vakata.is_function(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e))) - ) { - drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] }; - elm = e.currentTarget; - if (this.settings.dnd.use_html5) { - $.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg }); - } else { - this.element.trigger('mousedown.jstree'); - return $.vakata.dnd.start(e, drg, '
        ' + txt + '+
        '); - } - } - }.bind(this)); - if (this.settings.dnd.use_html5) { - this.element - .on('dragover.jstree', function (e) { - e.preventDefault(); - $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); - return false; - }) - //.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) { - // e.preventDefault(); - // $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); - // return false; - // }, this)) - .on('drop.jstree', function (e) { - e.preventDefault(); - $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); - return false; - }.bind(this)); - } - }; - this.redraw_node = function(obj, deep, callback, force_render) { - obj = parent.redraw_node.apply(this, arguments); - if (obj && this.settings.dnd.use_html5) { - if (this.settings.dnd.large_drag_target) { - obj.setAttribute('draggable', true); - } else { - var i, j, tmp = null; - for(i = 0, j = obj.childNodes.length; i < j; i++) { - if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { - tmp = obj.childNodes[i]; - break; - } - } - if(tmp) { - tmp.setAttribute('draggable', true); - } - } - } - return obj; - }; - }; - - $(function() { - // bind only once for all instances - var lastmv = false, - laster = false, - lastev = false, - opento = false, - marker = $('
         
        ').hide(); //.appendTo('body'); - - $(document) - .on('dragover.vakata.jstree', function (e) { - if (elm) { - $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); - } - }) - .on('drop.vakata.jstree', function (e) { - if (elm) { - $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); - elm = null; - drg = null; - } - }) - .on('dnd_start.vakata.jstree', function (e, data) { - lastmv = false; - lastev = false; - if(!data || !data.data || !data.data.jstree) { return; } - marker.appendTo(document.body); //.show(); - }) - .on('dnd_move.vakata.jstree', function (e, data) { - var isDifferentNode = data.event.target !== lastev.target; - if(opento) { - if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { - clearTimeout(opento); - } - } - if(!data || !data.data || !data.data.jstree) { return; } - - // if we are hovering the marker image do nothing (can happen on "inside" drags) - if(data.event.target.id && data.event.target.id === 'jstree-marker') { - return; - } - lastev = data.event; - - var ins = $.jstree.reference(data.event.target), - ref = false, - off = false, - rel = false, - tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn, c; - // if we are over an instance - if(ins && ins._data && ins._data.dnd) { - marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )); - is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))); - data.helper - .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )) - .find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ](); - - // if are hovering the container itself add a new root node - //console.log(data.event); - if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) { - ok = true; - for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { - ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }); - if(!ok) { break; } - } - if(ok) { - lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' }; - marker.hide(); - data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); - if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { - data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; - } - return; - } - } - else { - // if we are hovering a tree node - ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor'); - if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) { - off = ref.offset(); - rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top; - h = ref.outerHeight(); - if(rel < h / 3) { - o = ['b', 'i', 'a']; - } - else if(rel > h - h / 3) { - o = ['a', 'i', 'b']; - } - else { - o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a']; - } - $.each(o, function (j, v) { - switch(v) { - case 'b': - l = off.left - 6; - t = off.top; - p = ins.get_parent(ref); - i = ref.parent().index(); - c = 'jstree-below'; - break; - case 'i': - ip = ins.settings.dnd.inside_pos; - tm = ins.get_node(ref.parent()); - l = off.left - 2; - t = off.top + h / 2 + 1; - p = tm.id; - i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length)); - c = 'jstree-inside'; - break; - case 'a': - l = off.left - 6; - t = off.top + h; - p = ins.get_parent(ref); - i = ref.parent().index() + 1; - c = 'jstree-above'; - break; - } - ok = true; - for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { - op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node"; - ps = i; - if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) { - pr = ins.get_node(p); - if(ps > $.inArray(data.data.nodes[t1], pr.children)) { - ps -= 1; - } - } - ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) ); - if(!ok) { - if(ins && ins.last_error) { laster = ins.last_error(); } - break; - } - } - if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) { - if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { - if (opento) { clearTimeout(opento); } - opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout); - } - } - if(ok) { - pn = ins.get_node(p, true); - if (!pn.hasClass('.jstree-dnd-parent')) { - $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); - pn.addClass('jstree-dnd-parent'); - } - lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i }; - marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show(); - marker.removeClass('jstree-above jstree-inside jstree-below').addClass(c); - data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); - if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { - data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; - } - laster = {}; - o = true; - return false; - } - }); - if(o === true) { return; } - } - } - } - $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); - lastmv = false; - data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er'); - if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { - //data.event.originalEvent.dataTransfer.dropEffect = 'none'; - } - marker.hide(); - }) - .on('dnd_scroll.vakata.jstree', function (e, data) { - if(!data || !data.data || !data.data.jstree) { return; } - marker.hide(); - lastmv = false; - lastev = false; - data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er'); - }) - .on('dnd_stop.vakata.jstree', function (e, data) { - $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); - if(opento) { clearTimeout(opento); } - if(!data || !data.data || !data.data.jstree) { return; } - marker.hide().detach(); - var i, j, nodes = []; - if(lastmv) { - for(i = 0, j = data.data.nodes.length; i < j; i++) { - nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i]; - } - lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin); - } - else { - i = $(data.event.target).closest('.jstree'); - if(i.length && laster && laster.error && laster.error === 'check') { - i = i.jstree(true); - if(i) { - i.settings.core.error.call(this, laster); - } - } - } - lastev = false; - lastmv = false; - }) - .on('keyup.jstree keydown.jstree', function (e, data) { - data = $.vakata.dnd._get(); - if(data && data.data && data.data.jstree) { - if (e.type === "keyup" && e.which === 27) { - if (opento) { clearTimeout(opento); } - lastmv = false; - laster = false; - lastev = false; - opento = false; - marker.hide().detach(); - $.vakata.dnd._clean(); - } else { - data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ](); - if(lastev) { - lastev.metaKey = e.metaKey; - lastev.ctrlKey = e.ctrlKey; - $.vakata.dnd._trigger('move', lastev); - } - } - } - }); - }); - - // helpers - (function ($) { - $.vakata.html = { - div : $('
        '), - escape : function (str) { - return $.vakata.html.div.text(str).html(); - }, - strip : function (str) { - return $.vakata.html.div.empty().append($.parseHTML(str)).text(); - } - }; - // private variable - var vakata_dnd = { - element : false, - target : false, - is_down : false, - is_drag : false, - helper : false, - helper_w: 0, - data : false, - init_x : 0, - init_y : 0, - scroll_l: 0, - scroll_t: 0, - scroll_e: false, - scroll_i: false, - is_touch: false - }; - $.vakata.dnd = { - settings : { - scroll_speed : 10, - scroll_proximity : 20, - helper_left : 5, - helper_top : 10, - threshold : 5, - threshold_touch : 10 - }, - _trigger : function (event_name, e, data) { - if (data === undefined) { - data = $.vakata.dnd._get(); - } - data.event = e; - $(document).triggerHandler("dnd_" + event_name + ".vakata", data); - }, - _get : function () { - return { - "data" : vakata_dnd.data, - "element" : vakata_dnd.element, - "helper" : vakata_dnd.helper - }; - }, - _clean : function () { - if(vakata_dnd.helper) { vakata_dnd.helper.remove(); } - if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } - vakata_dnd = { - element : false, - target : false, - is_down : false, - is_drag : false, - helper : false, - helper_w: 0, - data : false, - init_x : 0, - init_y : 0, - scroll_l: 0, - scroll_t: 0, - scroll_e: false, - scroll_i: false, - is_touch: false - }; - elm = null; - $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); - $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); - }, - _scroll : function (init_only) { - if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) { - if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } - return false; - } - if(!vakata_dnd.scroll_i) { - vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100); - return false; - } - if(init_only === true) { return false; } - - var i = vakata_dnd.scroll_e.scrollTop(), - j = vakata_dnd.scroll_e.scrollLeft(); - vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed); - vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed); - if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) { - /** - * triggered on the document when a drag causes an element to scroll - * @event - * @plugin dnd - * @name dnd_scroll.vakata - * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start - * @param {DOM} element the DOM element being dragged - * @param {jQuery} helper the helper shown next to the mouse - * @param {jQuery} event the element that is scrolling - */ - $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e); - } - }, - start : function (e, data, html) { - if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { - e.pageX = e.originalEvent.changedTouches[0].pageX; - e.pageY = e.originalEvent.changedTouches[0].pageY; - e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); - } - if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); } - try { - e.currentTarget.unselectable = "on"; - e.currentTarget.onselectstart = function() { return false; }; - if(e.currentTarget.style) { - e.currentTarget.style.touchAction = "none"; - e.currentTarget.style.msTouchAction = "none"; - e.currentTarget.style.MozUserSelect = "none"; - } - } catch(ignore) { } - vakata_dnd.init_x = e.pageX; - vakata_dnd.init_y = e.pageY; - vakata_dnd.data = data; - vakata_dnd.is_down = true; - vakata_dnd.element = e.currentTarget; - vakata_dnd.target = e.target; - vakata_dnd.is_touch = e.type === "touchstart"; - if(html !== false) { - vakata_dnd.helper = $("
        ").html(html).css({ - "display" : "block", - "margin" : "0", - "padding" : "0", - "position" : "absolute", - "top" : "-2000px", - "lineHeight" : "16px", - "zIndex" : "10000" - }); - } - $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); - $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); - return false; - }, - drag : function (e) { - if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { - e.pageX = e.originalEvent.changedTouches[0].pageX; - e.pageY = e.originalEvent.changedTouches[0].pageY; - e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); - } - if(!vakata_dnd.is_down) { return; } - if(!vakata_dnd.is_drag) { - if( - Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) || - Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) - ) { - if(vakata_dnd.helper) { - vakata_dnd.helper.appendTo(document.body); - vakata_dnd.helper_w = vakata_dnd.helper.outerWidth(); - } - vakata_dnd.is_drag = true; - $(vakata_dnd.target).one('click.vakata', false); - /** - * triggered on the document when a drag starts - * @event - * @plugin dnd - * @name dnd_start.vakata - * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start - * @param {DOM} element the DOM element being dragged - * @param {jQuery} helper the helper shown next to the mouse - * @param {Object} event the event that caused the start (probably mousemove) - */ - $.vakata.dnd._trigger("start", e); - } - else { return; } - } - - var d = false, w = false, - dh = false, wh = false, - dw = false, ww = false, - dt = false, dl = false, - ht = false, hl = false; - - vakata_dnd.scroll_t = 0; - vakata_dnd.scroll_l = 0; - vakata_dnd.scroll_e = false; - $($(e.target).parentsUntil("body").addBack().get().reverse()) - .filter(function () { - return (/^auto|scroll$/).test($(this).css("overflow")) && - (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth); - }) - .each(function () { - var t = $(this), o = t.offset(); - if(this.scrollHeight > this.offsetHeight) { - if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } - if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } - } - if(this.scrollWidth > this.offsetWidth) { - if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } - if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } - } - if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { - vakata_dnd.scroll_e = $(this); - return false; - } - }); - - if(!vakata_dnd.scroll_e) { - d = $(document); w = $(window); - dh = d.height(); wh = w.height(); - dw = d.width(); ww = w.width(); - dt = d.scrollTop(); dl = d.scrollLeft(); - if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } - if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } - if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } - if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } - if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { - vakata_dnd.scroll_e = d; - } - } - if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); } - - if(vakata_dnd.helper) { - ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10); - hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10); - if(dh && ht + 25 > dh) { ht = dh - 50; } - if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); } - vakata_dnd.helper.css({ - left : hl + "px", - top : ht + "px" - }); - } - /** - * triggered on the document when a drag is in progress - * @event - * @plugin dnd - * @name dnd_move.vakata - * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start - * @param {DOM} element the DOM element being dragged - * @param {jQuery} helper the helper shown next to the mouse - * @param {Object} event the event that caused this to trigger (most likely mousemove) - */ - $.vakata.dnd._trigger("move", e); - return false; - }, - stop : function (e) { - if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { - e.pageX = e.originalEvent.changedTouches[0].pageX; - e.pageY = e.originalEvent.changedTouches[0].pageY; - e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); - } - if(vakata_dnd.is_drag) { - /** - * triggered on the document when a drag stops (the dragged element is dropped) - * @event - * @plugin dnd - * @name dnd_stop.vakata - * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start - * @param {DOM} element the DOM element being dragged - * @param {jQuery} helper the helper shown next to the mouse - * @param {Object} event the event that caused the stop - */ - if (e.target !== vakata_dnd.target) { - $(vakata_dnd.target).off('click.vakata'); - } - $.vakata.dnd._trigger("stop", e); - } - else { - if(e.type === "touchend" && e.target === vakata_dnd.target) { - var to = setTimeout(function () { $(e.target).trigger('click'); }, 100); - $(e.target).one('click', function() { if(to) { clearTimeout(to); } }); - } - } - $.vakata.dnd._clean(); - return false; - } - }; - }($)); - - // include the dnd plugin by default - // $.jstree.defaults.plugins.push("dnd"); - - -/** - * ### Massload plugin - * - * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading). - */ - - /** - * massload configuration - * - * It is possible to set this to a standard jQuery-like AJAX config. - * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used. - * - * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result. - * - * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array. - * - * { - * "id1" : [{ "text" : "Child of ID1", "id" : "c1" }, { "text" : "Another child of ID1", "id" : "c2" }], - * "id2" : [{ "text" : "Child of ID2", "id" : "c3" }] - * } - * - * @name $.jstree.defaults.massload - * @plugin massload - */ - $.jstree.defaults.massload = null; - $.jstree.plugins.massload = function (options, parent) { - this.init = function (el, options) { - this._data.massload = {}; - parent.init.call(this, el, options); - }; - this._load_nodes = function (nodes, callback, is_callback, force_reload) { - var s = this.settings.massload, - toLoad = [], - m = this._model.data, - i, j, dom; - if (!is_callback) { - for(i = 0, j = nodes.length; i < j; i++) { - if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) { - toLoad.push(nodes[i]); - dom = this.get_node(nodes[i], true); - if (dom && dom.length) { - dom.addClass("jstree-loading").attr('aria-busy',true); - } - } - } - this._data.massload = {}; - if (toLoad.length) { - if($.vakata.is_function(s)) { - return s.call(this, toLoad, function (data) { - var i, j; - if(data) { - for(i in data) { - if(data.hasOwnProperty(i)) { - this._data.massload[i] = data[i]; - } - } - } - for(i = 0, j = nodes.length; i < j; i++) { - dom = this.get_node(nodes[i], true); - if (dom && dom.length) { - dom.removeClass("jstree-loading").attr('aria-busy',false); - } - } - parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); - }.bind(this)); - } - if(typeof s === 'object' && s && s.url) { - s = $.extend(true, {}, s); - if($.vakata.is_function(s.url)) { - s.url = s.url.call(this, toLoad); - } - if($.vakata.is_function(s.data)) { - s.data = s.data.call(this, toLoad); - } - return $.ajax(s) - .done(function (data,t,x) { - var i, j; - if(data) { - for(i in data) { - if(data.hasOwnProperty(i)) { - this._data.massload[i] = data[i]; - } - } - } - for(i = 0, j = nodes.length; i < j; i++) { - dom = this.get_node(nodes[i], true); - if (dom && dom.length) { - dom.removeClass("jstree-loading").attr('aria-busy',false); - } - } - parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); - }.bind(this)) - .fail(function (f) { - parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); - }.bind(this)); - } - } - } - return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); - }; - this._load_node = function (obj, callback) { - var data = this._data.massload[obj.id], - rslt = null, dom; - if(data) { - rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data']( - obj, - typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data, - function (status) { callback.call(this, status); } - ); - dom = this.get_node(obj.id, true); - if (dom && dom.length) { - dom.removeClass("jstree-loading").attr('aria-busy',false); - } - delete this._data.massload[obj.id]; - return rslt; - } - return parent._load_node.call(this, obj, callback); - }; - }; - - -/** - * ### Search plugin - * - * Adds search functionality to jsTree. - */ - - /** - * stores all defaults for the search plugin - * @name $.jstree.defaults.search - * @plugin search - */ - $.jstree.defaults.search = { - /** - * a jQuery-like AJAX config, which jstree uses if a server should be queried for results. - * - * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed. - * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to - * @name $.jstree.defaults.search.ajax - * @plugin search - */ - ajax : false, - /** - * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`. - * @name $.jstree.defaults.search.fuzzy - * @plugin search - */ - fuzzy : false, - /** - * Indicates if the search should be case sensitive. Default is `false`. - * @name $.jstree.defaults.search.case_sensitive - * @plugin search - */ - case_sensitive : false, - /** - * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers). - * This setting can be changed at runtime when calling the search method. Default is `false`. - * @name $.jstree.defaults.search.show_only_matches - * @plugin search - */ - show_only_matches : false, - /** - * Indicates if the children of matched element are shown (when show_only_matches is true) - * This setting can be changed at runtime when calling the search method. Default is `false`. - * @name $.jstree.defaults.search.show_only_matches_children - * @plugin search - */ - show_only_matches_children : false, - /** - * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`. - * @name $.jstree.defaults.search.close_opened_onclear - * @plugin search - */ - close_opened_onclear : true, - /** - * Indicates if only leaf nodes should be included in search results. Default is `false`. - * @name $.jstree.defaults.search.search_leaves_only - * @plugin search - */ - search_leaves_only : false, - /** - * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution). - * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`. - * @name $.jstree.defaults.search.search_callback - * @plugin search - */ - search_callback : false - }; - - $.jstree.plugins.search = function (options, parent) { - this.bind = function () { - parent.bind.call(this); - - this._data.search.str = ""; - this._data.search.dom = $(); - this._data.search.res = []; - this._data.search.opn = []; - this._data.search.som = false; - this._data.search.smc = false; - this._data.search.hdn = []; - - this.element - .on("search.jstree", function (e, data) { - if(this._data.search.som && data.res.length) { - var m = this._model.data, i, j, p = [], k, l; - for(i = 0, j = data.res.length; i < j; i++) { - if(m[data.res[i]] && !m[data.res[i]].state.hidden) { - p.push(data.res[i]); - p = p.concat(m[data.res[i]].parents); - if(this._data.search.smc) { - for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) { - if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) { - p.push(m[data.res[i]].children_d[k]); - } - } - } - } - } - p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root); - this._data.search.hdn = this.hide_all(true); - this.show_node(p, true); - this.redraw(true); - } - }.bind(this)) - .on("clear_search.jstree", function (e, data) { - if(this._data.search.som && data.res.length) { - this.show_node(this._data.search.hdn, true); - this.redraw(true); - } - }.bind(this)); - }; - /** - * used to search the tree nodes for a given string - * @name search(str [, skip_async]) - * @param {String} str the search string - * @param {Boolean} skip_async if set to true server will not be queried even if configured - * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers) - * @param {mixed} inside an optional node to whose children to limit the search - * @param {Boolean} append if set to true the results of this search are appended to the previous search - * @plugin search - * @trigger search.jstree - */ - this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) { - if(str === false || $.vakata.trim(str.toString()) === "") { - return this.clear_search(); - } - inside = this.get_node(inside); - inside = inside && inside.id ? inside.id : null; - str = str.toString(); - var s = this.settings.search, - a = s.ajax ? s.ajax : false, - m = this._model.data, - f = null, - r = [], - p = [], i, j; - if(this._data.search.res.length && !append) { - this.clear_search(); - } - if(show_only_matches === undefined) { - show_only_matches = s.show_only_matches; - } - if(show_only_matches_children === undefined) { - show_only_matches_children = s.show_only_matches_children; - } - if(!skip_async && a !== false) { - if($.vakata.is_function(a)) { - return a.call(this, str, function (d) { - if(d && d.d) { d = d.d; } - this._load_nodes(!$.vakata.is_array(d) ? [] : $.vakata.array_unique(d), function () { - this.search(str, true, show_only_matches, inside, append, show_only_matches_children); - }); - }.bind(this), inside); - } - else { - a = $.extend({}, a); - if(!a.data) { a.data = {}; } - a.data.str = str; - if(inside) { - a.data.inside = inside; - } - if (this._data.search.lastRequest) { - this._data.search.lastRequest.abort(); - } - this._data.search.lastRequest = $.ajax(a) - .fail(function () { - this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) }; - this.settings.core.error.call(this, this._data.core.last_error); - }.bind(this)) - .done(function (d) { - if(d && d.d) { d = d.d; } - this._load_nodes(!$.vakata.is_array(d) ? [] : $.vakata.array_unique(d), function () { - this.search(str, true, show_only_matches, inside, append, show_only_matches_children); - }); - }.bind(this)); - return this._data.search.lastRequest; - } - } - if(!append) { - this._data.search.str = str; - this._data.search.dom = $(); - this._data.search.res = []; - this._data.search.opn = []; - this._data.search.som = show_only_matches; - this._data.search.smc = show_only_matches_children; - } - - f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy }); - $.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) { - var v = m[i]; - if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) { - r.push(i); - p = p.concat(v.parents); - } - }); - if(r.length) { - p = $.vakata.array_unique(p); - for(i = 0, j = p.length; i < j; i++) { - if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) { - this._data.search.opn.push(p[i]); - } - } - if(!append) { - this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))); - this._data.search.res = r; - } - else { - this._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')))); - this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r)); - } - this._data.search.dom.children(".jstree-anchor").addClass('jstree-search'); - } - /** - * triggered after search is complete - * @event - * @name search.jstree - * @param {jQuery} nodes a jQuery collection of matching nodes - * @param {String} str the search string - * @param {Array} res a collection of objects represeing the matching nodes - * @plugin search - */ - this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches }); - }; - /** - * used to clear the last search (removes classes and shows all nodes if filtering is on) - * @name clear_search() - * @plugin search - * @trigger clear_search.jstree - */ - this.clear_search = function () { - if(this.settings.search.close_opened_onclear) { - this.close_node(this._data.search.opn, 0); - } - /** - * triggered after search is complete - * @event - * @name clear_search.jstree - * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search) - * @param {String} str the search string (the last search string) - * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search) - * @plugin search - */ - this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res }); - if(this._data.search.res.length) { - this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) { - return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); - }).join(', #'))); - this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search"); - } - this._data.search.str = ""; - this._data.search.res = []; - this._data.search.opn = []; - this._data.search.dom = $(); - }; - - this.redraw_node = function(obj, deep, callback, force_render) { - obj = parent.redraw_node.apply(this, arguments); - if(obj) { - if($.inArray(obj.id, this._data.search.res) !== -1) { - var i, j, tmp = null; - for(i = 0, j = obj.childNodes.length; i < j; i++) { - if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { - tmp = obj.childNodes[i]; - break; - } - } - if(tmp) { - tmp.className += ' jstree-search'; - } - } - } - return obj; - }; - }; - - // helpers - (function ($) { - // from http://kiro.me/projects/fuse.html - $.vakata.search = function(pattern, txt, options) { - options = options || {}; - options = $.extend({}, $.vakata.search.defaults, options); - if(options.fuzzy !== false) { - options.fuzzy = true; - } - pattern = options.caseSensitive ? pattern : pattern.toLowerCase(); - var MATCH_LOCATION = options.location, - MATCH_DISTANCE = options.distance, - MATCH_THRESHOLD = options.threshold, - patternLen = pattern.length, - matchmask, pattern_alphabet, match_bitapScore, search; - if(patternLen > 32) { - options.fuzzy = false; - } - if(options.fuzzy) { - matchmask = 1 << (patternLen - 1); - pattern_alphabet = (function () { - var mask = {}, - i = 0; - for (i = 0; i < patternLen; i++) { - mask[pattern.charAt(i)] = 0; - } - for (i = 0; i < patternLen; i++) { - mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1); - } - return mask; - }()); - match_bitapScore = function (e, x) { - var accuracy = e / patternLen, - proximity = Math.abs(MATCH_LOCATION - x); - if(!MATCH_DISTANCE) { - return proximity ? 1.0 : accuracy; - } - return accuracy + (proximity / MATCH_DISTANCE); - }; - } - search = function (text) { - text = options.caseSensitive ? text : text.toLowerCase(); - if(pattern === text || text.indexOf(pattern) !== -1) { - return { - isMatch: true, - score: 0 - }; - } - if(!options.fuzzy) { - return { - isMatch: false, - score: 1 - }; - } - var i, j, - textLen = text.length, - scoreThreshold = MATCH_THRESHOLD, - bestLoc = text.indexOf(pattern, MATCH_LOCATION), - binMin, binMid, - binMax = patternLen + textLen, - lastRd, start, finish, rd, charMatch, - score = 1, - locations = []; - if (bestLoc !== -1) { - scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); - bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen); - if (bestLoc !== -1) { - scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); - } - } - bestLoc = -1; - for (i = 0; i < patternLen; i++) { - binMin = 0; - binMid = binMax; - while (binMin < binMid) { - if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) { - binMin = binMid; - } else { - binMax = binMid; - } - binMid = Math.floor((binMax - binMin) / 2 + binMin); - } - binMax = binMid; - start = Math.max(1, MATCH_LOCATION - binMid + 1); - finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen; - rd = new Array(finish + 2); - rd[finish + 1] = (1 << i) - 1; - for (j = finish; j >= start; j--) { - charMatch = pattern_alphabet[text.charAt(j - 1)]; - if (i === 0) { - rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; - } else { - rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1]; - } - if (rd[j] & matchmask) { - score = match_bitapScore(i, j - 1); - if (score <= scoreThreshold) { - scoreThreshold = score; - bestLoc = j - 1; - locations.push(bestLoc); - if (bestLoc > MATCH_LOCATION) { - start = Math.max(1, 2 * MATCH_LOCATION - bestLoc); - } else { - break; - } - } - } - } - if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) { - break; - } - lastRd = rd; - } - return { - isMatch: bestLoc >= 0, - score: score - }; - }; - return txt === true ? { 'search' : search } : search(txt); - }; - $.vakata.search.defaults = { - location : 0, - distance : 100, - threshold : 0.6, - fuzzy : false, - caseSensitive : false - }; - }($)); - - // include the search plugin by default - // $.jstree.defaults.plugins.push("search"); - - -/** - * ### Sort plugin - * - * Automatically sorts all siblings in the tree according to a sorting function. - */ - - /** - * the settings function used to sort the nodes. - * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`. - * @name $.jstree.defaults.sort - * @plugin sort - */ - $.jstree.defaults.sort = function (a, b) { - //return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b); - return this.get_text(a) > this.get_text(b) ? 1 : -1; - }; - $.jstree.plugins.sort = function (options, parent) { - this.bind = function () { - parent.bind.call(this); - this.element - .on("model.jstree", function (e, data) { - this.sort(data.parent, true); - }.bind(this)) - .on("rename_node.jstree create_node.jstree", function (e, data) { - this.sort(data.parent || data.node.parent, false); - this.redraw_node(data.parent || data.node.parent, true); - }.bind(this)) - .on("move_node.jstree copy_node.jstree", function (e, data) { - this.sort(data.parent, false); - this.redraw_node(data.parent, true); - }.bind(this)); - }; - /** - * used to sort a node's children - * @private - * @name sort(obj [, deep]) - * @param {mixed} obj the node - * @param {Boolean} deep if set to `true` nodes are sorted recursively. - * @plugin sort - * @trigger search.jstree - */ - this.sort = function (obj, deep) { - var i, j; - obj = this.get_node(obj); - if(obj && obj.children && obj.children.length) { - obj.children.sort(this.settings.sort.bind(this)); - if(deep) { - for(i = 0, j = obj.children_d.length; i < j; i++) { - this.sort(obj.children_d[i], false); - } - } - } - }; - }; - - // include the sort plugin by default - // $.jstree.defaults.plugins.push("sort"); - -/** - * ### State plugin - * - * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc) - */ - - var to = false; - /** - * stores all defaults for the state plugin - * @name $.jstree.defaults.state - * @plugin state - */ - $.jstree.defaults.state = { - /** - * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`. - * @name $.jstree.defaults.state.key - * @plugin state - */ - key : 'jstree', - /** - * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`. - * @name $.jstree.defaults.state.events - * @plugin state - */ - events : 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree', - /** - * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire. - * @name $.jstree.defaults.state.ttl - * @plugin state - */ - ttl : false, - /** - * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state. - * @name $.jstree.defaults.state.filter - * @plugin state - */ - filter : false, - /** - * Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false` - * @name $.jstree.defaults.state.preserve_loaded - * @plugin state - */ - preserve_loaded : false - }; - $.jstree.plugins.state = function (options, parent) { - this.bind = function () { - parent.bind.call(this); - var bind = function () { - this.element.on(this.settings.state.events, function () { - if(to) { clearTimeout(to); } - to = setTimeout(function () { this.save_state(); }.bind(this), 100); - }.bind(this)); - /** - * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore). - * @event - * @name state_ready.jstree - * @plugin state - */ - this.trigger('state_ready'); - }.bind(this); - this.element - .on("ready.jstree", function (e, data) { - this.element.one("restore_state.jstree", bind); - if(!this.restore_state()) { bind(); } - }.bind(this)); - }; - /** - * save the state - * @name save_state() - * @plugin state - */ - this.save_state = function () { - var tm = this.get_state(); - if (!this.settings.state.preserve_loaded) { - delete tm.core.loaded; - } - var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) }; - $.vakata.storage.set(this.settings.state.key, JSON.stringify(st)); - }; - /** - * restore the state from the user's computer - * @name restore_state() - * @plugin state - */ - this.restore_state = function () { - var k = $.vakata.storage.get(this.settings.state.key); - if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } } - if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; } - if(!!k && k.state) { k = k.state; } - if(!!k && $.vakata.is_function(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); } - if(!!k) { - if (!this.settings.state.preserve_loaded) { - delete k.core.loaded; - } - this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); }); - this.set_state(k); - return true; - } - return false; - }; - /** - * clear the state on the user's computer - * @name clear_state() - * @plugin state - */ - this.clear_state = function () { - return $.vakata.storage.del(this.settings.state.key); - }; - }; - - (function ($, undefined) { - $.vakata.storage = { - // simply specifying the functions in FF throws an error - set : function (key, val) { return window.localStorage.setItem(key, val); }, - get : function (key) { return window.localStorage.getItem(key); }, - del : function (key) { return window.localStorage.removeItem(key); } - }; - }($)); - - // include the state plugin by default - // $.jstree.defaults.plugins.push("state"); - -/** - * ### Types plugin - * - * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group. - */ - - /** - * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional). - * - * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited. - * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited. - * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits. - * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme. - * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data) - * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data) - * - * There are two predefined types: - * - * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes. - * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified. - * - * @name $.jstree.defaults.types - * @plugin types - */ - $.jstree.defaults.types = { - 'default' : {} - }; - $.jstree.defaults.types[$.jstree.root] = {}; - - $.jstree.plugins.types = function (options, parent) { - this.init = function (el, options) { - var i, j; - if(options && options.types && options.types['default']) { - for(i in options.types) { - if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) { - for(j in options.types['default']) { - if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) { - options.types[i][j] = options.types['default'][j]; - } - } - } - } - } - parent.init.call(this, el, options); - this._model.data[$.jstree.root].type = $.jstree.root; - }; - this.refresh = function (skip_loading, forget_state) { - parent.refresh.call(this, skip_loading, forget_state); - this._model.data[$.jstree.root].type = $.jstree.root; - }; - this.bind = function () { - this.element - .on('model.jstree', function (e, data) { - var m = this._model.data, - dpc = data.nodes, - t = this.settings.types, - i, j, c = 'default', k; - for(i = 0, j = dpc.length; i < j; i++) { - c = 'default'; - if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) { - c = m[dpc[i]].original.type; - } - if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) { - c = m[dpc[i]].data.jstree.type; - } - m[dpc[i]].type = c; - if(m[dpc[i]].icon === true && t[c].icon !== undefined) { - m[dpc[i]].icon = t[c].icon; - } - if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') { - for (k in t[c].li_attr) { - if (t[c].li_attr.hasOwnProperty(k)) { - if (k === 'id') { - continue; - } - else if (m[dpc[i]].li_attr[k] === undefined) { - m[dpc[i]].li_attr[k] = t[c].li_attr[k]; - } - else if (k === 'class') { - m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class']; - } - } - } - } - if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') { - for (k in t[c].a_attr) { - if (t[c].a_attr.hasOwnProperty(k)) { - if (k === 'id') { - continue; - } - else if (m[dpc[i]].a_attr[k] === undefined) { - m[dpc[i]].a_attr[k] = t[c].a_attr[k]; - } - else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') { - m[dpc[i]].a_attr['href'] = t[c].a_attr['href']; - } - else if (k === 'class') { - m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class']; - } - } - } - } - } - m[$.jstree.root].type = $.jstree.root; - }.bind(this)); - parent.bind.call(this); - }; - this.get_json = function (obj, options, flat) { - var i, j, - m = this._model.data, - opt = options ? $.extend(true, {}, options, {no_id:false}) : {}, - tmp = parent.get_json.call(this, obj, opt, flat); - if(tmp === false) { return false; } - if($.vakata.is_array(tmp)) { - for(i = 0, j = tmp.length; i < j; i++) { - tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default"; - if(options && options.no_id) { - delete tmp[i].id; - if(tmp[i].li_attr && tmp[i].li_attr.id) { - delete tmp[i].li_attr.id; - } - if(tmp[i].a_attr && tmp[i].a_attr.id) { - delete tmp[i].a_attr.id; - } - } - } - } - else { - tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default"; - if(options && options.no_id) { - tmp = this._delete_ids(tmp); - } - } - return tmp; - }; - this._delete_ids = function (tmp) { - if($.vakata.is_array(tmp)) { - for(var i = 0, j = tmp.length; i < j; i++) { - tmp[i] = this._delete_ids(tmp[i]); - } - return tmp; - } - delete tmp.id; - if(tmp.li_attr && tmp.li_attr.id) { - delete tmp.li_attr.id; - } - if(tmp.a_attr && tmp.a_attr.id) { - delete tmp.a_attr.id; - } - if(tmp.children && $.vakata.is_array(tmp.children)) { - tmp.children = this._delete_ids(tmp.children); - } - return tmp; - }; - this.check = function (chk, obj, par, pos, more) { - if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } - obj = obj && obj.id ? obj : this.get_node(obj); - par = par && par.id ? par : this.get_node(par); - var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j; - m = m && m._model && m._model.data ? m._model.data : null; - switch(chk) { - case "create_node": - case "move_node": - case "copy_node": - if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) { - tmp = this.get_rules(par); - if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - return false; - } - if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - return false; - } - if(m && obj.children_d && obj.parents) { - d = 0; - for(i = 0, j = obj.children_d.length; i < j; i++) { - d = Math.max(d, m[obj.children_d[i]].parents.length); - } - d = d - obj.parents.length + 1; - } - if(d <= 0 || d === undefined) { d = 1; } - do { - if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - return false; - } - par = this.get_node(par.parent); - tmp = this.get_rules(par); - d++; - } while(par); - } - break; - } - return true; - }; - /** - * used to retrieve the type settings object for a node - * @name get_rules(obj) - * @param {mixed} obj the node to find the rules for - * @return {Object} - * @plugin types - */ - this.get_rules = function (obj) { - obj = this.get_node(obj); - if(!obj) { return false; } - var tmp = this.get_type(obj, true); - if(tmp.max_depth === undefined) { tmp.max_depth = -1; } - if(tmp.max_children === undefined) { tmp.max_children = -1; } - if(tmp.valid_children === undefined) { tmp.valid_children = -1; } - return tmp; - }; - /** - * used to retrieve the type string or settings object for a node - * @name get_type(obj [, rules]) - * @param {mixed} obj the node to find the rules for - * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned - * @return {String|Object} - * @plugin types - */ - this.get_type = function (obj, rules) { - obj = this.get_node(obj); - return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type); - }; - /** - * used to change a node's type - * @name set_type(obj, type) - * @param {mixed} obj the node to change - * @param {String} type the new type - * @plugin types - */ - this.set_type = function (obj, type) { - var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a; - if($.vakata.is_array(obj)) { - obj = obj.slice(); - for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { - this.set_type(obj[t1], type); - } - return true; - } - t = this.settings.types; - obj = this.get_node(obj); - if(!t[type] || !obj) { return false; } - d = this.get_node(obj, true); - if (d && d.length) { - a = d.children('.jstree-anchor'); - } - old_type = obj.type; - old_icon = this.get_icon(obj); - obj.type = type; - if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) { - this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true); - } - - // remove old type props - if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') { - for (k in t[old_type].li_attr) { - if (t[old_type].li_attr.hasOwnProperty(k)) { - if (k === 'id') { - continue; - } - else if (k === 'class') { - m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], ''); - if (d) { d.removeClass(t[old_type].li_attr[k]); } - } - else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) { - m[obj.id].li_attr[k] = null; - if (d) { d.removeAttr(k); } - } - } - } - } - if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') { - for (k in t[old_type].a_attr) { - if (t[old_type].a_attr.hasOwnProperty(k)) { - if (k === 'id') { - continue; - } - else if (k === 'class') { - m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], ''); - if (a) { a.removeClass(t[old_type].a_attr[k]); } - } - else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) { - if (k === 'href') { - m[obj.id].a_attr[k] = '#'; - if (a) { a.attr('href', '#'); } - } - else { - delete m[obj.id].a_attr[k]; - if (a) { a.removeAttr(k); } - } - } - } - } - } - - // add new props - if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') { - for (k in t[type].li_attr) { - if (t[type].li_attr.hasOwnProperty(k)) { - if (k === 'id') { - continue; - } - else if (m[obj.id].li_attr[k] === undefined) { - m[obj.id].li_attr[k] = t[type].li_attr[k]; - if (d) { - if (k === 'class') { - d.addClass(t[type].li_attr[k]); - } - else { - d.attr(k, t[type].li_attr[k]); - } - } - } - else if (k === 'class') { - m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class']; - if (d) { d.addClass(t[type].li_attr[k]); } - } - } - } - } - if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') { - for (k in t[type].a_attr) { - if (t[type].a_attr.hasOwnProperty(k)) { - if (k === 'id') { - continue; - } - else if (m[obj.id].a_attr[k] === undefined) { - m[obj.id].a_attr[k] = t[type].a_attr[k]; - if (a) { - if (k === 'class') { - a.addClass(t[type].a_attr[k]); - } - else { - a.attr(k, t[type].a_attr[k]); - } - } - } - else if (k === 'href' && m[obj.id].a_attr[k] === '#') { - m[obj.id].a_attr['href'] = t[type].a_attr['href']; - if (a) { a.attr('href', t[type].a_attr['href']); } - } - else if (k === 'class') { - m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class']; - if (a) { a.addClass(t[type].a_attr[k]); } - } - } - } - } - - return true; - }; - }; - // include the types plugin by default - // $.jstree.defaults.plugins.push("types"); - - -/** - * ### Unique plugin - * - * Enforces that no nodes with the same name can coexist as siblings. - */ - - /** - * stores all defaults for the unique plugin - * @name $.jstree.defaults.unique - * @plugin unique - */ - $.jstree.defaults.unique = { - /** - * Indicates if the comparison should be case sensitive. Default is `false`. - * @name $.jstree.defaults.unique.case_sensitive - * @plugin unique - */ - case_sensitive : false, - /** - * Indicates if white space should be trimmed before the comparison. Default is `false`. - * @name $.jstree.defaults.unique.trim_whitespace - * @plugin unique - */ - trim_whitespace : false, - /** - * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`. - * @name $.jstree.defaults.unique.duplicate - * @plugin unique - */ - duplicate : function (name, counter) { - return name + ' (' + counter + ')'; - } - }; - - $.jstree.plugins.unique = function (options, parent) { - this.check = function (chk, obj, par, pos, more) { - if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } - obj = obj && obj.id ? obj : this.get_node(obj); - par = par && par.id ? par : this.get_node(par); - if(!par || !par.children) { return true; } - var n = chk === "rename_node" ? pos : obj.text, - c = [], - s = this.settings.unique.case_sensitive, - w = this.settings.unique.trim_whitespace, - m = this._model.data, i, j, t; - for(i = 0, j = par.children.length; i < j; i++) { - t = m[par.children[i]].text; - if (!s) { - t = t.toLowerCase(); - } - if (w) { - t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } - c.push(t); - } - if(!s) { n = n.toLowerCase(); } - if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } - switch(chk) { - case "delete_node": - return true; - case "rename_node": - t = obj.text || ''; - if (!s) { - t = t.toLowerCase(); - } - if (w) { - t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } - i = ($.inArray(n, c) === -1 || (obj.text && t === n)); - if(!i) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - } - return i; - case "create_node": - i = ($.inArray(n, c) === -1); - if(!i) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - } - return i; - case "copy_node": - i = ($.inArray(n, c) === -1); - if(!i) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - } - return i; - case "move_node": - i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1); - if(!i) { - this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; - } - return i; - } - return true; - }; - this.create_node = function (par, node, pos, callback, is_loaded) { - if(!node || node.text === undefined) { - if(par === null) { - par = $.jstree.root; - } - par = this.get_node(par); - if(!par) { - return parent.create_node.call(this, par, node, pos, callback, is_loaded); - } - pos = pos === undefined ? "last" : pos; - if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { - return parent.create_node.call(this, par, node, pos, callback, is_loaded); - } - if(!node) { node = {}; } - var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t; - n = tmp = this.get_string('New node'); - dpc = []; - for(i = 0, j = par.children.length; i < j; i++) { - t = m[par.children[i]].text; - if (!s) { - t = t.toLowerCase(); - } - if (w) { - t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } - dpc.push(t); - } - i = 1; - t = n; - if (!s) { - t = t.toLowerCase(); - } - if (w) { - t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } - while($.inArray(t, dpc) !== -1) { - n = cb.call(this, tmp, (++i)).toString(); - t = n; - if (!s) { - t = t.toLowerCase(); - } - if (w) { - t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - } - } - node.text = n; - } - return parent.create_node.call(this, par, node, pos, callback, is_loaded); - }; - }; - - // include the unique plugin by default - // $.jstree.defaults.plugins.push("unique"); - - -/** - * ### Wholerow plugin - * - * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers. - */ - - var div = document.createElement('DIV'); - div.setAttribute('unselectable','on'); - div.setAttribute('role','presentation'); - div.className = 'jstree-wholerow'; - div.innerHTML = ' '; - $.jstree.plugins.wholerow = function (options, parent) { - this.bind = function () { - parent.bind.call(this); - - this.element - .on('ready.jstree set_state.jstree', function () { - this.hide_dots(); - }.bind(this)) - .on("init.jstree loading.jstree ready.jstree", function () { - //div.style.height = this._data.core.li_height + 'px'; - this.get_container_ul().addClass('jstree-wholerow-ul'); - }.bind(this)) - .on("deselect_all.jstree", function (e, data) { - this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); - }.bind(this)) - .on("changed.jstree", function (e, data) { - this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); - var tmp = false, i, j; - for(i = 0, j = data.selected.length; i < j; i++) { - tmp = this.get_node(data.selected[i], true); - if(tmp && tmp.length) { - tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); - } - } - }.bind(this)) - .on("open_node.jstree", function (e, data) { - this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); - }.bind(this)) - .on("hover_node.jstree dehover_node.jstree", function (e, data) { - if(e.type === "hover_node" && this.is_disabled(data.node)) { return; } - this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered'); - }.bind(this)) - .on("contextmenu.jstree", ".jstree-wholerow", function (e) { - if (this._data.contextmenu) { - e.preventDefault(); - var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY }); - $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp); - } - }.bind(this)) - /*! - .on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) { - if(e.target === e.currentTarget) { - var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor"); - e.target = a[0]; - a.trigger(e); - } - }) - */ - .on("click.jstree", ".jstree-wholerow", function (e) { - e.stopImmediatePropagation(); - var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); - $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).trigger('focus'); - }) - .on("dblclick.jstree", ".jstree-wholerow", function (e) { - e.stopImmediatePropagation(); - var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); - $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).trigger('focus'); - }) - .on("click.jstree", ".jstree-leaf > .jstree-ocl", function (e) { - e.stopImmediatePropagation(); - var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); - $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).trigger('focus'); - }.bind(this)) - .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", function (e) { - e.stopImmediatePropagation(); - if(!this.is_disabled(e.currentTarget)) { - this.hover_node(e.currentTarget); - } - return false; - }.bind(this)) - .on("mouseleave.jstree", ".jstree-node", function (e) { - this.dehover_node(e.currentTarget); - }.bind(this)); - }; - this.teardown = function () { - if(this.settings.wholerow) { - this.element.find(".jstree-wholerow").remove(); - } - parent.teardown.call(this); - }; - this.redraw_node = function(obj, deep, callback, force_render) { - obj = parent.redraw_node.apply(this, arguments); - if(obj) { - var tmp = div.cloneNode(true); - //tmp.style.height = this._data.core.li_height + 'px'; - if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; } - if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; } - obj.insertBefore(tmp, obj.childNodes[0]); - } - return obj; - }; - }; - // include the wholerow plugin by default - // $.jstree.defaults.plugins.push("wholerow"); - if(window.customElements && Object && Object.create) { - var proto = Object.create(HTMLElement.prototype); - proto.createdCallback = function () { - var c = { core : {}, plugins : [] }, i; - for(i in $.jstree.plugins) { - if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) { - c.plugins.push(i); - if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) { - c[i] = JSON.parse(this.getAttribute(i)); - } - } - } - for(i in $.jstree.defaults.core) { - if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) { - c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i); - } - } - $(this).jstree(c); - }; - // proto.attributeChangedCallback = function (name, previous, value) { }; - try { - window.customElements.define("vakata-jstree", function() {}, { prototype: proto }); - } catch (ignore) { } - } - -})); \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/jstree.min.js b/InvenTree/InvenTree/static/script/jstree/jstree.min.js deleted file mode 100644 index 31d06a7316..0000000000 --- a/InvenTree/InvenTree/static/script/jstree/jstree.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jsTree - v3.3.12 - 2021-09-03 - (MIT) */ -!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a,b){"use strict";if(!a.jstree){var c=0,d=!1,e=!1,f=!1,g=[],h=a("script:last").attr("src"),i=window.document,j=window.setImmediate,k=window.Promise;!j&&k&&(j=function(a,b){k.resolve(b).then(a)}),a.jstree={version:"3.3.12",defaults:{plugins:[]},plugins:{},path:h&&-1!==h.indexOf("/")?h.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,root:"#"},a.jstree.create=function(b,d){var e=new a.jstree.core(++c),f=d;return d=a.extend(!0,{},a.jstree.defaults,d),f&&f.plugins&&(d.plugins=f.plugins),a.each(d.plugins,function(a,b){"core"!==a&&(e=e.plugin(b,d[b]))}),a(b).data("jstree",e),e.init(b,d),e},a.jstree.destroy=function(){a(".jstree:jstree").jstree("destroy"),a(i).off(".jstree")},a.jstree.core=function(a){this._id=a,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1,ellipsis:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},a.jstree.reference=function(b){var c=null,d=null;if(!b||!b.id||b.tagName&&b.nodeType||(b=b.id),!d||!d.length)try{d=a(b)}catch(e){}if(!d||!d.length)try{d=a("#"+b.replace(a.jstree.idregex,"\\$&"))}catch(e){}return d&&d.length&&(d=d.closest(".jstree")).length&&(d=d.data("jstree"))?c=d:a(".jstree").each(function(){var d=a(this).data("jstree");return d&&d._model.data[b]?(c=d,!1):void 0}),c},a.fn.jstree=function(c){var d="string"==typeof c,e=Array.prototype.slice.call(arguments,1),f=null;return c!==!0||this.length?(this.each(function(){var g=a.jstree.reference(this),h=d&&g?g[c]:null;return f=d&&h?h.apply(g,e):null,g||d||c!==b&&!a.isPlainObject(c)||a.jstree.create(this,c),(g&&!d||c===!0)&&(f=g||!1),null!==f&&f!==b?!1:void 0}),null!==f&&f!==b?f:this):!1},a.expr.pseudos.jstree=a.expr.createPseudo(function(c){return function(c){return a(c).hasClass("jstree")&&a(c).data("jstree")!==b}}),a.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:a.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,ellipsis:!1,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1,dblclick_toggle:!0,loaded_state:!1,restore_focus:!0,compute_elements_positions:!1,keyboard:{"ctrl-space":function(b){b.type="click",a(b.currentTarget).trigger(b)},enter:function(b){b.type="click",a(b.currentTarget).trigger(b)},left:function(b){if(b.preventDefault(),this.is_open(b.currentTarget))this.close_node(b.currentTarget);else{var c=this.get_parent(b.currentTarget);c&&c.id!==a.jstree.root&&this.get_node(c,!0).children(".jstree-anchor").trigger("focus")}},up:function(a){a.preventDefault();var b=this.get_prev_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").trigger("focus")},right:function(b){if(b.preventDefault(),this.is_closed(b.currentTarget))this.open_node(b.currentTarget,function(a){this.get_node(a,!0).children(".jstree-anchor").trigger("focus")});else if(this.is_open(b.currentTarget)){var c=this.get_node(b.currentTarget,!0).children(".jstree-children")[0];c&&a(this._firstChild(c)).children(".jstree-anchor").trigger("focus")}},down:function(a){a.preventDefault();var b=this.get_next_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").trigger("focus")},"*":function(a){this.open_all()},home:function(b){b.preventDefault();var c=this._firstChild(this.get_container_ul()[0]);c&&a(c).children(".jstree-anchor").filter(":visible").trigger("focus")},end:function(a){a.preventDefault(),this.element.find(".jstree-anchor").filter(":visible").last().trigger("focus")},f2:function(a){a.preventDefault(),this.edit(a.currentTarget)}}},a.jstree.core.prototype={plugin:function(b,c){var d=a.jstree.plugins[b];return d?(this._data[b]={},d.prototype=this,new d(c,this)):this},init:function(b,c){this._model={data:{},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this.element=a(b).addClass("jstree jstree-"+this._id),this.settings=c,this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html(""),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_container_ul().children("li").first().outerHeight()||24,this._data.core.node=this._create_prototype_node(),this.trigger("loading"),this.load_node(a.jstree.root)},destroy:function(a){if(this.trigger("destroy"),this._wrk)try{window.URL.revokeObjectURL(this._wrk),this._wrk=null}catch(b){}a||this.element.empty(),this.teardown()},_create_prototype_node:function(){var a=i.createElement("LI"),b,c;return a.setAttribute("role","none"),b=i.createElement("I"),b.className="jstree-icon jstree-ocl",b.setAttribute("role","presentation"),a.appendChild(b),b=i.createElement("A"),b.className="jstree-anchor",b.setAttribute("href","#"),b.setAttribute("tabindex","-1"),b.setAttribute("role","treeitem"),c=i.createElement("I"),c.className="jstree-icon jstree-themeicon",c.setAttribute("role","presentation"),b.appendChild(c),a.appendChild(b),b=c=null,a},_kbevent_to_func:function(a){var b={8:"Backspace",9:"Tab",13:"Enter",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock",16:"Shift",17:"Ctrl",18:"Alt",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*",173:"-"},c=[];if(a.ctrlKey&&c.push("ctrl"),a.altKey&&c.push("alt"),a.shiftKey&&c.push("shift"),c.push(b[a.which]||a.which),c=c.sort().join("-").toLowerCase(),"shift-shift"===c||"ctrl-ctrl"===c||"alt-alt"===c)return null;var d=this.settings.core.keyboard,e,f;for(e in d)if(d.hasOwnProperty(e)&&(f=e,"-"!==f&&"+"!==f&&(f=f.replace("--","-MINUS").replace("+-","-MINUS").replace("++","-PLUS").replace("-+","-PLUS"),f=f.split(/-|\+/).sort().join("-").replace("MINUS","-").replace("PLUS","+").toLowerCase()),f===c))return d[e];return null},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){var b="",c=null,d=0;this.element.on("dblclick.jstree",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;if(i.selection&&i.selection.empty)i.selection.empty();else if(window.getSelection){var b=window.getSelection();try{b.removeAllRanges(),b.collapse()}catch(c){}}}).on("mousedown.jstree",function(a){a.target===this.element[0]&&(a.preventDefault(),d=+new Date)}.bind(this)).on("mousedown.jstree",".jstree-ocl",function(a){a.preventDefault()}).on("click.jstree",".jstree-ocl",function(a){this.toggle_node(a.target)}.bind(this)).on("dblclick.jstree",".jstree-anchor",function(a){return a.target.tagName&&"input"===a.target.tagName.toLowerCase()?!0:void(this.settings.core.dblclick_toggle&&this.toggle_node(a.target))}.bind(this)).on("click.jstree",".jstree-anchor",function(b){b.preventDefault(),b.currentTarget!==i.activeElement&&a(b.currentTarget).trigger("focus"),this.activate_node(b.currentTarget,b)}.bind(this)).on("keydown.jstree",".jstree-anchor",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;this._data.core.rtl&&(37===a.which?a.which=39:39===a.which&&(a.which=37));var b=this._kbevent_to_func(a);if(b){var c=b.call(this,a);if(c===!1||c===!0)return c}}.bind(this)).on("load_node.jstree",function(b,c){c.status&&(c.node.id!==a.jstree.root||this._data.core.loaded||(this._data.core.loaded=!0,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.trigger("loaded")),this._data.core.ready||setTimeout(function(){if(this.element&&!this.get_container_ul().find(".jstree-loading").length){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var b=[],c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)b=b.concat(this._model.data[this._data.core.selected[c]].parents);for(b=a.vakata.array_unique(b),c=0,d=b.length;d>c;c++)this.open_node(b[c],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}this.trigger("ready")}}.bind(this),0))}.bind(this)).on("keypress.jstree",function(d){if(d.target.tagName&&"input"===d.target.tagName.toLowerCase())return!0;c&&clearTimeout(c),c=setTimeout(function(){b=""},500);var e=String.fromCharCode(d.which).toLowerCase(),f=this.element.find(".jstree-anchor").filter(":visible"),g=f.index(i.activeElement)||0,h=!1;if(b+=e,b.length>1){if(f.slice(g).each(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return;if(f.slice(0,g).each(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return}if(new RegExp("^"+e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+"+$").test(b)){if(f.slice(g+1).each(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return;if(f.slice(0,g+1).each(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).trigger("focus"),h=!0,!1):void 0}.bind(this)),h)return}}.bind(this)).on("init.jstree",function(){var a=this.settings.core.themes;this._data.core.themes.dots=a.dots,this._data.core.themes.stripes=a.stripes,this._data.core.themes.icons=a.icons,this._data.core.themes.ellipsis=a.ellipsis,this.set_theme(a.name||"default",a.url),this.set_theme_variant(a.variant)}.bind(this)).on("loading.jstree",function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"](),this[this._data.core.themes.ellipsis?"show_ellipsis":"hide_ellipsis"]()}.bind(this)).on("blur.jstree",".jstree-anchor",function(b){this._data.core.focused=null,a(b.currentTarget).filter(".jstree-hovered").trigger("mouseleave"),this.element.attr("tabindex","0")}.bind(this)).on("focus.jstree",".jstree-anchor",function(b){var c=this.get_node(b.currentTarget);c&&c.id&&(this._data.core.focused=c.id),this.element.find(".jstree-hovered").not(b.currentTarget).trigger("mouseleave"),a(b.currentTarget).trigger("mouseenter"),this.element.attr("tabindex","-1")}.bind(this)).on("focus.jstree",function(){if(+new Date-d>500&&!this._data.core.focused&&this.settings.core.restore_focus){d=0;var a=this.get_node(this.element.attr("aria-activedescendant"),!0);a&&a.find("> .jstree-anchor").trigger("focus")}}.bind(this)).on("mouseenter.jstree",".jstree-anchor",function(a){this.hover_node(a.currentTarget)}.bind(this)).on("mouseleave.jstree",".jstree-anchor",function(a){this.dehover_node(a.currentTarget)}.bind(this))},unbind:function(){this.element.off(".jstree"),a(i).off(".jstree-"+this._id)},trigger:function(a,b){b||(b={}),b.instance=this,this.element.triggerHandler(a.replace(".jstree","")+".jstree",b)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children").first()},get_string:function(b){var c=this.settings.core.strings;return a.vakata.is_function(c)?c.call(this,b):c&&c[b]?c[b]:b},_firstChild:function(a){a=a?a.firstChild:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_nextSibling:function(a){a=a?a.nextSibling:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_previousSibling:function(a){a=a?a.previousSibling:null;while(null!==a&&1!==a.nodeType)a=a.previousSibling;return a},get_node:function(b,c){b&&b.id&&(b=b.id),b instanceof a&&b.length&&b[0].id&&(b=b[0].id);var d;try{if(this._model.data[b])b=this._model.data[b];else if("string"==typeof b&&this._model.data[b.replace(/^#/,"")])b=this._model.data[b.replace(/^#/,"")];else if("string"==typeof b&&(d=a("#"+b.replace(a.jstree.idregex,"\\$&"),this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else if((d=this.element.find(b)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else{if(!(d=this.element.find(b)).length||!d.hasClass("jstree"))return!1;b=this._model.data[a.jstree.root]}return c&&(b=b.id===a.jstree.root?this.element:a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)),b}catch(e){return!1}},get_path:function(b,c,d){if(b=b.parents?b:this.get_node(b),!b||b.id===a.jstree.root||!b.parents)return!1;var e,f,g=[];for(g.push(d?b.id:b.text),e=0,f=b.parents.length;f>e;e++)g.push(d?b.parents[e]:this.get_text(b.parents[e]));return g=g.reverse().slice(1),c?g.join(c):g},get_next_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this._firstChild(this.get_container_ul()[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}if(b.hasClass("jstree-open")){d=this._firstChild(b.children(".jstree-children")[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);if(null!==d)return a(d)}d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return null!==d?a(d):b.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first()},get_prev_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this.get_container_ul()[0].lastChild;while(d&&0===d.offsetHeight)d=this._previousSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);if(null!==d){b=a(d);while(b.hasClass("jstree-open"))b=b.children(".jstree-children").first().children(".jstree-node:visible:last");return b}return d=b[0].parentNode.parentNode,d&&d.className&&-1!==d.className.indexOf("jstree-node")?a(d):!1},get_parent:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.parent:!1},get_children_dom:function(a){return a=this.get_node(a,!0),a[0]===this.element[0]?this.get_container_ul().children(".jstree-node"):a&&a.length?a.children(".jstree-children").children(".jstree-node"):!1},is_parent:function(a){return a=this.get_node(a),a&&(a.state.loaded===!1||a.children.length>0)},is_loaded:function(a){return a=this.get_node(a),a&&a.state.loaded},is_loading:function(a){return a=this.get_node(a),a&&a.state&&a.state.loading},is_open:function(a){return a=this.get_node(a),a&&a.state.opened},is_closed:function(a){return a=this.get_node(a),a&&this.is_parent(a)&&!a.state.opened},is_leaf:function(a){return!this.is_parent(a)},load_node:function(b,c){var d,e,f,g,h;if(a.vakata.is_array(b))return this._load_nodes(b.slice(),c),!0;if(b=this.get_node(b),!b)return c&&c.call(this,b,!1),!1;if(b.state.loaded){for(b.state.loaded=!1,f=0,g=b.parents.length;g>f;f++)this._model.data[b.parents[f]].children_d=a.vakata.array_filter(this._model.data[b.parents[f]].children_d,function(c){return-1===a.inArray(c,b.children_d)});for(d=0,e=b.children_d.length;e>d;d++)this._model.data[b.children_d[d]].state.selected&&(h=!0),delete this._model.data[b.children_d[d]];h&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(c){return-1===a.inArray(c,b.children_d)})),b.children=[],b.children_d=[],h&&this.trigger("changed",{action:"load_node",node:b,selected:this._data.core.selected})}return b.state.failed=!1,b.state.loading=!0,this.get_node(b,!0).addClass("jstree-loading").attr("aria-busy",!0),this._load_node(b,function(a){b=this._model.data[b.id],b.state.loading=!1,b.state.loaded=a,b.state.failed=!b.state.loaded;var d=this.get_node(b,!0),e=0,f=0,g=this._model.data,h=!1;for(e=0,f=b.children.length;f>e;e++)if(g[b.children[e]]&&!g[b.children[e]].state.hidden){h=!0;break}b.state.loaded&&d&&d.length&&(d.removeClass("jstree-closed jstree-open jstree-leaf"),h?"#"!==b.id&&d.addClass(b.state.opened?"jstree-open":"jstree-closed"):d.addClass("jstree-leaf")),d.removeClass("jstree-loading").attr("aria-busy",!1),this.trigger("load_node",{node:b,status:a}),c&&c.call(this,b,a)}.bind(this)),!0},_load_nodes:function(a,b,c,d){var e=!0,f=function(){this._load_nodes(a,b,!0)},g=this._model.data,h,i,j=[];for(h=0,i=a.length;i>h;h++)g[a[h]]&&(!g[a[h]].state.loaded&&!g[a[h]].state.failed||!c&&d)&&(this.is_loading(a[h])||this.load_node(a[h],f),e=!1);if(e){for(h=0,i=a.length;i>h;h++)g[a[h]]&&g[a[h]].state.loaded&&j.push(a[h]);b&&!b.done&&(b.call(this,j),b.done=!0)}},load_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=[],e=this._model.data,f=e[b.id].children_d,g,h;for(b.state&&!b.state.loaded&&d.push(b.id),g=0,h=f.length;h>g;g++)e[f[g]]&&e[f[g]].state&&!e[f[g]].state.loaded&&d.push(f[g]);d.length?this._load_nodes(d,function(){this.load_all(b,c)}):(c&&c.call(this,b),this.trigger("load_all",{node:b}))},_load_node:function(b,c){var d=this.settings.core.data,e,f=function g(){return 3!==this.nodeType&&8!==this.nodeType};return d?a.vakata.is_function(d)?d.call(this,b,function(d){d===!1?c.call(this,!1):this["string"==typeof d?"_append_html_data":"_append_json_data"](b,"string"==typeof d?a(a.parseHTML(d)).filter(f):d,function(a){c.call(this,a)})}.bind(this)):"object"==typeof d?d.url?(d=a.extend(!0,{},d),a.vakata.is_function(d.url)&&(d.url=d.url.call(this,b)),a.vakata.is_function(d.data)&&(d.data=d.data.call(this,b)),a.ajax(d).done(function(d,e,g){var h=g.getResponseHeader("Content-Type");return h&&-1!==h.indexOf("json")||"object"==typeof d?this._append_json_data(b,d,function(a){c.call(this,a)}):h&&-1!==h.indexOf("html")||"string"==typeof d?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:g})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))}.bind(this)).fail(function(a){this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:a})},c.call(this,!1),this.settings.core.error.call(this,this._data.core.last_error)}.bind(this))):(e=a.vakata.is_array(d)?a.extend(!0,[],d):a.isPlainObject(d)?a.extend(!0,{},d):d,b.id===a.jstree.root?this._append_json_data(b,e,function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))):"string"==typeof d?b.id===a.jstree.root?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1)):c.call(this,!1):b.id===a.jstree.root?this._append_html_data(b,this._data.core.original_container_html.clone(!0),function(a){c.call(this,a)}):c.call(this,!1)},_node_changed:function(b){b=this.get_node(b),b&&-1===a.inArray(b.id,this._model.changed)&&this._model.changed.push(b.id)},_append_html_data:function(b,c,d){b=this.get_node(b),b.children=[],b.children_d=[];var e=c.is("ul")?c.children():c,f=b.id,g=[],h=[],i=this._model.data,j=i[f],k=this._data.core.selected.length,l,m,n;for(e.each(function(b,c){l=this._parse_model_from_html(a(c),f,j.parents.concat()),l&&(g.push(l),h.push(l),i[l].children_d.length&&(h=h.concat(i[l].children_d)))}.bind(this)),j.children=g,j.children_d=h,m=0,n=j.parents.length;n>m;m++)i[j.parents[m]].children_d=i[j.parents[m]].children_d.concat(h);this.trigger("model",{nodes:h,parent:f}),f!==a.jstree.root?(this._node_changed(f),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==k&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)},_append_json_data:function(b,c,d,e){if(null!==this.element){b=this.get_node(b),b.children=[],b.children_d=[],c.d&&(c=c.d,"string"==typeof c&&(c=JSON.parse(c))),a.vakata.is_array(c)||(c=[c]);var f=null,g={df:this._model.default_state,dat:c,par:b.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},h=this,i=function(a,b){a.data&&(a=a.data);var c=a.dat,d=a.par,e=[],f=[],g=[],i=a.df,j=a.t_id,k=a.t_cnt,l=a.m,m=l[d],n=a.sel,o,p,q,r,s=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f,h,j,k,m={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in i)i.hasOwnProperty(f)&&(m.state[f]=i[f]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(m.icon=a.data.jstree.icon),(m.icon===b||null===m.icon||""===m.icon)&&(m.icon=!0),a&&a.data&&(m.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(m.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(m.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(m.li_attr[f]=a.li_attr[f]);if(m.li_attr.id||(m.li_attr.id=e),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(m.a_attr[f]=a.a_attr[f]);for(a&&a.children&&a.children===!0&&(m.state.loaded=!1,m.children=[],m.children_d=[]),l[m.id]=m,f=0,h=m.children.length;h>f;f++)j=s(l[m.children[f]],m.id,d),k=l[j],m.children_d.push(j),k.children_d.length&&(m.children_d=m.children_d.concat(k.children_d));return delete a.data,delete a.children,l[m.id].original=a,m.state.selected&&g.push(m.id),m.id},t=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,h,m,n,o;do e="j"+j+"_"+ ++k;while(l[e]);o={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in i)i.hasOwnProperty(f)&&(o.state[f]=i[f]);if(a&&a.id&&(o.id=a.id.toString()),a&&a.text&&(o.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(o.icon=a.data.jstree.icon),(o.icon===b||null===o.icon||""===o.icon)&&(o.icon=!0),a&&a.data&&(o.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(o.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(o.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(o.li_attr[f]=a.li_attr[f]);if(o.li_attr.id&&!o.id&&(o.id=o.li_attr.id.toString()),o.id||(o.id=e),o.li_attr.id||(o.li_attr.id=o.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(o.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,h=a.children.length;h>f;f++)m=t(a.children[f],o.id,d),n=l[m],o.children.push(m),n.children_d.length&&(o.children_d=o.children_d.concat(n.children_d));o.children_d=o.children_d.concat(o.children)}return a&&a.children&&a.children===!0&&(o.state.loaded=!1,o.children=[],o.children_d=[]),delete a.data,delete a.children,o.original=a,l[o.id]=o,o.state.selected&&g.push(o.id),o.id};if(c.length&&c[0].id!==b&&c[0].parent!==b){for(p=0,q=c.length;q>p;p++)c[p].children||(c[p].children=[]),c[p].state||(c[p].state={}),l[c[p].id.toString()]=c[p];for(p=0,q=c.length;q>p;p++)l[c[p].parent.toString()]?(l[c[p].parent.toString()].children.push(c[p].id.toString()),m.children_d.push(c[p].id.toString())):"undefined"!=typeof h&&(h._data.core.last_error={error:"parse",plugin:"core",id:"core_07",reason:"Node with invalid parent",data:JSON.stringify({id:c[p].id.toString(),parent:c[p].parent.toString()})},h.settings.core.error.call(h,h._data.core.last_error));for(p=0,q=m.children.length;q>p;p++)o=s(l[m.children[p]],d,m.parents.concat()),f.push(o),l[o].children_d.length&&(f=f.concat(l[o].children_d));for(p=0,q=m.parents.length;q>p;p++)l[m.parents[p]].children_d=l[m.parents[p]].children_d.concat(f);r={cnt:k,mod:l,sel:n,par:d,dpc:f,add:g}}else{for(p=0,q=c.length;q>p;p++)o=t(c[p],d,m.parents.concat()),o&&(e.push(o),f.push(o),l[o].children_d.length&&(f=f.concat(l[o].children_d)));for(m.children=e,m.children_d=f,p=0,q=m.parents.length;q>p;p++)l[m.parents[p]].children_d=l[m.parents[p]].children_d.concat(f);r={cnt:k,mod:l,sel:n,par:d,dpc:f,add:g}}return"undefined"!=typeof window&&"undefined"!=typeof window.document?r:void postMessage(r)},k=function(b,c){if(null!==this.element){this._cnt=b.cnt;var e,f=this._model.data;for(e in f)f.hasOwnProperty(e)&&f[e].state&&f[e].state.loading&&b.mod[e]&&(b.mod[e].state.loading=!0);if(this._model.data=b.mod,c){var g,i=b.add,k=b.sel,l=this._data.core.selected.slice();if(f=this._model.data,k.length!==l.length||a.vakata.array_unique(k.concat(l)).length!==k.length){for(e=0,g=k.length;g>e;e++)-1===a.inArray(k[e],i)&&-1===a.inArray(k[e],l)&&(f[k[e]].state.selected=!1);for(e=0,g=l.length;g>e;e++)-1===a.inArray(l[e],k)&&(f[l[e]].state.selected=!0)}}b.add.length&&(this._data.core.selected=this._data.core.selected.concat(b.add)),this.trigger("model",{nodes:b.dpc,parent:b.par}),b.par!==a.jstree.root?(this._node_changed(b.par),this.redraw()):this.redraw(!0),b.add.length&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),!c&&j?j(function(){d.call(h,!0)}):d.call(h,!0)}};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker)try{null===this._wrk&&(this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+i.toString()],{type:"text/javascript"}))),!this._data.core.working||e?(this._data.core.working=!0,f=new window.Worker(this._wrk),f.onmessage=function(a){k.call(this,a.data,!0);try{f.terminate(),f=null}catch(b){}this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}.bind(this),g.par?f.postMessage(g):this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1):this._data.core.worker_queue.push([b,c,d,!0])}catch(l){k.call(this,i(g),!1),this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}else k.call(this,i(g),!1)}},_parse_model_from_html:function(c,d,e){e=e?[].concat(e):[],d&&e.unshift(d);var f,g,h=this._model.data,i={id:!1,text:!1,icon:!0,parent:d,parents:e,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},j,k,l;for(j in this._model.default_state)this._model.default_state.hasOwnProperty(j)&&(i.state[j]=this._model.default_state[j]);if(k=a.vakata.attributes(c,!0),a.each(k,function(b,c){return c=a.vakata.trim(c),c.length?(i.li_attr[b]=c,void("id"===b&&(i.id=c.toString()))):!0}),k=c.children("a").first(),k.length&&(k=a.vakata.attributes(k,!0),a.each(k,function(b,c){c=a.vakata.trim(c),c.length&&(i.a_attr[b]=c)})),k=c.children("a").first().length?c.children("a").first().clone():c.clone(),k.children("ins, i, ul").remove(),k=k.html(),k=a("
        ").html(k),i.text=this.settings.core.force_text?k.text():k.html(),k=c.data(),i.data=k?a.extend(!0,{},k):null,i.state.opened=c.hasClass("jstree-open"),i.state.selected=c.children("a").hasClass("jstree-clicked"),i.state.disabled=c.children("a").hasClass("jstree-disabled"),i.data&&i.data.jstree)for(j in i.data.jstree)i.data.jstree.hasOwnProperty(j)&&(i.state[j]=i.data.jstree[j]);k=c.children("a").children(".jstree-themeicon"),k.length&&(i.icon=k.hasClass("jstree-themeicon-hidden")?!1:k.attr("rel")),i.state.icon!==b&&(i.icon=i.state.icon),(i.icon===b||null===i.icon||""===i.icon)&&(i.icon=!0),k=c.children("ul").children("li");do l="j"+this._id+"_"+ ++this._cnt;while(h[l]);return i.id=i.li_attr.id?i.li_attr.id.toString():l,k.length?(k.each(function(b,c){f=this._parse_model_from_html(a(c),i.id,e),g=this._model.data[f],i.children.push(f),g.children_d.length&&(i.children_d=i.children_d.concat(g.children_d))}.bind(this)),i.children_d=i.children_d.concat(i.children)):c.hasClass("jstree-closed")&&(i.state.loaded=!1),i.li_attr["class"]&&(i.li_attr["class"]=i.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),i.a_attr["class"]&&(i.a_attr["class"]=i.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),h[i.id]=i,i.state.selected&&this._data.core.selected.push(i.id),i.id},_parse_model_from_flat_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f=this._model.data,g=this._model.default_state,h,i,j,k,l={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(h in g)g.hasOwnProperty(h)&&(l.state[h]=g[h]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(h in a.data.jstree)a.data.jstree.hasOwnProperty(h)&&(l.state[h]=a.data.jstree[h]);if(a&&"object"==typeof a.state)for(h in a.state)a.state.hasOwnProperty(h)&&(l.state[h]=a.state[h]);if(a&&"object"==typeof a.li_attr)for(h in a.li_attr)a.li_attr.hasOwnProperty(h)&&(l.li_attr[h]=a.li_attr[h]);if(l.li_attr.id||(l.li_attr.id=e),a&&"object"==typeof a.a_attr)for(h in a.a_attr)a.a_attr.hasOwnProperty(h)&&(l.a_attr[h]=a.a_attr[h]);for(a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),f[l.id]=l,h=0,i=l.children.length;i>h;h++)j=this._parse_model_from_flat_json(f[l.children[h]],l.id,d),k=f[j],l.children_d.push(j),k.children_d.length&&(l.children_d=l.children_d.concat(k.children_d));return delete a.data,delete a.children,f[l.id].original=a,l.state.selected&&this._data.core.selected.push(l.id),l.id},_parse_model_from_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,g,h,i,j=this._model.data,k=this._model.default_state,l;do e="j"+this._id+"_"+ ++this._cnt;while(j[e]);l={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in k)k.hasOwnProperty(f)&&(l.state[f]=k[f]);if(a&&a.id&&(l.id=a.id.toString()),a&&a.text&&(l.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0), -a&&a.data&&(l.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(l.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(l.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(l.li_attr[f]=a.li_attr[f]);if(l.li_attr.id&&!l.id&&(l.id=l.li_attr.id.toString()),l.id||(l.id=e),l.li_attr.id||(l.li_attr.id=l.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(l.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,g=a.children.length;g>f;f++)h=this._parse_model_from_json(a.children[f],l.id,d),i=j[h],l.children.push(h),i.children_d.length&&(l.children_d=l.children_d.concat(i.children_d));l.children_d=l.children.concat(l.children_d)}return a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),delete a.data,delete a.children,l.original=a,j[l.id]=l,l.state.selected&&this._data.core.selected.push(l.id),l.id},_redraw:function(){var b=this._model.force_full_redraw?this._model.data[a.jstree.root].children.concat([]):this._model.changed.concat([]),c=i.createElement("UL"),d,e,f,g=this._data.core.focused;for(e=0,f=b.length;f>e;e++)d=this.redraw_node(b[e],!0,this._model.force_full_redraw),d&&this._model.force_full_redraw&&c.appendChild(d);this._model.force_full_redraw&&(c.className=this.get_container_ul()[0].className,c.setAttribute("role","group"),this.element.empty().append(c)),null!==g&&this.settings.core.restore_focus&&(d=this.get_node(g,!0),d&&d.length&&d.children(".jstree-anchor")[0]!==i.activeElement?d.children(".jstree-anchor").trigger("focus"):this._data.core.focused=null),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:b})},redraw:function(a){a&&(this._model.force_full_redraw=!0),this._redraw()},draw_children:function(b){var c=this.get_node(b),d=!1,e=!1,f=!1,g=i;if(!c)return!1;if(c.id===a.jstree.root)return this.redraw(!0);if(b=this.get_node(b,!0),!b||!b.length)return!1;if(b.children(".jstree-children").remove(),b=b[0],c.children.length&&c.state.loaded){for(f=g.createElement("UL"),f.setAttribute("role","group"),f.className="jstree-children",d=0,e=c.children.length;e>d;d++)f.appendChild(this.redraw_node(c.children[d],!0,!0));b.appendChild(f)}},redraw_node:function(b,c,d,e){var f=this.get_node(b),g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n="",o=i,p=this._model.data,q=!1,r=!1,s=null,t=0,u=0,v=!1,w=!1;if(!f)return!1;if(f.id===a.jstree.root)return this.redraw(!0);if(c=c||0===f.children.length,b=i.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(f.id[0])?"\\3"+f.id[0]+" "+f.id.substr(1).replace(a.jstree.idregex,"\\$&"):f.id.replace(a.jstree.idregex,"\\$&"))):i.getElementById(f.id))b=a(b),d||(g=b.parent().parent()[0],g===this.element[0]&&(g=null),h=b.index()),c||!f.children.length||b.children(".jstree-children").length||(c=!0),c||(j=b.children(".jstree-children")[0]),q=b.children(".jstree-anchor")[0]===i.activeElement,b.remove();else if(c=!0,!d){if(g=f.parent!==a.jstree.root?a("#"+f.parent.replace(a.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===g||g&&p[f.parent].state.opened))return!1;h=a.inArray(f.id,null===g?p[a.jstree.root].children:p[f.parent].children)}b=this._data.core.node.cloneNode(!0),n="jstree-node ";for(k in f.li_attr)if(f.li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"!==k?b.setAttribute(k,f.li_attr[k]):n+=f.li_attr[k]}for(f.a_attr.id||(f.a_attr.id=f.id+"_anchor"),b.childNodes[1].setAttribute("aria-selected",!!f.state.selected),b.childNodes[1].setAttribute("aria-level",f.parents.length),this.settings.core.compute_elements_positions&&(b.childNodes[1].setAttribute("aria-setsize",p[f.parent].children.length),b.childNodes[1].setAttribute("aria-posinset",p[f.parent].children.indexOf(f.id)+1)),f.state.disabled&&b.childNodes[1].setAttribute("aria-disabled",!0),k=0,l=f.children.length;l>k;k++)if(!p[f.children[k]].state.hidden){v=!0;break}if(null!==f.parent&&p[f.parent]&&!f.state.hidden&&(k=a.inArray(f.id,p[f.parent].children),w=f.id,-1!==k))for(k++,l=p[f.parent].children.length;l>k;k++)if(p[p[f.parent].children[k]].state.hidden||(w=p[f.parent].children[k]),w!==f.id)break;f.state.hidden&&(n+=" jstree-hidden"),f.state.loading&&(n+=" jstree-loading"),f.state.loaded&&!v?n+=" jstree-leaf":(n+=f.state.opened&&f.state.loaded?" jstree-open":" jstree-closed",b.childNodes[1].setAttribute("aria-expanded",f.state.opened&&f.state.loaded)),w===f.id&&(n+=" jstree-last"),b.id=f.id,b.className=n,n=(f.state.selected?" jstree-clicked":"")+(f.state.disabled?" jstree-disabled":"");for(l in f.a_attr)if(f.a_attr.hasOwnProperty(l)){if("href"===l&&"#"===f.a_attr[l])continue;"class"!==l?b.childNodes[1].setAttribute(l,f.a_attr[l]):n+=" "+f.a_attr[l]}if(n.length&&(b.childNodes[1].className="jstree-anchor "+n),(f.icon&&f.icon!==!0||f.icon===!1)&&(f.icon===!1?b.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===f.icon.indexOf("/")&&-1===f.icon.indexOf(".")?b.childNodes[1].childNodes[0].className+=" "+f.icon+" jstree-themeicon-custom":(b.childNodes[1].childNodes[0].style.backgroundImage='url("'+f.icon+'")',b.childNodes[1].childNodes[0].style.backgroundPosition="center center",b.childNodes[1].childNodes[0].style.backgroundSize="auto",b.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?b.childNodes[1].appendChild(o.createTextNode(f.text)):b.childNodes[1].innerHTML+=f.text,c&&f.children.length&&(f.state.opened||e)&&f.state.loaded){for(m=o.createElement("UL"),m.setAttribute("role","group"),m.className="jstree-children",k=0,l=f.children.length;l>k;k++)m.appendChild(this.redraw_node(f.children[k],c,!0));b.appendChild(m)}if(j&&b.appendChild(j),!d){for(g||(g=this.element[0]),k=0,l=g.childNodes.length;l>k;k++)if(g.childNodes[k]&&g.childNodes[k].className&&-1!==g.childNodes[k].className.indexOf("jstree-children")){s=g.childNodes[k];break}s||(s=o.createElement("UL"),s.setAttribute("role","group"),s.className="jstree-children",g.appendChild(s)),g=s,hf;f++)this.open_node(c[f],d,e);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(e=e===b?this.settings.core.animation:e,this.is_closed(c)?this.is_loaded(c)?(h=this.get_node(c,!0),i=this,h.length&&(e&&h.children(".jstree-children").length&&h.children(".jstree-children").stop(!0,!0),c.children.length&&!this._firstChild(h.children(".jstree-children")[0])&&this.draw_children(c),e?(this.trigger("before_open",{node:c}),h.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").children(".jstree-anchor").attr("aria-expanded",!0).end().children(".jstree-children").stop(!0,!0).slideDown(e,function(){this.style.display="",i.element&&i.trigger("after_open",{node:c})})):(this.trigger("before_open",{node:c}),h[0].className=h[0].className.replace("jstree-closed","jstree-open"),h[0].childNodes[1].setAttribute("aria-expanded",!0))),c.state.opened=!0,d&&d.call(this,c,!0),h.length||this.trigger("before_open",{node:c}),this.trigger("open_node",{node:c}),e&&h.length||this.trigger("after_open",{node:c}),!0):this.is_loading(c)?setTimeout(function(){this.open_node(c,d,e)}.bind(this),500):void this.load_node(c,function(a,b){return b?this.open_node(a,d,e):d?d.call(this,a,!1):!1}):(d&&d.call(this,c,!1),!1)):!1},_open_to:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c,d,e=b.parents;for(c=0,d=e.length;d>c;c+=1)c!==a.jstree.root&&this.open_node(e[c],!1,0);return a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)},close_node:function(c,d){var e,f,g,h;if(a.vakata.is_array(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.close_node(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?this.is_closed(c)?!1:(d=d===b?this.settings.core.animation:d,g=this,h=this.get_node(c,!0),c.state.opened=!1,this.trigger("close_node",{node:c}),void(h.length?d?h.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").children(".jstree-anchor").attr("aria-expanded",!1).end().children(".jstree-children").stop(!0,!0).slideUp(d,function(){this.style.display="",h.children(".jstree-children").remove(),g.element&&g.trigger("after_close",{node:c})}):(h[0].className=h[0].className.replace("jstree-open","jstree-closed"),h.children(".jstree-anchor").attr("aria-expanded",!1),h.children(".jstree-children").remove(),this.trigger("after_close",{node:c})):this.trigger("after_close",{node:c}))):!1},toggle_node:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.toggle_node(b[c]);return!0}return this.is_closed(b)?this.open_node(b):this.is_open(b)?this.close_node(b):void 0},open_all:function(b,c,d){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var e=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),f,g,h;if(!e.length){for(f=0,g=b.children_d.length;g>f;f++)this.is_closed(this._model.data[b.children_d[f]])&&(this._model.data[b.children_d[f]].state.opened=!0);return this.trigger("open_all",{node:b})}d=d||e,h=this,e=this.is_closed(b)?e.find(".jstree-closed").addBack():e.find(".jstree-closed"),e.each(function(){h.open_node(this,function(a,b){b&&this.is_parent(a)&&this.open_all(a,c,d)},c||0)}),0===d.find(".jstree-closed").length&&this.trigger("open_all",{node:this.get_node(d)})},close_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),e=this,f,g;for(d.length&&(d=this.is_open(b)?d.find(".jstree-open").addBack():d.find(".jstree-open"),a(d.get().reverse()).each(function(){e.close_node(this,c||0)})),f=0,g=b.children_d.length;g>f;f++)this._model.data[b.children_d[f]].state.opened=!1;this.trigger("close_all",{node:b})},is_disabled:function(a){return a=this.get_node(a),a&&a.state&&a.state.disabled},enable_node:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!1,this.get_node(b,!0).children(".jstree-anchor").removeClass("jstree-disabled").attr("aria-disabled",!1),void this.trigger("enable_node",{node:b})):!1},disable_node:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!0,this.get_node(b,!0).children(".jstree-anchor").addClass("jstree-disabled").attr("aria-disabled",!0),void this.trigger("disable_node",{node:b})):!1},is_hidden:function(a){return a=this.get_node(a),a.state.hidden===!0},hide_node:function(b,c){var d,e;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.hide_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden||(b.state.hidden=!0,this._node_changed(b.parent),c||this.redraw(),this.trigger("hide_node",{node:b}))):!1},show_node:function(b,c){var d,e;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.show_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden&&(b.state.hidden=!1,this._node_changed(b.parent),c||this.redraw(),this.trigger("show_node",{node:b}))):!1},hide_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&!d[c].state.hidden&&(d[c].state.hidden=!0,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("hide_all",{nodes:e}),e},show_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&d[c].state.hidden&&(d[c].state.hidden=!1,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("show_all",{nodes:e}),e},activate_node:function(a,c){if(this.is_disabled(a))return!1;if(c&&"object"==typeof c||(c={}),this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==b?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!this._data.core.last_clicked&&this._data.core.selected.length&&(this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])),this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&(!c.shiftKey||this._data.core.last_clicked&&this.get_parent(a)&&this.get_parent(a)===this._data.core.last_clicked.parent))if(c.shiftKey){var d=this.get_node(a).id,e=this._data.core.last_clicked.id,f=this.get_node(this._data.core.last_clicked.parent).children,g=!1,h,i;for(h=0,i=f.length;i>h;h+=1)f[h]===d&&(g=!g),f[h]===e&&(g=!g),this.is_disabled(f[h])||!g&&f[h]!==d&&f[h]!==e?this.deselect_node(f[h],!0,c):this.is_hidden(f[h])||this.select_node(f[h],!0,!1,c);this.trigger("changed",{action:"select_node",node:this.get_node(a),selected:this._data.core.selected,event:c})}else this.is_selected(a)?this.deselect_node(a,!1,c):this.select_node(a,!1,!1,c);else!this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&this.is_selected(a)?this.deselect_node(a,!1,c):(this.deselect_all(!0),this.select_node(a,!1,!1,c),this._data.core.last_clicked=this.get_node(a));this.trigger("activate_node",{node:this.get_node(a),event:c})},hover_node:function(a){if(a=this.get_node(a,!0),!a||!a.length||a.children(".jstree-hovered").length)return!1;var b=this.element.find(".jstree-hovered"),c=this.element;b&&b.length&&this.dehover_node(b),a.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(a)}),setTimeout(function(){c.attr("aria-activedescendant",a[0].id)},0)},dehover_node:function(a){return a=this.get_node(a,!0),a&&a.length&&a.children(".jstree-hovered").length?(a.children(".jstree-anchor").removeClass("jstree-hovered"),void this.trigger("dehover_node",{node:this.get_node(a)})):!1},select_node:function(b,c,d,e){var f,g,h,i;if(a.vakata.is_array(b)){for(b=b.slice(),g=0,h=b.length;h>g;g++)this.select_node(b[g],c,d,e);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.selected||(b.state.selected=!0,this._data.core.selected.push(b.id),d||(f=this._open_to(b)),f&&f.length&&f.children(".jstree-anchor").addClass("jstree-clicked").attr("aria-selected",!0),this.trigger("select_node",{node:b,selected:this._data.core.selected,event:e}),c||this.trigger("changed",{action:"select_node",node:b,selected:this._data.core.selected,event:e})))):!1},deselect_node:function(b,c,d){var e,f,g;if(a.vakata.is_array(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.deselect_node(b[e],c,d);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(g=this.get_node(b,!0),void(b.state.selected&&(b.state.selected=!1,this._data.core.selected=a.vakata.array_remove_item(this._data.core.selected,b.id),g.length&&g.children(".jstree-anchor").removeClass("jstree-clicked").attr("aria-selected",!1),this.trigger("deselect_node",{node:b,selected:this._data.core.selected,event:d}),c||this.trigger("changed",{action:"deselect_node",node:b,selected:this._data.core.selected,event:d})))):!1},select_all:function(b){var c=this._data.core.selected.concat([]),d,e;for(this._data.core.selected=this._model.data[a.jstree.root].children_d.concat(),d=0,e=this._data.core.selected.length;e>d;d++)this._model.data[this._data.core.selected[d]]&&(this._model.data[this._data.core.selected[d]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),b||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:c})},deselect_all:function(a){var b=this._data.core.selected.concat([]),c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)this._model.data[this._data.core.selected[c]]&&(this._model.data[this._data.core.selected[c]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked").attr("aria-selected",!1),this.trigger("deselect_all",{selected:this._data.core.selected,node:b}),a||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:b})},is_selected:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.selected:!1},get_selected:function(b){return b?a.map(this._data.core.selected,function(a){return this.get_node(a)}.bind(this)):this._data.core.selected.slice()},get_top_selected:function(b){var c=this.get_selected(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,function(a){return this.get_node(a)}.bind(this)):c},get_bottom_selected:function(b){var c=this.get_selected(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,function(a){return this.get_node(a)}.bind(this)):d},get_state:function(){var b={core:{open:[],loaded:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},c;for(c in this._model.data)this._model.data.hasOwnProperty(c)&&c!==a.jstree.root&&(this._model.data[c].state.loaded&&this.settings.core.loaded_state&&b.core.loaded.push(c),this._model.data[c].state.opened&&b.core.open.push(c),this._model.data[c].state.selected&&b.core.selected.push(c));return b},set_state:function(c,d){if(c){if(c.core&&c.core.selected&&c.core.initial_selection===b&&(c.core.initial_selection=this._data.core.selected.concat([]).sort().join(",")),c.core){var e,f,g,h,i;if(c.core.loaded)return this.settings.core.loaded_state&&a.vakata.is_array(c.core.loaded)&&c.core.loaded.length?this._load_nodes(c.core.loaded,function(a){delete c.core.loaded,this.set_state(c,d)}):(delete c.core.loaded,this.set_state(c,d)),!1;if(c.core.open)return a.vakata.is_array(c.core.open)&&c.core.open.length?this._load_nodes(c.core.open,function(a){this.open_node(a,!1,0),delete c.core.open,this.set_state(c,d)}):(delete c.core.open,this.set_state(c,d)),!1;if(c.core.scroll)return c.core.scroll&&c.core.scroll.left!==b&&this.element.scrollLeft(c.core.scroll.left),c.core.scroll&&c.core.scroll.top!==b&&this.element.scrollTop(c.core.scroll.top),delete c.core.scroll,this.set_state(c,d),!1;if(c.core.selected)return h=this,(c.core.initial_selection===b||c.core.initial_selection===this._data.core.selected.concat([]).sort().join(","))&&(this.deselect_all(),a.each(c.core.selected,function(a,b){h.select_node(b,!1,!0)})),delete c.core.initial_selection,delete c.core.selected,this.set_state(c,d),!1;for(i in c)c.hasOwnProperty(i)&&"core"!==i&&-1===a.inArray(i,this.settings.plugins)&&delete c[i];if(a.isEmptyObject(c.core))return delete c.core,this.set_state(c,d),!1}return a.isEmptyObject(c)?(c=null,d&&d.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(b,c){this._data.core.state=c===!0?{}:this.get_state(),c&&a.vakata.is_function(c)&&(this._data.core.state=c.call(this,this._data.core.state)),this._cnt=0,this._model.data={},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this._data.core.selected=[],this._data.core.last_clicked=null,this._data.core.focused=null;var d=this.get_container_ul()[0].className;b||(this.element.html(""),this.element.attr("aria-activedescendant","j"+this._id+"_loading")),this.load_node(a.jstree.root,function(b,c){c&&(this.get_container_ul()[0].className=d,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.set_state(a.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c=[],d=[],e=this._data.core.selected.concat([]);d.push(b.id),b.state.opened===!0&&c.push(b.id),this.get_node(b,!0).find(".jstree-open").each(function(){d.push(this.id),c.push(this.id)}),this._load_nodes(d,function(a){this.open_node(c,!1,0),this.select_node(e),this.trigger("refresh_node",{node:b,nodes:a})}.bind(this),!1,!0)},set_id:function(b,c){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var d,e,f=this._model.data,g=b.id;for(c=c.toString(),f[b.parent].children[a.inArray(b.id,f[b.parent].children)]=c,d=0,e=b.parents.length;e>d;d++)f[b.parents[d]].children_d[a.inArray(b.id,f[b.parents[d]].children_d)]=c;for(d=0,e=b.children.length;e>d;d++)f[b.children[d]].parent=c;for(d=0,e=b.children_d.length;e>d;d++)f[b.children_d[d]].parents[a.inArray(b.id,f[b.children_d[d]].parents)]=c;return d=a.inArray(b.id,this._data.core.selected),-1!==d&&(this._data.core.selected[d]=c),d=this.get_node(b.id,!0),d&&(d.attr("id",c),this.element.attr("aria-activedescendant")===b.id&&this.element.attr("aria-activedescendant",c)),delete f[b.id],b.id=c,b.li_attr.id=c,f[c]=b,this.trigger("set_id",{node:b,"new":b.id,old:g}),!0},get_text:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.text:!1},set_text:function(b,c){var d,e;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.set_text(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.text=c,this.get_node(b,!0).length&&this.redraw_node(b.id),this.trigger("set_text",{obj:b,text:c}),!0):!1},get_json:function(b,c,d){if(b=this.get_node(b||a.jstree.root),!b)return!1;c&&c.flat&&!d&&(d=[]);var e={id:b.id,text:b.text,icon:this.get_icon(b),li_attr:a.extend(!0,{},b.li_attr),a_attr:a.extend(!0,{},b.a_attr),state:{},data:c&&c.no_data?!1:a.extend(!0,a.vakata.is_array(b.data)?[]:{},b.data)},f,g;if(c&&c.flat?e.parent=b.parent:e.children=[],c&&c.no_state)delete e.state;else for(f in b.state)b.state.hasOwnProperty(f)&&(e.state[f]=b.state[f]);if(c&&c.no_li_attr&&delete e.li_attr,c&&c.no_a_attr&&delete e.a_attr,c&&c.no_id&&(delete e.id,e.li_attr&&e.li_attr.id&&delete e.li_attr.id,e.a_attr&&e.a_attr.id&&delete e.a_attr.id),c&&c.flat&&b.id!==a.jstree.root&&d.push(e),!c||!c.no_children)for(f=0,g=b.children.length;g>f;f++)c&&c.flat?this.get_json(b.children[f],c,d):e.children.push(this.get_json(b.children[f],c));return c&&c.flat?d:b.id===a.jstree.root?e.children:e},create_node:function(c,d,e,f,g){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return!1;if(e=e===b?"last":e,!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(c))return this.load_node(c,function(){this.create_node(c,d,e,f,!0)});d||(d={text:this.get_string("New node")}),d="string"==typeof d?{text:d}:a.extend(!0,{},d),d.text===b&&(d.text=this.get_string("New node"));var h,i,j,k;switch(c.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":h=this.get_node(c.parent),e=a.inArray(c.id,h.children),c=h;break;case"after":h=this.get_node(c.parent),e=a.inArray(c.id,h.children)+1,c=h;break;case"inside":case"first":e=0;break;case"last":e=c.children.length;break;default:e||(e=0)}if(e>c.children.length&&(e=c.children.length),d.id||(d.id=!0),!this.check("create_node",d,c,e))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(d.id===!0&&delete d.id,d=this._parse_model_from_json(d,c.id,c.parents.concat()),!d)return!1;for(h=this.get_node(d),i=[],i.push(d),i=i.concat(h.children_d),this.trigger("model",{nodes:i,parent:c.id}),c.children_d=c.children_d.concat(i),j=0,k=c.parents.length;k>j;j++)this._model.data[c.parents[j]].children_d=this._model.data[c.parents[j]].children_d.concat(i);for(d=h,h=[],j=0,k=c.children.length;k>j;j++)h[j>=e?j+1:j]=c.children[j];return h[e]=d.id,c.children=h,this.redraw_node(c,!0),this.trigger("create_node",{node:this.get_node(d),parent:c.id,position:e}),f&&f.call(this,this.get_node(d)),d.id},rename_node:function(b,c){var d,e,f;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.rename_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=b.text,this.check("rename_node",b,this.get_parent(b),c)?(this.set_text(b,c),this.trigger("rename_node",{node:b,text:c,old:f}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.delete_node(b[c]);return!0}if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;if(e=this.get_node(b.parent),f=a.inArray(b.id,e.children),l=!1,!this.check("delete_node",b,e,f))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==f&&(e.children=a.vakata.array_remove(e.children,f)),g=b.children_d.concat([]),g.push(b.id),h=0,i=b.parents.length;i>h;h++)this._model.data[b.parents[h]].children_d=a.vakata.array_filter(this._model.data[b.parents[h]].children_d,function(b){return-1===a.inArray(b,g)});for(j=0,k=g.length;k>j;j++)if(this._model.data[g[j]].state.selected){l=!0;break}for(l&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(b){return-1===a.inArray(b,g)})),this.trigger("delete_node",{node:b,parent:e.id}),l&&this.trigger("changed",{action:"delete_node",node:b,selected:this._data.core.selected,parent:e.id}),j=0,k=g.length;k>j;j++)delete this._model.data[g[j]];return-1!==a.inArray(this._data.core.focused,g)&&(this._data.core.focused=null,m=this.element[0].scrollTop,n=this.element[0].scrollLeft,e.id===a.jstree.root?this._model.data[a.jstree.root].children[0]&&this.get_node(this._model.data[a.jstree.root].children[0],!0).children(".jstree-anchor").triger("focus"):this.get_node(e,!0).children(".jstree-anchor").trigger("focus"),this.element[0].scrollTop=m,this.element[0].scrollLeft=n),this.redraw_node(e,!0),!0},check:function(b,c,d,e,f){c=c&&c.id?c:this.get_node(c),d=d&&d.id?d:this.get_node(d);var g=b.match(/^move_node|copy_node|create_node$/i)?d:c,h=this.settings.core.check_callback;if("move_node"===b||"copy_node"===b){if(!(f&&f.is_multi||"move_node"!==b||a.inArray(c.id,d.children)!==e))return this._data.core.last_error={error:"check",plugin:"core",id:"core_08",reason:"Moving node to its current position",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1;if(!(f&&f.is_multi||c.id!==d.id&&("move_node"!==b||a.inArray(c.id,d.children)!==e)&&-1===a.inArray(d.id,c.children_d)))return this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1}return g&&g.data&&(g=g.data),g&&g.functions&&(g.functions[b]===!1||g.functions[b]===!0)?(g.functions[b]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})}),g.functions[b]):h===!1||a.vakata.is_function(h)&&h.call(this,b,c,d,e,f)===!1||h&&h[b]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1):!0},last_error:function(){return this._data.core.last_error},move_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.move_node(c,d,e,f,!0,!1,i)});if(a.vakata.is_array(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(r=this.move_node(c[j],d,e,f,g,!1,i))&&(d=r,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;if(l=(c.parent||a.jstree.root).toString(),n=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,o=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),p=!o||!o._id||this._id!==o._id,m=o&&o._id&&l&&o._model.data[l]&&o._model.data[l].children?a.inArray(c.id,o._model.data[l].children):-1,o&&o._id&&(c=o._model.data[c.id]),p)return(r=this.copy_node(c,d,e,f,g,!1,i))?(o&&o.delete_node(c),r):!1;switch(d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,n.children);break;case"after":e=a.inArray(d.id,n.children)+1;break;case"inside":case"first":e=0;break;case"last":e=n.children.length;break;default:e||(e=0)}if(e>n.children.length&&(e=n.children.length),!this.check("move_node",c,n,e,{core:!0,origin:i,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(c.parent===n.id){for(q=n.children.concat(),r=a.inArray(c.id,q),-1!==r&&(q=a.vakata.array_remove(q,r),e>r&&e--),r=[],s=0,t=q.length;t>s;s++)r[s>=e?s+1:s]=q[s];r[e]=c.id,n.children=r,this._node_changed(n.id),this.redraw(n.id===a.jstree.root)}else{for(r=c.children_d.concat(),r.push(c.id),s=0,t=c.parents.length;t>s;s++){for(q=[],w=o._model.data[c.parents[s]].children_d,u=0,v=w.length;v>u;u++)-1===a.inArray(w[u],r)&&q.push(w[u]);o._model.data[c.parents[s]].children_d=q}for(o._model.data[l].children=a.vakata.array_remove_item(o._model.data[l].children,c.id),s=0,t=n.parents.length;t>s;s++)this._model.data[n.parents[s]].children_d=this._model.data[n.parents[s]].children_d.concat(r);for(q=[],s=0,t=n.children.length;t>s;s++)q[s>=e?s+1:s]=n.children[s];for(q[e]=c.id,n.children=q,n.children_d.push(c.id),n.children_d=n.children_d.concat(c.children_d),c.parent=n.id,r=n.parents.concat(),r.unshift(n.id),w=c.parents.length,c.parents=r,r=r.concat(),s=0,t=c.children_d.length;t>s;s++)this._model.data[c.children_d[s]].parents=this._model.data[c.children_d[s]].parents.slice(0,-1*w),Array.prototype.push.apply(this._model.data[c.children_d[s]].parents,r);(l===a.jstree.root||n.id===a.jstree.root)&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||(this._node_changed(l),this._node_changed(n.id)),h||this.redraw()}return f&&f.call(this,c,n,e),this.trigger("move_node",{node:c,parent:n.id,position:e,old_parent:l,old_position:m,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id,old_instance:o,new_instance:this}),c.id},copy_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.copy_node(c,d,e,f,!0,!1,i)});if(a.vakata.is_array(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(m=this.copy_node(c[j],d,e,f,g,!0,i))&&(d=m,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;switch(q=(c.parent||a.jstree.root).toString(),r=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,s=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),t=!s||!s._id||this._id!==s._id,s&&s._id&&(c=s._model.data[c.id]),d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,r.children);break;case"after":e=a.inArray(d.id,r.children)+1;break;case"inside":case"first":e=0;break;case"last":e=r.children.length;break;default:e||(e=0)}if(e>r.children.length&&(e=r.children.length),!this.check("copy_node",c,r,e,{core:!0,origin:i,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(p=s?s.get_json(c,{no_id:!0,no_data:!0,no_state:!0}):c,!p)return!1;if(p.id===!0&&delete p.id,p=this._parse_model_from_json(p,r.id,r.parents.concat()), -!p)return!1;for(m=this.get_node(p),c&&c.state&&c.state.loaded===!1&&(m.state.loaded=!1),l=[],l.push(p),l=l.concat(m.children_d),this.trigger("model",{nodes:l,parent:r.id}),n=0,o=r.parents.length;o>n;n++)this._model.data[r.parents[n]].children_d=this._model.data[r.parents[n]].children_d.concat(l);for(l=[],n=0,o=r.children.length;o>n;n++)l[n>=e?n+1:n]=r.children[n];return l[e]=m.id,r.children=l,r.children_d.push(m.id),r.children_d=r.children_d.concat(m.children_d),r.id===a.jstree.root&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||this._node_changed(r.id),h||this.redraw(r.id===a.jstree.root),f&&f.call(this,m,r,e),this.trigger("copy_node",{node:m,original:c,parent:r.id,position:e,old_parent:q,old_position:s&&s._id&&q&&s._model.data[q]&&s._model.data[q].children?a.inArray(c.id,s._model.data[q].children):-1,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id,old_instance:s,new_instance:this}),m.id},cut:function(b){if(b||(b=this._data.core.selected.concat()),a.vakata.is_array(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="move_node",void this.trigger("cut",{node:b})):!1},copy:function(b){if(b||(b=this._data.core.selected.concat()),a.vakata.is_array(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="copy_node",void this.trigger("copy",{node:b})):!1},get_buffer:function(){return{mode:e,node:d,inst:f}},can_paste:function(){return e!==!1&&d!==!1},paste:function(a,b){return a=this.get_node(a),a&&e&&e.match(/^(copy_node|move_node)$/)&&d?(this[e](d,a,b,!1,!1,!1,f)&&this.trigger("paste",{parent:a.id,node:d,mode:e}),d=!1,e=!1,void(f=!1)):!1},clear_buffer:function(){d=!1,e=!1,f=!1,this.trigger("clear_buffer")},edit:function(b,c,d){var e,f,g,h,j,k,l,m,n,o=!1;return(b=this.get_node(b))?this.check("edit",b,this.get_parent(b))?(n=b,c="string"==typeof c?c:b.text,this.set_text(b,""),b=this._open_to(b),n.text=c,e=this._data.core.rtl,f=this.element.width(),this._data.core.focused=n.id,g=b.children(".jstree-anchor").trigger("focus"),h=a(""),j=c,k=a("
        ",{css:{position:"absolute",top:"-200px",left:e?"0px":"-1000px",visibility:"hidden"}}).appendTo(i.body),l=a("",{value:j,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:function(c){c.stopImmediatePropagation(),c.preventDefault();var e=h.children(".jstree-rename-input"),f=e.val(),i=this.settings.core.force_text,m;""===f&&(f=j),k.remove(),h.replaceWith(g),h.remove(),j=i?j:a("
        ").append(a.parseHTML(j)).html(),b=this.get_node(b),this.set_text(b,j),m=!!this.rename_node(b,i?a("
        ").text(f).text():a("
        ").append(a.parseHTML(f)).html()),m||this.set_text(b,j),this._data.core.focused=n.id,setTimeout(function(){var a=this.get_node(n.id,!0);a.length&&(this._data.core.focused=n.id,a.children(".jstree-anchor").trigger("focus"))}.bind(this),0),d&&d.call(this,n,m,o,f),l=null}.bind(this),keydown:function(a){var b=a.which;27===b&&(o=!0,this.value=j),(27===b||13===b||37===b||38===b||39===b||40===b||32===b)&&a.stopImmediatePropagation(),(27===b||13===b)&&(a.preventDefault(),this.blur())},click:function(a){a.stopImmediatePropagation()},mousedown:function(a){a.stopImmediatePropagation()},keyup:function(a){l.width(Math.min(k.text("pW"+this.value).width(),f))},keypress:function(a){return 13===a.which?!1:void 0}}),m={fontFamily:g.css("fontFamily")||"",fontSize:g.css("fontSize")||"",fontWeight:g.css("fontWeight")||"",fontStyle:g.css("fontStyle")||"",fontStretch:g.css("fontStretch")||"",fontVariant:g.css("fontVariant")||"",letterSpacing:g.css("letterSpacing")||"",wordSpacing:g.css("wordSpacing")||""},h.attr("class",g.attr("class")).append(g.contents().clone()).append(l),g.replaceWith(h),k.css(m),l.css(m).width(Math.min(k.text("pW"+l[0].value).width(),f))[0].select(),void a(i).one("mousedown.jstree touchstart.jstree dnd_start.vakata",function(b){l&&b.target!==l&&a(l).trigger("blur")})):(this.settings.core.error.call(this,this._data.core.last_error),!1):!1},set_theme:function(b,c){if(!b)return!1;if(c===!0){var d=this.settings.core.themes.dir;d||(d=a.jstree.path+"/themes"),c=d+"/"+b+"/style.css"}c&&-1===a.inArray(c,g)&&(a("head").append(''),g.push(c)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=b,this.element.addClass("jstree-"+b),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+b+"-responsive"),this.trigger("set_theme",{theme:b})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(a){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=a,a&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped"),this.trigger("show_stripes")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped"),this.trigger("hide_stripes")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots"),this.trigger("show_dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots"),this.trigger("hide_dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons"),this.trigger("show_icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons"),this.trigger("hide_icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},show_ellipsis:function(){this._data.core.themes.ellipsis=!0,this.get_container_ul().addClass("jstree-ellipsis"),this.trigger("show_ellipsis")},hide_ellipsis:function(){this._data.core.themes.ellipsis=!1,this.get_container_ul().removeClass("jstree-ellipsis"),this.trigger("hide_ellipsis")},toggle_ellipsis:function(){this._data.core.themes.ellipsis?this.hide_ellipsis():this.show_ellipsis()},set_icon:function(c,d){var e,f,g,h;if(a.vakata.is_array(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.set_icon(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(h=c.icon,c.icon=d===!0||null===d||d===b||""===d?!0:d,g=this.get_node(c,!0).children(".jstree-anchor").children(".jstree-themeicon"),d===!1?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),this.hide_icon(c)):d===!0||null===d||d===b||""===d?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),h===!1&&this.show_icon(c)):-1===d.indexOf("/")&&-1===d.indexOf(".")?(g.removeClass(h).css("background",""),g.addClass(d+" jstree-themeicon-custom").attr("rel",d),h===!1&&this.show_icon(c)):(g.removeClass(h).css("background",""),g.addClass("jstree-themeicon-custom").css("background","url('"+d+"') center center no-repeat").attr("rel",d),h===!1&&this.show_icon(c)),!0):!1},get_icon:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.icon:!1},hide_icon:function(b){var c,d;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.hide_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(b.icon=!1,this.get_node(b,!0).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(b){var c,d,e;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.show_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(e=this.get_node(b,!0),b.icon=e.length?e.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):!0,b.icon||(b.icon=!0),e.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},a.vakata={},a.vakata.attributes=function(b,c){b=a(b)[0];var d=c?{}:[];return b&&b.attributes&&a.each(b.attributes,function(b,e){-1===a.inArray(e.name.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==e.value&&""!==a.vakata.trim(e.value)&&(c?d[e.name]=e.value:d.push(e.name))}),d},a.vakata.array_unique=function(a){var c=[],d,e,f,g={};for(d=0,f=a.length;f>d;d++)g[a[d]]===b&&(c.push(a[d]),g[a[d]]=!0);return c},a.vakata.array_remove=function(a,b){return a.splice(b,1),a},a.vakata.array_remove_item=function(b,c){var d=a.inArray(c,b);return-1!==d?a.vakata.array_remove(b,d):b},a.vakata.array_filter=function(a,b,c,d,e){if(a.filter)return a.filter(b,c);d=[];for(e in a)~~e+""==e+""&&e>=0&&b.call(c,a[e],+e,a)&&d.push(a[e]);return d},a.vakata.trim=function(a){return String.prototype.trim?String.prototype.trim.call(a.toString()):a.toString().replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},a.vakata.is_function=function(a){return"function"==typeof a&&"number"!=typeof a.nodeType},a.vakata.is_array=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},Function.prototype.bind||(Function.prototype.bind=function(){var a=this,b=arguments[0],c=Array.prototype.slice.call(arguments,1);if("function"!=typeof a)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");return function(){var d=c.concat(Array.prototype.slice.call(arguments));return a.apply(b,d)}}),a.jstree.plugins.changed=function(a,b){var c=[];this.trigger=function(a,d){var e,f;if(d||(d={}),"changed"===a.replace(".jstree","")){d.changed={selected:[],deselected:[]};var g={};for(e=0,f=c.length;f>e;e++)g[c[e]]=1;for(e=0,f=d.selected.length;f>e;e++)g[d.selected[e]]?g[d.selected[e]]=2:d.changed.selected.push(d.selected[e]);for(e=0,f=c.length;f>e;e++)1===g[c[e]]&&d.changed.deselected.push(c[e]);c=d.selected.slice()}b.trigger.call(this,a,d)},this.refresh=function(a,d){return c=[],b.refresh.apply(this,arguments)}};var l=i.createElement("I");l.className="jstree-icon jstree-checkbox",l.setAttribute("role","presentation"),a.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0,cascade:"",tie_selection:!0,cascade_to_disabled:!0,cascade_to_hidden:!0},a.jstree.plugins.checkbox=function(c,d){this.bind=function(){d.bind.call(this),this._data.checkbox.uto=!1,this._data.checkbox.selected=[],this.settings.checkbox.three_state&&(this.settings.checkbox.cascade="up+down+undetermined"),this.element.on("init.jstree",function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked"),this.settings.checkbox.tie_selection&&this.element.addClass("jstree-checkbox-selection")}.bind(this)).on("loading.jstree",function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()}.bind(this)),-1!==this.settings.checkbox.cascade.indexOf("undetermined")&&this.element.on("changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(this._undetermined.bind(this),50)}.bind(this)),this.settings.checkbox.tie_selection||this.element.on("model.jstree",function(a,b){var c=this._model.data,d=c[b.parent],e=b.nodes,f,g;for(f=0,g=e.length;g>f;f++)c[e[f]].state.checked=c[e[f]].state.checked||c[e[f]].original&&c[e[f]].original.state&&c[e[f]].original.state.checked,c[e[f]].state.checked&&this._data.checkbox.selected.push(e[f])}.bind(this)),(-1!==this.settings.checkbox.cascade.indexOf("up")||-1!==this.settings.checkbox.cascade.indexOf("down"))&&this.element.on("model.jstree",function(b,c){var d=this._model.data,e=d[c.parent],f=c.nodes,g=[],h,i,j,k,l,m,n=this.settings.checkbox.cascade,o=this.settings.checkbox.tie_selection;if(-1!==n.indexOf("down"))if(e.state[o?"selected":"checked"]){for(i=0,j=f.length;j>i;i++)d[f[i]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(f)}else for(i=0,j=f.length;j>i;i++)if(d[f[i]].state[o?"selected":"checked"]){for(k=0,l=d[f[i]].children_d.length;l>k;k++)d[d[f[i]].children_d[k]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(d[f[i]].children_d)}if(-1!==n.indexOf("up")){for(i=0,j=e.children_d.length;j>i;i++)d[e.children_d[i]].children.length||g.push(d[e.children_d[i]].parent);for(g=a.vakata.array_unique(g),k=0,l=g.length;l>k;k++){e=d[g[k]];while(e&&e.id!==a.jstree.root){for(h=0,i=0,j=e.children.length;j>i;i++)h+=d[e.children[i]].state[o?"selected":"checked"];if(h!==j)break;e.state[o?"selected":"checked"]=!0,this._data[o?"core":"checkbox"].selected.push(e.id),m=this.get_node(e,!0),m&&m.length&&m.attr("aria-selected",!0).children(".jstree-anchor").addClass(o?"jstree-clicked":"jstree-checked"),e=this.get_node(e.parent)}}}this._data[o?"core":"checkbox"].selected=a.vakata.array_unique(this._data[o?"core":"checkbox"].selected)}.bind(this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",function(b,c){var d=this,e=c.node,f=this._model.data,g=this.get_node(e.parent),h,i,j,k,l=this.settings.checkbox.cascade,m=this.settings.checkbox.tie_selection,n={},o=this._data[m?"core":"checkbox"].selected;for(h=0,i=o.length;i>h;h++)n[o[h]]=!0;if(-1!==l.indexOf("down")){var p=this._cascade_new_checked_state(e.id,!0),q=e.children_d.concat(e.id);for(h=0,i=q.length;i>h;h++)p.indexOf(q[h])>-1?n[q[h]]=!0:delete n[q[h]]}if(-1!==l.indexOf("up"))while(g&&g.id!==a.jstree.root){for(j=0,h=0,i=g.children.length;i>h;h++)j+=f[g.children[h]].state[m?"selected":"checked"];if(j!==i)break;g.state[m?"selected":"checked"]=!0,n[g.id]=!0,k=this.get_node(g,!0),k&&k.length&&k.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),g=this.get_node(g.parent)}o=[];for(h in n)n.hasOwnProperty(h)&&o.push(h);this._data[m?"core":"checkbox"].selected=o}.bind(this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",function(b,c){var d=this.get_node(a.jstree.root),e=this._model.data,f,g,h;for(f=0,g=d.children_d.length;g>f;f++)h=e[d.children_d[f]],h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1)}.bind(this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",function(b,c){var d=this,e=c.node,f=this.get_node(e,!0),g,h,i,j=this.settings.checkbox.cascade,k=this.settings.checkbox.tie_selection,l=this._data[k?"core":"checkbox"].selected,m={},n=[],o=e.children_d.concat(e.id);if(-1!==j.indexOf("down")){var p=this._cascade_new_checked_state(e.id,!1);l=a.vakata.array_filter(l,function(a){return-1===o.indexOf(a)||p.indexOf(a)>-1})}if(-1!==j.indexOf("up")&&-1===l.indexOf(e.id)){for(g=0,h=e.parents.length;h>g;g++)i=this._model.data[e.parents[g]],i.state[k?"selected":"checked"]=!1,i&&i.original&&i.original.state&&i.original.state.undetermined&&(i.original.state.undetermined=!1),i=this.get_node(e.parents[g],!0),i&&i.length&&i.attr("aria-selected",!1).children(".jstree-anchor").removeClass(k?"jstree-clicked":"jstree-checked");l=a.vakata.array_filter(l,function(a){return-1===e.parents.indexOf(a)})}this._data[k?"core":"checkbox"].selected=l}.bind(this)),-1!==this.settings.checkbox.cascade.indexOf("up")&&this.element.on("delete_node.jstree",function(b,c){var d=this.get_node(c.parent),e=this._model.data,f,g,h,i,j=this.settings.checkbox.tie_selection;while(d&&d.id!==a.jstree.root&&!d.state[j?"selected":"checked"]){for(h=0,f=0,g=d.children.length;g>f;f++)h+=e[d.children[f]].state[j?"selected":"checked"];if(!(g>0&&h===g))break;d.state[j?"selected":"checked"]=!0,this._data[j?"core":"checkbox"].selected.push(d.id),i=this.get_node(d,!0),i&&i.length&&i.attr("aria-selected",!0).children(".jstree-anchor").addClass(j?"jstree-clicked":"jstree-checked"),d=this.get_node(d.parent)}}.bind(this)).on("move_node.jstree",function(b,c){var d=c.is_multi,e=c.old_parent,f=this.get_node(c.parent),g=this._model.data,h,i,j,k,l,m=this.settings.checkbox.tie_selection;if(!d){h=this.get_node(e);while(h&&h.id!==a.jstree.root&&!h.state[m?"selected":"checked"]){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(!(k>0&&i===k))break;h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),h=this.get_node(h.parent)}}h=f;while(h&&h.id!==a.jstree.root){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(i===k)h.state[m?"selected":"checked"]||(h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"));else{if(!h.state[m?"selected":"checked"])break;h.state[m?"selected":"checked"]=!1,this._data[m?"core":"checkbox"].selected=a.vakata.array_remove_item(this._data[m?"core":"checkbox"].selected,h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(m?"jstree-clicked":"jstree-checked")}h=this.get_node(h.parent)}}.bind(this))},this.get_undetermined=function(c){if(-1===this.settings.checkbox.cascade.indexOf("undetermined"))return[];var d,e,f,g,h={},i=this._model.data,j=this.settings.checkbox.tie_selection,k=this._data[j?"core":"checkbox"].selected,l=[],m=this,n=[];for(d=0,e=k.length;e>d;d++)if(i[k[d]]&&i[k[d]].parents)for(f=0,g=i[k[d]].parents.length;g>f;f++){if(h[i[k[d]].parents[f]]!==b)break;i[k[d]].parents[f]!==a.jstree.root&&(h[i[k[d]].parents[f]]=!0,l.push(i[k[d]].parents[f]))}for(this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var c=m.get_node(this),j;if(c)if(c.state.loaded){for(d=0,e=c.children_d.length;e>d;d++)if(j=i[c.children_d[d]],!j.state.loaded&&j.original&&j.original.state&&j.original.state.undetermined&&j.original.state.undetermined===!0)for(h[j.id]===b&&j.id!==a.jstree.root&&(h[j.id]=!0,l.push(j.id)),f=0,g=j.parents.length;g>f;f++)h[j.parents[f]]===b&&j.parents[f]!==a.jstree.root&&(h[j.parents[f]]=!0,l.push(j.parents[f]))}else if(c.original&&c.original.state&&c.original.state.undetermined&&c.original.state.undetermined===!0)for(h[c.id]===b&&c.id!==a.jstree.root&&(h[c.id]=!0,l.push(c.id)),f=0,g=c.parents.length;g>f;f++)h[c.parents[f]]===b&&c.parents[f]!==a.jstree.root&&(h[c.parents[f]]=!0,l.push(c.parents[f]))}),d=0,e=l.length;e>d;d++)i[l[d]].state[j?"selected":"checked"]||n.push(c?i[l[d]]:l[d]);return n},this._undetermined=function(){if(null!==this.element){var a=this.get_undetermined(!1),b,c,d;for(this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),b=0,c=a.length;c>b;b++)d=this.get_node(a[b],!0),d&&d.length&&d.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined")}},this.redraw_node=function(a,b,c,e){if(a=d.redraw_node.apply(this,arguments)){var f,g,h=null,i=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&(!this.settings.checkbox.tie_selection&&this._model.data[a.id].state.checked&&(h.className+=" jstree-checked"),i=l.cloneNode(!1),this._model.data[a.id].state.checkbox_disabled&&(i.className+=" jstree-checkbox-disabled"),h.insertBefore(i,h.childNodes[0]))}return c||-1===this.settings.checkbox.cascade.indexOf("undetermined")||(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(this._undetermined.bind(this),50)),a},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.get_container_ul().removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.get_container_ul().addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()},this.is_undetermined=function(b){b=this.get_node(b);var c=this.settings.checkbox.cascade,d,e,f=this.settings.checkbox.tie_selection,g=this._data[f?"core":"checkbox"].selected,h=this._model.data;if(!b||b.state[f?"selected":"checked"]===!0||-1===c.indexOf("undetermined")||-1===c.indexOf("down")&&-1===c.indexOf("up"))return!1;if(!b.state.loaded&&b.original.state.undetermined===!0)return!0;for(d=0,e=b.children_d.length;e>d;d++)if(-1!==a.inArray(b.children_d[d],g)||!h[b.children_d[d]].state.loaded&&h[b.children_d[d]].original.state.undetermined)return!0;return!1},this.disable_checkbox=function(b){var c,d,e;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled||(b.state.checkbox_disabled=!0,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-checkbox-disabled"),this.trigger("disable_checkbox",{node:b})))):!1},this.enable_checkbox=function(b){var c,d,e;if(a.vakata.is_array(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled&&(b.state.checkbox_disabled=!1,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").removeClass("jstree-checkbox-disabled"),this.trigger("enable_checkbox",{node:b})))):!1},this.activate_node=function(b,c){return a(c.target).hasClass("jstree-checkbox-disabled")?!1:(this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||a(c.target).hasClass("jstree-checkbox"))&&(c.ctrlKey=!0),this.settings.checkbox.tie_selection||!this.settings.checkbox.whole_node&&!a(c.target).hasClass("jstree-checkbox")?d.activate_node.call(this,b,c):this.is_disabled(b)?!1:(this.is_checked(b)?this.uncheck_node(b,c):this.check_node(b,c),void this.trigger("activate_node",{node:this.get_node(b)})))},this._cascade_new_checked_state=function(a,b){var c=this,d=this.settings.checkbox.tie_selection,e=this._model.data[a],f=[],g=[],h,i,j;if(!this.settings.checkbox.cascade_to_disabled&&e.state.disabled||!this.settings.checkbox.cascade_to_hidden&&e.state.hidden)j=this.get_checked_descendants(a),e.state[d?"selected":"checked"]&&j.push(e.id),f=f.concat(j);else{if(e.children)for(h=0,i=e.children.length;i>h;h++){var k=e.children[h];j=c._cascade_new_checked_state(k,b),f=f.concat(j),j.indexOf(k)>-1&&g.push(k)}var l=c.get_node(e,!0),m=g.length>0&&g.lengthe;e++)this.check_node(b[e],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(d=this.get_node(b,!0),void(b.state.checked||(b.state.checked=!0,this._data.checkbox.selected.push(b.id),d&&d.length&&d.children(".jstree-anchor").addClass("jstree-checked"),this.trigger("check_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.uncheck_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.deselect_node(b,!1,c);var d,e,f;if(a.vakata.is_array(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.uncheck_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.checked&&(b.state.checked=!1,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,b.id),f.length&&f.children(".jstree-anchor").removeClass("jstree-checked"),this.trigger("uncheck_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.check_all=function(){if(this.settings.checkbox.tie_selection)return this.select_all();var b=this._data.checkbox.selected.concat([]),c,d;for(this._data.checkbox.selected=this._model.data[a.jstree.root].children_d.concat(),c=0,d=this._data.checkbox.selected.length;d>c;c++)this._model.data[this._data.checkbox.selected[c]]&&(this._model.data[this._data.checkbox.selected[c]].state.checked=!0);this.redraw(!0),this.trigger("check_all",{selected:this._data.checkbox.selected})},this.uncheck_all=function(){if(this.settings.checkbox.tie_selection)return this.deselect_all();var a=this._data.checkbox.selected.concat([]),b,c;for(b=0,c=this._data.checkbox.selected.length;c>b;b++)this._model.data[this._data.checkbox.selected[b]]&&(this._model.data[this._data.checkbox.selected[b]].state.checked=!1);this._data.checkbox.selected=[],this.element.find(".jstree-checked").removeClass("jstree-checked"),this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:a})},this.is_checked=function(b){return this.settings.checkbox.tie_selection?this.is_selected(b):(b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.checked:!1)},this.get_checked=function(b){return this.settings.checkbox.tie_selection?this.get_selected(b):b?a.map(this._data.checkbox.selected,function(a){return this.get_node(a)}.bind(this)):this._data.checkbox.selected.slice()},this.get_top_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_top_selected(b);var c=this.get_checked(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,function(a){return this.get_node(a)}.bind(this)):c},this.get_bottom_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_bottom_selected(b);var c=this.get_checked(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,function(a){return this.get_node(a)}.bind(this)):d},this.load_node=function(b,c){var e,f,g,h,i,j;if(!a.vakata.is_array(b)&&!this.settings.checkbox.tie_selection&&(j=this.get_node(b),j&&j.state.loaded))for(e=0,f=j.children_d.length;f>e;e++)this._model.data[j.children_d[e]].state.checked&&(i=!0,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,j.children_d[e]));return d.load_node.apply(this,arguments)},this.get_state=function(){var a=d.get_state.apply(this,arguments);return this.settings.checkbox.tie_selection?a:(a.checkbox=this._data.checkbox.selected.slice(),a)},this.set_state=function(b,c){var e=d.set_state.apply(this,arguments);if(e&&b.checkbox){if(!this.settings.checkbox.tie_selection){this.uncheck_all();var f=this;a.each(b.checkbox,function(a,b){f.check_node(b)})}return delete b.checkbox,this.set_state(b,c),!1}return e},this.refresh=function(a,b){return this.settings.checkbox.tie_selection&&(this._data.checkbox.selected=[]),d.refresh.apply(this,arguments)}},a.jstree.defaults.conditionalselect=function(){return!0},a.jstree.plugins.conditionalselect=function(a,b){this.activate_node=function(a,c){return this.settings.conditionalselect.call(this,this.get_node(a),c)?b.activate_node.call(this,a,c):void 0}},a.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(b,c){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.create_node(d,{},"last",function(a){try{c.edit(a)}catch(b){setTimeout(function(){c.edit(a)},0)}})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.edit(d)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.delete_node(c.get_selected()):c.delete_node(d)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.cut(c.get_top_selected()):c.cut(d)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.copy(c.get_top_selected()):c.copy(d)}},paste:{separator_before:!1,icon:!1,_disabled:function(b){return!a.jstree.reference(b.reference).can_paste()},separator_after:!1,label:"Paste",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.paste(d)}}}}}}},a.jstree.plugins.contextmenu=function(c,d){this.bind=function(){d.bind.call(this);var b=0,c=null,e,f;this.element.on("init.jstree loading.jstree ready.jstree",function(){this.get_container_ul().addClass("jstree-contextmenu")}.bind(this)).on("contextmenu.jstree",".jstree-anchor",function(a,d){"input"!==a.target.tagName.toLowerCase()&&(a.preventDefault(),b=a.ctrlKey?+new Date:0,(d||c)&&(b=+new Date+1e4),c&&clearTimeout(c),this.is_loading(a.currentTarget)||this.show_contextmenu(a.currentTarget,a.pageX,a.pageY,a))}.bind(this)).on("click.jstree",".jstree-anchor",function(c){this._data.contextmenu.visible&&(!b||+new Date-b>250)&&a.vakata.context.hide(),b=0}.bind(this)).on("touchstart.jstree",".jstree-anchor",function(b){b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(e=b.originalEvent.changedTouches[0].clientX,f=b.originalEvent.changedTouches[0].clientY,c=setTimeout(function(){a(b.currentTarget).trigger("contextmenu",!0)},750))}).on("touchmove.vakata.jstree",function(b){c&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(Math.abs(e-b.originalEvent.changedTouches[0].clientX)>10||Math.abs(f-b.originalEvent.changedTouches[0].clientY)>10)&&(clearTimeout(c),a.vakata.context.hide())}).on("touchend.vakata.jstree",function(a){c&&clearTimeout(c)}),a(i).on("context_hide.vakata.jstree",function(b,c){this._data.contextmenu.visible=!1,a(c.reference).removeClass("jstree-context")}.bind(this))},this.teardown=function(){this._data.contextmenu.visible&&a.vakata.context.hide(),a(i).off("context_hide.vakata.jstree"),d.teardown.call(this)},this.show_contextmenu=function(c,d,e,f){if(c=this.get_node(c),!c||c.id===a.jstree.root)return!1;var g=this.settings.contextmenu,h=this.get_node(c,!0),i=h.children(".jstree-anchor"),j=!1,k=!1;(g.show_at_node||d===b||e===b)&&(j=i.offset(),d=j.left,e=j.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(c)&&this.activate_node(c,f),k=g.items,a.vakata.is_function(k)&&(k=k.call(this,c,function(a){this._show_contextmenu(c,d,e,a)}.bind(this))),a.isPlainObject(k)&&this._show_contextmenu(c,d,e,k)},this._show_contextmenu=function(b,c,d,e){ -var f=this.get_node(b,!0),g=f.children(".jstree-anchor");a(i).one("context_show.vakata.jstree",function(b,c){var d="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";a(c.element).addClass(d),g.addClass("jstree-context")}.bind(this)),this._data.contextmenu.visible=!0,a.vakata.context.show(g,{x:c,y:d},e),this.trigger("show_contextmenu",{node:b,x:c,y:d})}},function(a){var b=!1,c={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};a.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(b){a(i).triggerHandler("context_"+b+".vakata",{reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}})},_execute:function(b){return b=c.items[b],b&&(!b._disabled||a.vakata.is_function(b._disabled)&&!b._disabled({item:b,reference:c.reference,element:c.element}))&&b.action?b.action.call(null,{item:b,reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}}):!1},_parse:function(b,d){if(!b)return!1;d||(c.html="",c.items=[]);var e="",f=!1,g;return d&&(e+=""),d||(c.html=e,a.vakata.context._trigger("parse")),e.length>10?e:!1},_show_submenu:function(c){if(c=a(c),c.length&&c.children("ul").length){var d=c.children("ul"),e=c.offset().left,f=e+c.outerWidth(),g=c.offset().top,h=d.width(),i=d.height(),j=a(window).width()+a(window).scrollLeft(),k=a(window).height()+a(window).scrollTop();b?c[f-(h+10+c.outerWidth())<0?"addClass":"removeClass"]("vakata-context-left"):c[f+h>j&&e>j-f?"addClass":"removeClass"]("vakata-context-right"),g+i+10>k&&d.css("bottom","-1px"),c.hasClass("vakata-context-right")?h>e&&d.css("margin-right",e-h):h>j-f&&d.css("margin-left",j-f-h),d.show()}},show:function(d,e,f){var g,h,j,k,l,m,n,o,p=!0;switch(c.element&&c.element.length&&c.element.width(""),p){case!e&&!d:return!1;case!!e&&!!d:c.reference=d,c.position_x=e.x,c.position_y=e.y;break;case!e&&!!d:c.reference=d,g=d.offset(),c.position_x=g.left+d.outerHeight(),c.position_y=g.top;break;case!!e&&!d:c.position_x=e.x,c.position_y=e.y}d&&!f&&a(d).data("vakata_contextmenu")&&(f=a(d).data("vakata_contextmenu")),a.vakata.context._parse(f)&&c.element.html(c.html),c.items.length&&(c.element.appendTo(i.body),h=c.element,j=c.position_x,k=c.position_y,l=h.width(),m=h.height(),n=a(window).width()+a(window).scrollLeft(),o=a(window).height()+a(window).scrollTop(),b&&(j-=h.outerWidth()-a(d).outerWidth(),jn&&(j=n-(l+20)),k+m+20>o&&(k=o-(m+20)),c.element.css({left:j,top:k}).show().find("a").first().trigger("focus").parent().addClass("vakata-context-hover"),c.is_visible=!0,a.vakata.context._trigger("show"))},hide:function(){c.is_visible&&(c.element.hide().find("ul").hide().end().find(":focus").trigger("blur").end().detach(),c.is_visible=!1,a.vakata.context._trigger("hide"))}},a(function(){b="rtl"===a(i.body).css("direction");var d=!1;c.element=a("
          "),c.element.on("mouseenter","li",function(b){b.stopImmediatePropagation(),a.contains(this,b.relatedTarget)||(d&&clearTimeout(d),c.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),a(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),a.vakata.context._show_submenu(this))}).on("mouseleave","li",function(b){a.contains(this,b.relatedTarget)||a(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(b){a(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),a.vakata.context.settings.hide_onmouseleave&&(d=setTimeout(function(b){return function(){a.vakata.context.hide()}}(this),a.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(b){b.preventDefault(),a(this).trigger("blur").parent().hasClass("vakata-context-disabled")||a.vakata.context._execute(a(this).attr("rel"))===!1||a.vakata.context.hide()}).on("keydown","a",function(b){var d=null;switch(b.which){case 13:case 32:b.type="click",b.preventDefault(),a(b.currentTarget).trigger(b);break;case 37:c.is_visible&&(c.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 38:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),d.addClass("vakata-context-hover").children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 39:c.is_visible&&(c.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 40:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),d.addClass("vakata-context-hover").children("a").trigger("focus"),b.stopImmediatePropagation(),b.preventDefault());break;case 27:a.vakata.context.hide(),b.preventDefault()}}).on("keydown",function(a){a.preventDefault();var b=c.element.find(".vakata-contextmenu-shortcut-"+a.which).parent();b.parent().not(".vakata-context-disabled")&&b.trigger("click")}),a(i).on("mousedown.vakata.jstree",function(b){c.is_visible&&c.element[0]!==b.target&&!a.contains(c.element[0],b.target)&&a.vakata.context.hide()}).on("context_show.vakata.jstree",function(a,d){c.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),b&&c.element.addClass("vakata-context-rtl").css("direction","rtl"),c.element.find("ul").hide().end()})})}(a),a.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0,drag_selection:!0,touch:!0,large_drop_target:!1,large_drag_target:!1,use_html5:!1};var m,n;a.jstree.plugins.dnd=function(b,c){this.init=function(a,b){c.init.call(this,a,b),this.settings.dnd.use_html5=this.settings.dnd.use_html5&&"draggable"in i.createElement("span")},this.bind=function(){c.bind.call(this),this.element.on(this.settings.dnd.use_html5?"dragstart.jstree":"mousedown.jstree touchstart.jstree",this.settings.dnd.large_drag_target?".jstree-node":".jstree-anchor",function(b){if(this.settings.dnd.large_drag_target&&a(b.target).closest(".jstree-node")[0]!==b.currentTarget)return!0;if("touchstart"===b.type&&(!this.settings.dnd.touch||"selected"===this.settings.dnd.touch&&!a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").hasClass("jstree-clicked")))return!0;var c=this.get_node(b.target),d=this.is_selected(c)&&this.settings.dnd.drag_selection?this.get_top_selected().length:1,e=d>1?d+" "+this.get_string("nodes"):this.get_text(b.currentTarget);if(this.settings.core.force_text&&(e=a.vakata.html.escape(e)),c&&c.id&&c.id!==a.jstree.root&&(1===b.which||"touchstart"===b.type||"dragstart"===b.type)&&(this.settings.dnd.is_draggable===!0||a.vakata.is_function(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,d>1?this.get_top_selected(!0):[c],b))){if(m={jstree:!0,origin:this,obj:this.get_node(c,!0),nodes:d>1?this.get_top_selected():[c.id]},n=b.currentTarget,!this.settings.dnd.use_html5)return this.element.trigger("mousedown.jstree"),a.vakata.dnd.start(b,m,'
          '+e+'+
          ');a.vakata.dnd._trigger("start",b,{helper:a(),element:n,data:m})}}.bind(this)),this.settings.dnd.use_html5&&this.element.on("dragover.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("move",b,{helper:a(),element:n,data:m}),!1}).on("drop.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("stop",b,{helper:a(),element:n,data:m}),!1}.bind(this))},this.redraw_node=function(a,b,d,e){if(a=c.redraw_node.apply(this,arguments),a&&this.settings.dnd.use_html5)if(this.settings.dnd.large_drag_target)a.setAttribute("draggable",!0);else{var f,g,h=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&h.setAttribute("draggable",!0)}return a}},a(function(){var c=!1,d=!1,e=!1,f=!1,g=a('
           
          ').hide();a(i).on("dragover.vakata.jstree",function(b){n&&a.vakata.dnd._trigger("move",b,{helper:a(),element:n,data:m})}).on("drop.vakata.jstree",function(b){n&&(a.vakata.dnd._trigger("stop",b,{helper:a(),element:n,data:m}),n=null,m=null)}).on("dnd_start.vakata.jstree",function(a,b){c=!1,e=!1,b&&b.data&&b.data.jstree&&g.appendTo(i.body)}).on("dnd_move.vakata.jstree",function(h,i){var j=i.event.target!==e.target;if(f&&(!i.event||"dragover"!==i.event.type||j)&&clearTimeout(f),i&&i.data&&i.data.jstree&&(!i.event.target.id||"jstree-marker"!==i.event.target.id)){e=i.event;var k=a.jstree.reference(i.event.target),l=!1,m=!1,n=!1,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F;if(k&&k._data&&k._data.dnd)if(g.attr("class","jstree-"+k.get_theme()+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")),D=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey)),i.helper.children().attr("class","jstree-"+k.get_theme()+" jstree-"+k.get_theme()+"-"+k.get_theme_variant()+" "+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy").first()[D?"show":"hide"](),i.event.target!==k.element[0]&&i.event.target!==k.get_container_ul()[0]||0!==k.get_container_ul().children().length){if(l=k.settings.dnd.large_drop_target?a(i.event.target).closest(".jstree-node").children(".jstree-anchor"):a(i.event.target).closest(".jstree-anchor"),l&&l.length&&l.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(m=l.offset(),n=(i.event.pageY!==b?i.event.pageY:i.event.originalEvent.pageY)-m.top,r=l.outerHeight(),u=r/3>n?["b","i","a"]:n>r-r/3?["a","i","b"]:n>r/2?["i","a","b"]:["i","b","a"],a.each(u,function(b,e){switch(e){case"b":p=m.left-6,q=m.top,s=k.get_parent(l),t=l.parent().index(),F="jstree-below";break;case"i":B=k.settings.dnd.inside_pos,C=k.get_node(l.parent()),p=m.left-2,q=m.top+r/2+1,s=C.id,t="first"===B?0:"last"===B?C.children.length:Math.min(B,C.children.length),F="jstree-inside";break;case"a":p=m.left-6,q=m.top+r,s=k.get_parent(l),t=l.parent().index()+1,F="jstree-above"}for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(y=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",z=t,"move_node"===y&&"a"===e&&i.data.origin&&i.data.origin===k&&s===k.get_parent(i.data.nodes[w])&&(A=k.get_node(s),z>a.inArray(i.data.nodes[w],A.children)&&(z-=1)),v=v&&(k&&k.settings&&k.settings.dnd&&k.settings.dnd.check_while_dragging===!1||k.check(y,i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],s,z,{dnd:!0,ref:k.get_node(l.parent()),pos:e,origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin})),!v){k&&k.last_error&&(d=k.last_error());break}return"i"===e&&l.parent().is(".jstree-closed")&&k.settings.dnd.open_timeout&&(!i.event||"dragover"!==i.event.type||j)&&(f&&clearTimeout(f),f=setTimeout(function(a,b){return function(){a.open_node(b)}}(k,l),k.settings.dnd.open_timeout)),v?(E=k.get_node(s,!0),E.hasClass(".jstree-dnd-parent")||(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),E.addClass("jstree-dnd-parent")),c={ins:k,par:s,pos:"i"!==e||"last"!==B||0!==t||k.is_loaded(C)?t:"last"},g.css({left:p+"px",top:q+"px"}).show(),g.removeClass("jstree-above jstree-inside jstree-below").addClass(F),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"),d={},u=!0,!1):void 0}),u===!0))return}else{for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(v=v&&k.check(i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],a.jstree.root,"last",{dnd:!0,ref:k.get_node(a.jstree.root),pos:"i",origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin}),!v)break;if(v)return c={ins:k,par:a.jstree.root,pos:"last"},g.hide(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),void(i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"))}a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),c=!1,i.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),i.event.originalEvent&&i.event.originalEvent.dataTransfer,g.hide()}}).on("dnd_scroll.vakata.jstree",function(a,b){b&&b.data&&b.data.jstree&&(g.hide(),c=!1,e=!1,b.helper.find(".jstree-icon").first().removeClass("jstree-ok").addClass("jstree-er"))}).on("dnd_stop.vakata.jstree",function(b,h){if(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),f&&clearTimeout(f),h&&h.data&&h.data.jstree){g.hide().detach();var i,j,k=[];if(c){for(i=0,j=h.data.nodes.length;j>i;i++)k[i]=h.data.origin?h.data.origin.get_node(h.data.nodes[i]):h.data.nodes[i];c.ins[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(h.event.metaKey||h.event.ctrlKey))?"copy_node":"move_node"](k,c.par,c.pos,!1,!1,!1,h.data.origin)}else i=a(h.event.target).closest(".jstree"),i.length&&d&&d.error&&"check"===d.error&&(i=i.jstree(!0),i&&i.settings.core.error.call(this,d));e=!1,c=!1}}).on("keyup.jstree keydown.jstree",function(b,h){h=a.vakata.dnd._get(),h&&h.data&&h.data.jstree&&("keyup"===b.type&&27===b.which?(f&&clearTimeout(f),c=!1,d=!1,e=!1,f=!1,g.hide().detach(),a.vakata.dnd._clean()):(h.helper.find(".jstree-copy").first()[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(b.metaKey||b.ctrlKey))?"show":"hide"](),e&&(e.metaKey=b.metaKey,e.ctrlKey=b.ctrlKey,a.vakata.dnd._trigger("move",e))))})}),function(a){a.vakata.html={div:a("
          "),escape:function(b){return a.vakata.html.div.text(b).html()},strip:function(b){return a.vakata.html.div.empty().append(a.parseHTML(b)).text()}};var c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1};a.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:10},_trigger:function(c,d,e){e===b&&(e=a.vakata.dnd._get()),e.event=d,a(i).triggerHandler("dnd_"+c+".vakata",e)},_get:function(){return{data:c.data,element:c.element,helper:c.helper}},_clean:function(){c.helper&&c.helper.remove(),c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1},n=null,a(i).off("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).off("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop)},_scroll:function(b){if(!c.scroll_e||!c.scroll_l&&!c.scroll_t)return c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),!1;if(!c.scroll_i)return c.scroll_i=setInterval(a.vakata.dnd._scroll,100),!1;if(b===!0)return!1;var d=c.scroll_e.scrollTop(),e=c.scroll_e.scrollLeft();c.scroll_e.scrollTop(d+c.scroll_t*a.vakata.dnd.settings.scroll_speed),c.scroll_e.scrollLeft(e+c.scroll_l*a.vakata.dnd.settings.scroll_speed),(d!==c.scroll_e.scrollTop()||e!==c.scroll_e.scrollLeft())&&a.vakata.dnd._trigger("scroll",c.scroll_e)},start:function(b,d,e){"touchstart"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag&&a.vakata.dnd.stop({});try{b.currentTarget.unselectable="on",b.currentTarget.onselectstart=function(){return!1},b.currentTarget.style&&(b.currentTarget.style.touchAction="none",b.currentTarget.style.msTouchAction="none",b.currentTarget.style.MozUserSelect="none")}catch(f){}return c.init_x=b.pageX,c.init_y=b.pageY,c.data=d,c.is_down=!0,c.element=b.currentTarget,c.target=b.target,c.is_touch="touchstart"===b.type,e!==!1&&(c.helper=a("
          ").html(e).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),a(i).on("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).on("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop),!1},drag:function(b){if("touchmove"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_down){if(!c.is_drag){if(!(Math.abs(b.pageX-c.init_x)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)||Math.abs(b.pageY-c.init_y)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)))return;c.helper&&(c.helper.appendTo(i.body),c.helper_w=c.helper.outerWidth()),c.is_drag=!0,a(c.target).one("click.vakata",!1),a.vakata.dnd._trigger("start",b)}var d=!1,e=!1,f=!1,g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n=!1;return c.scroll_t=0,c.scroll_l=0,c.scroll_e=!1,a(a(b.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(a(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var d=a(this),e=d.offset();return this.scrollHeight>this.offsetHeight&&(e.top+d.height()-b.pageYthis.offsetWidth&&(e.left+d.width()-b.pageXg&&b.pageY-kg&&g-(b.pageY-k)j&&b.pageX-lj&&j-(b.pageX-l)f&&(m=f-50),h&&n+c.helper_w>h&&(n=h-(c.helper_w+2)),c.helper.css({left:n+"px",top:m+"px"})),a.vakata.dnd._trigger("move",b),!1}},stop:function(b){if("touchend"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag)b.target!==c.target&&a(c.target).off("click.vakata"),a.vakata.dnd._trigger("stop",b);else if("touchend"===b.type&&b.target===c.target){var d=setTimeout(function(){a(b.target).trigger("click")},100);a(b.target).one("click",function(){d&&clearTimeout(d)})}return a.vakata.dnd._clean(),!1}}}(a),a.jstree.defaults.massload=null,a.jstree.plugins.massload=function(b,c){this.init=function(a,b){this._data.massload={},c.init.call(this,a,b)},this._load_nodes=function(b,d,e,f){var g=this.settings.massload,h=[],i=this._model.data,j,k,l;if(!e){for(j=0,k=b.length;k>j;j++)(!i[b[j]]||!i[b[j]].state.loaded&&!i[b[j]].state.failed||f)&&(h.push(b[j]),l=this.get_node(b[j],!0),l&&l.length&&l.addClass("jstree-loading").attr("aria-busy",!0));if(this._data.massload={},h.length){if(a.vakata.is_function(g))return g.call(this,h,function(a){var g,h;if(a)for(g in a)a.hasOwnProperty(g)&&(this._data.massload[g]=a[g]);for(g=0,h=b.length;h>g;g++)l=this.get_node(b[g],!0),l&&l.length&&l.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)}.bind(this));if("object"==typeof g&&g&&g.url)return g=a.extend(!0,{},g),a.vakata.is_function(g.url)&&(g.url=g.url.call(this,h)),a.vakata.is_function(g.data)&&(g.data=g.data.call(this,h)),a.ajax(g).done(function(a,g,h){var i,j;if(a)for(i in a)a.hasOwnProperty(i)&&(this._data.massload[i]=a[i]);for(i=0,j=b.length;j>i;i++)l=this.get_node(b[i],!0),l&&l.length&&l.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)}.bind(this)).fail(function(a){c._load_nodes.call(this,b,d,e,f)}.bind(this))}}return c._load_nodes.call(this,b,d,e,f)},this._load_node=function(b,d){var e=this._data.massload[b.id],f=null,g;return e?(f=this["string"==typeof e?"_append_html_data":"_append_json_data"](b,"string"==typeof e?a(a.parseHTML(e)).filter(function(){return 3!==this.nodeType}):e,function(a){d.call(this,a)}),g=this.get_node(b.id,!0),g&&g.length&&g.removeClass("jstree-loading").attr("aria-busy",!1),delete this._data.massload[b.id],f):c._load_node.call(this,b,d)}},a.jstree.defaults.search={ajax:!1,fuzzy:!1,case_sensitive:!1,show_only_matches:!1,show_only_matches_children:!1,close_opened_onclear:!0,search_leaves_only:!1,search_callback:!1},a.jstree.plugins.search=function(c,d){this.bind=function(){d.bind.call(this),this._data.search.str="",this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=!1,this._data.search.smc=!1,this._data.search.hdn=[],this.element.on("search.jstree",function(b,c){if(this._data.search.som&&c.res.length){var d=this._model.data,e,f,g=[],h,i;for(e=0,f=c.res.length;f>e;e++)if(d[c.res[e]]&&!d[c.res[e]].state.hidden&&(g.push(c.res[e]),g=g.concat(d[c.res[e]].parents),this._data.search.smc))for(h=0,i=d[c.res[e]].children_d.length;i>h;h++)d[d[c.res[e]].children_d[h]]&&!d[d[c.res[e]].children_d[h]].state.hidden&&g.push(d[c.res[e]].children_d[h]);g=a.vakata.array_remove_item(a.vakata.array_unique(g),a.jstree.root),this._data.search.hdn=this.hide_all(!0),this.show_node(g,!0),this.redraw(!0)}}.bind(this)).on("clear_search.jstree",function(a,b){this._data.search.som&&b.res.length&&(this.show_node(this._data.search.hdn,!0),this.redraw(!0))}.bind(this))},this.search=function(c,d,e,f,g,h){if(c===!1||""===a.vakata.trim(c.toString()))return this.clear_search();f=this.get_node(f),f=f&&f.id?f.id:null,c=c.toString();var i=this.settings.search,j=i.ajax?i.ajax:!1,k=this._model.data,l=null,m=[],n=[],o,p;if(this._data.search.res.length&&!g&&this.clear_search(),e===b&&(e=i.show_only_matches),h===b&&(h=i.show_only_matches_children),!d&&j!==!1)return a.vakata.is_function(j)?j.call(this,c,function(b){b&&b.d&&(b=b.d),this._load_nodes(a.vakata.is_array(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})}.bind(this),f):(j=a.extend({},j),j.data||(j.data={}),j.data.str=c,f&&(j.data.inside=f),this._data.search.lastRequest&&this._data.search.lastRequest.abort(),this._data.search.lastRequest=a.ajax(j).fail(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(j)},this.settings.core.error.call(this,this._data.core.last_error)}.bind(this)).done(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.vakata.is_array(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})}.bind(this)),this._data.search.lastRequest);if(g||(this._data.search.str=c,this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=e,this._data.search.smc=h),l=new a.vakata.search(c,!0,{caseSensitive:i.case_sensitive,fuzzy:i.fuzzy}),a.each(k[f?f:a.jstree.root].children_d,function(a,b){var d=k[b];d.text&&!d.state.hidden&&(!i.search_leaves_only||d.state.loaded&&0===d.children.length)&&(i.search_callback&&i.search_callback.call(this,c,d)||!i.search_callback&&l.search(d.text).isMatch)&&(m.push(b),n=n.concat(d.parents))}),m.length){for(n=a.vakata.array_unique(n),o=0,p=n.length;p>o;o++)n[o]!==a.jstree.root&&k[n[o]]&&this.open_node(n[o],null,0)===!0&&this._data.search.opn.push(n[o]);g?(this._data.search.dom=this._data.search.dom.add(a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #")))),this._data.search.res=a.vakata.array_unique(this._data.search.res.concat(m))):(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.res=m),this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:c,res:this._data.search.res,show_only_matches:e})},this.clear_search=function(){this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.res.length&&(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(this._data.search.res,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search")),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=a()},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments),b&&-1!==a.inArray(b.id,this._data.search.res)){var g,h,i=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(i.className+=" jstree-search")}return b}},function(a){a.vakata.search=function(b,c,d){d=d||{},d=a.extend({},a.vakata.search.defaults,d),d.fuzzy!==!1&&(d.fuzzy=!0),b=d.caseSensitive?b:b.toLowerCase();var e=d.location,f=d.distance,g=d.threshold,h=b.length,i,j,k,l;return h>32&&(d.fuzzy=!1),d.fuzzy&&(i=1<c;c++)a[b.charAt(c)]=0;for(c=0;h>c;c++)a[b.charAt(c)]|=1<c;c++){o=0,p=q;while(p>o)k(c,e+p)<=m?o=p:q=p,p=Math.floor((q-o)/2+o);for(q=p,s=Math.max(1,e-p+1),t=Math.min(e+p,l)+h,u=new Array(t+2),u[t+1]=(1<=s;f--)if(v=j[a.charAt(f-1)],0===c?u[f]=(u[f+1]<<1|1)&v:u[f]=(u[f+1]<<1|1)&v|((r[f+1]|r[f])<<1|1)|r[f+1],u[f]&i&&(w=k(c,f-1),m>=w)){if(m=w,n=f-1,x.push(n),!(n>e))break;s=Math.max(1,2*e-n)}if(k(c+1,e)>m)break;r=u}return{isMatch:n>=0,score:w}},c===!0?{search:l}:l(c)},a.vakata.search.defaults={location:0,distance:100,threshold:.6,fuzzy:!1,caseSensitive:!1}}(a),a.jstree.defaults.sort=function(a,b){return this.get_text(a)>this.get_text(b)?1:-1},a.jstree.plugins.sort=function(a,b){this.bind=function(){b.bind.call(this),this.element.on("model.jstree",function(a,b){this.sort(b.parent,!0)}.bind(this)).on("rename_node.jstree create_node.jstree",function(a,b){this.sort(b.parent||b.node.parent,!1),this.redraw_node(b.parent||b.node.parent,!0)}.bind(this)).on("move_node.jstree copy_node.jstree",function(a,b){this.sort(b.parent,!1),this.redraw_node(b.parent,!0)}.bind(this))},this.sort=function(a,b){var c,d;if(a=this.get_node(a),a&&a.children&&a.children.length&&(a.children.sort(this.settings.sort.bind(this)),b))for(c=0,d=a.children_d.length;d>c;c++)this.sort(a.children_d[c],!1)}};var o=!1;a.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree",ttl:!1,filter:!1,preserve_loaded:!1},a.jstree.plugins.state=function(b,c){this.bind=function(){c.bind.call(this);var a=function(){this.element.on(this.settings.state.events,function(){o&&clearTimeout(o),o=setTimeout(function(){this.save_state()}.bind(this),100)}.bind(this)),this.trigger("state_ready")}.bind(this);this.element.on("ready.jstree",function(b,c){this.element.one("restore_state.jstree",a),this.restore_state()||a()}.bind(this))},this.save_state=function(){var b=this.get_state();this.settings.state.preserve_loaded||delete b.core.loaded;var c={state:b,ttl:this.settings.state.ttl,sec:+new Date};a.vakata.storage.set(this.settings.state.key,JSON.stringify(c))},this.restore_state=function(){var b=a.vakata.storage.get(this.settings.state.key);if(b)try{b=JSON.parse(b)}catch(c){return!1}return b&&b.ttl&&b.sec&&+new Date-b.sec>b.ttl?!1:(b&&b.state&&(b=b.state),b&&a.vakata.is_function(this.settings.state.filter)&&(b=this.settings.state.filter.call(this,b)),b?(this.settings.state.preserve_loaded||delete b.core.loaded,this.element.one("set_state.jstree",function(c,d){d.instance.trigger("restore_state",{state:a.extend(!0,{},b)})}),this.set_state(b),!0):!1)},this.clear_state=function(){return a.vakata.storage.del(this.settings.state.key)}},function(a,b){a.vakata.storage={set:function(a,b){return window.localStorage.setItem(a,b)},get:function(a){return window.localStorage.getItem(a)},del:function(a){return window.localStorage.removeItem(a)}}}(a),a.jstree.defaults.types={ -"default":{}},a.jstree.defaults.types[a.jstree.root]={},a.jstree.plugins.types=function(c,d){this.init=function(c,e){var f,g;if(e&&e.types&&e.types["default"])for(f in e.types)if("default"!==f&&f!==a.jstree.root&&e.types.hasOwnProperty(f))for(g in e.types["default"])e.types["default"].hasOwnProperty(g)&&e.types[f][g]===b&&(e.types[f][g]=e.types["default"][g]);d.init.call(this,c,e),this._model.data[a.jstree.root].type=a.jstree.root},this.refresh=function(b,c){d.refresh.call(this,b,c),this._model.data[a.jstree.root].type=a.jstree.root},this.bind=function(){this.element.on("model.jstree",function(c,d){var e=this._model.data,f=d.nodes,g=this.settings.types,h,i,j="default",k;for(h=0,i=f.length;i>h;h++){if(j="default",e[f[h]].original&&e[f[h]].original.type&&g[e[f[h]].original.type]&&(j=e[f[h]].original.type),e[f[h]].data&&e[f[h]].data.jstree&&e[f[h]].data.jstree.type&&g[e[f[h]].data.jstree.type]&&(j=e[f[h]].data.jstree.type),e[f[h]].type=j,e[f[h]].icon===!0&&g[j].icon!==b&&(e[f[h]].icon=g[j].icon),g[j].li_attr!==b&&"object"==typeof g[j].li_attr)for(k in g[j].li_attr)if(g[j].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].li_attr[k]===b?e[f[h]].li_attr[k]=g[j].li_attr[k]:"class"===k&&(e[f[h]].li_attr["class"]=g[j].li_attr["class"]+" "+e[f[h]].li_attr["class"])}if(g[j].a_attr!==b&&"object"==typeof g[j].a_attr)for(k in g[j].a_attr)if(g[j].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].a_attr[k]===b?e[f[h]].a_attr[k]=g[j].a_attr[k]:"href"===k&&"#"===e[f[h]].a_attr[k]?e[f[h]].a_attr.href=g[j].a_attr.href:"class"===k&&(e[f[h]].a_attr["class"]=g[j].a_attr["class"]+" "+e[f[h]].a_attr["class"])}}e[a.jstree.root].type=a.jstree.root}.bind(this)),d.bind.call(this)},this.get_json=function(b,c,e){var f,g,h=this._model.data,i=c?a.extend(!0,{},c,{no_id:!1}):{},j=d.get_json.call(this,b,i,e);if(j===!1)return!1;if(a.vakata.is_array(j))for(f=0,g=j.length;g>f;f++)j[f].type=j[f].id&&h[j[f].id]&&h[j[f].id].type?h[j[f].id].type:"default",c&&c.no_id&&(delete j[f].id,j[f].li_attr&&j[f].li_attr.id&&delete j[f].li_attr.id,j[f].a_attr&&j[f].a_attr.id&&delete j[f].a_attr.id);else j.type=j.id&&h[j.id]&&h[j.id].type?h[j.id].type:"default",c&&c.no_id&&(j=this._delete_ids(j));return j},this._delete_ids=function(b){if(a.vakata.is_array(b)){for(var c=0,d=b.length;d>c;c++)b[c]=this._delete_ids(b[c]);return b}return delete b.id,b.li_attr&&b.li_attr.id&&delete b.li_attr.id,b.a_attr&&b.a_attr.id&&delete b.a_attr.id,b.children&&a.vakata.is_array(b.children)&&(b.children=this._delete_ids(b.children)),b},this.check=function(c,e,f,g,h){if(d.check.call(this,c,e,f,g,h)===!1)return!1;e=e&&e.id?e:this.get_node(e),f=f&&f.id?f:this.get_node(f);var i=e&&e.id?h&&h.origin?h.origin:a.jstree.reference(e.id):null,j,k,l,m;switch(i=i&&i._model&&i._model.data?i._model.data:null,c){case"create_node":case"move_node":case"copy_node":if("move_node"!==c||-1===a.inArray(e.id,f.children)){if(j=this.get_rules(f),j.max_children!==b&&-1!==j.max_children&&j.max_children===f.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(j.valid_children!==b&&-1!==j.valid_children&&-1===a.inArray(e.type||"default",j.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(i&&e.children_d&&e.parents){for(k=0,l=0,m=e.children_d.length;m>l;l++)k=Math.max(k,i[e.children_d[l]].parents.length);k=k-e.parents.length+1}(0>=k||k===b)&&(k=1);do{if(j.max_depth!==b&&-1!==j.max_depth&&j.max_depthg;g++)this.set_type(c[g],d);return!0}if(f=this.settings.types,c=this.get_node(c),!f[d]||!c)return!1;if(l=this.get_node(c,!0),l&&l.length&&(m=l.children(".jstree-anchor")),i=c.type,j=this.get_icon(c),c.type=d,(j===!0||!f[i]||f[i].icon!==b&&j===f[i].icon)&&this.set_icon(c,f[d].icon!==b?f[d].icon:!0),f[i]&&f[i].li_attr!==b&&"object"==typeof f[i].li_attr)for(k in f[i].li_attr)if(f[i].li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].li_attr["class"]=(e[c.id].li_attr["class"]||"").replace(f[i].li_attr[k],""),l&&l.removeClass(f[i].li_attr[k])):e[c.id].li_attr[k]===f[i].li_attr[k]&&(e[c.id].li_attr[k]=null,l&&l.removeAttr(k))}if(f[i]&&f[i].a_attr!==b&&"object"==typeof f[i].a_attr)for(k in f[i].a_attr)if(f[i].a_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].a_attr["class"]=(e[c.id].a_attr["class"]||"").replace(f[i].a_attr[k],""),m&&m.removeClass(f[i].a_attr[k])):e[c.id].a_attr[k]===f[i].a_attr[k]&&("href"===k?(e[c.id].a_attr[k]="#",m&&m.attr("href","#")):(delete e[c.id].a_attr[k],m&&m.removeAttr(k)))}if(f[d].li_attr!==b&&"object"==typeof f[d].li_attr)for(k in f[d].li_attr)if(f[d].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].li_attr[k]===b?(e[c.id].li_attr[k]=f[d].li_attr[k],l&&("class"===k?l.addClass(f[d].li_attr[k]):l.attr(k,f[d].li_attr[k]))):"class"===k&&(e[c.id].li_attr["class"]=f[d].li_attr[k]+" "+e[c.id].li_attr["class"],l&&l.addClass(f[d].li_attr[k]))}if(f[d].a_attr!==b&&"object"==typeof f[d].a_attr)for(k in f[d].a_attr)if(f[d].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].a_attr[k]===b?(e[c.id].a_attr[k]=f[d].a_attr[k],m&&("class"===k?m.addClass(f[d].a_attr[k]):m.attr(k,f[d].a_attr[k]))):"href"===k&&"#"===e[c.id].a_attr[k]?(e[c.id].a_attr.href=f[d].a_attr.href,m&&m.attr("href",f[d].a_attr.href)):"class"===k&&(e[c.id].a_attr["class"]=f[d].a_attr["class"]+" "+e[c.id].a_attr["class"],m&&m.addClass(f[d].a_attr[k]))}return!0}},a.jstree.defaults.unique={case_sensitive:!1,trim_whitespace:!1,duplicate:function(a,b){return a+" ("+b+")"}},a.jstree.plugins.unique=function(c,d){this.check=function(b,c,e,f,g){if(d.check.call(this,b,c,e,f,g)===!1)return!1;if(c=c&&c.id?c:this.get_node(c),e=e&&e.id?e:this.get_node(e),!e||!e.children)return!0;var h="rename_node"===b?f:c.text,i=[],j=this.settings.unique.case_sensitive,k=this.settings.unique.trim_whitespace,l=this._model.data,m,n,o;for(m=0,n=e.children.length;n>m;m++)o=l[e.children[m]].text,j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),i.push(o);switch(j||(h=h.toLowerCase()),k&&(h=h.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),b){case"delete_node":return!0;case"rename_node":return o=c.text||"",j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),m=-1===a.inArray(h,i)||c.text&&o===h,m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"create_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"copy_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"move_node":return m=c.parent===e.id&&(!g||!g.is_multi)||-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m}return!0},this.create_node=function(c,e,f,g,h){if(!e||e.text===b){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return d.create_node.call(this,c,e,f,g,h);if(f=f===b?"last":f,!f.toString().match(/^(before|after)$/)&&!h&&!this.is_loaded(c))return d.create_node.call(this,c,e,f,g,h);e||(e={});var i,j,k,l,m,n=this._model.data,o=this.settings.unique.case_sensitive,p=this.settings.unique.trim_whitespace,q=this.settings.unique.duplicate,r;for(j=i=this.get_string("New node"),k=[],l=0,m=c.children.length;m>l;l++)r=n[c.children[l]].text,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),k.push(r);l=1,r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));while(-1!==a.inArray(r,k))j=q.call(this,i,++l).toString(),r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));e.text=j}return d.create_node.call(this,c,e,f,g,h)}};var p=i.createElement("DIV");if(p.setAttribute("unselectable","on"),p.setAttribute("role","presentation"),p.className="jstree-wholerow",p.innerHTML=" ",a.jstree.plugins.wholerow=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("ready.jstree set_state.jstree",function(){this.hide_dots()}.bind(this)).on("init.jstree loading.jstree ready.jstree",function(){this.get_container_ul().addClass("jstree-wholerow-ul")}.bind(this)).on("deselect_all.jstree",function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")}.bind(this)).on("changed.jstree",function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var c=!1,d,e;for(d=0,e=b.selected.length;e>d;d++)c=this.get_node(b.selected[d],!0),c&&c.length&&c.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")}.bind(this)).on("open_node.jstree",function(a,b){this.get_node(b.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")}.bind(this)).on("hover_node.jstree dehover_node.jstree",function(a,b){"hover_node"===a.type&&this.is_disabled(b.node)||this.get_node(b.node,!0).children(".jstree-wholerow")["hover_node"===a.type?"addClass":"removeClass"]("jstree-wholerow-hovered")}.bind(this)).on("contextmenu.jstree",".jstree-wholerow",function(b){if(this._data.contextmenu){b.preventDefault();var c=a.Event("contextmenu",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,pageX:b.pageX,pageY:b.pageY});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c)}}.bind(this)).on("click.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).trigger("focus")}).on("dblclick.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("dblclick",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).trigger("focus")}).on("click.jstree",".jstree-leaf > .jstree-ocl",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).trigger("focus")}.bind(this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",function(a){return a.stopImmediatePropagation(),this.is_disabled(a.currentTarget)||this.hover_node(a.currentTarget),!1}.bind(this)).on("mouseleave.jstree",".jstree-node",function(a){this.dehover_node(a.currentTarget)}.bind(this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),c.teardown.call(this)},this.redraw_node=function(b,d,e,f){if(b=c.redraw_node.apply(this,arguments)){var g=p.cloneNode(!0);-1!==a.inArray(b.id,this._data.core.selected)&&(g.className+=" jstree-wholerow-clicked"),this._data.core.focused&&this._data.core.focused===b.id&&(g.className+=" jstree-wholerow-hovered"),b.insertBefore(g,b.childNodes[0])}return b}},window.customElements&&Object&&Object.create){var q=Object.create(HTMLElement.prototype);q.createdCallback=function(){var b={core:{},plugins:[]},c;for(c in a.jstree.plugins)a.jstree.plugins.hasOwnProperty(c)&&this.attributes[c]&&(b.plugins.push(c),this.getAttribute(c)&&JSON.parse(this.getAttribute(c))&&(b[c]=JSON.parse(this.getAttribute(c))));for(c in a.jstree.defaults.core)a.jstree.defaults.core.hasOwnProperty(c)&&this.attributes[c]&&(b.core[c]=JSON.parse(this.getAttribute(c))||this.getAttribute(c));a(this).jstree(b)};try{window.customElements.define("vakata-jstree",function(){},{prototype:q})}catch(r){}}}}); \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/32px.png b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/32px.png deleted file mode 100644 index 60395729ef6cfda914b211d5a45c9d2c083b3175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1525 zcmVx=)z#Iou&|Pnl0QE`#>U2ri;Ey2AZTc4hK7d2!^8jo|LExGnVFgL^78xp`|9fI z{{H^%?(X*X_U!EJ`1ttr^z`-h_21v$+uPgY%*@Ql$jFb6k9c@^bbCf0 z0000UbW%=J05J?b7$qwPPhmTy5d)-?xp^Mm+qHy5%#b-oX_@#U>G}Ww1nNmdK~#9! z?VAfz;xH72Nz$||!ongb>TW_>N?RW4>i_?5dkfnECVkjIX4-l`ADw#akseRQ#%u4! zEU(s^P17GAf(=CKfepk4b_;A^Q}G;^oNyiQraC}50XXf|q%93}?!-BF&P{cI9|d>R z(FVGrPfqlOYpxI20Q7OqRZ3Za*8Hyzun*QhRscKzVy}UKQ+R&yMyVt&ZQ$iguK&kL&-MSz z(+T9N?OlF^`0GuglFiyDd3xXX<9HqWjOHGniWzb2n>El+VYDber6MUKRTiK%f8vwN zJzXbBB=_6Bj1rQk4_J~Yl`xur{91)UMyS?i4U9LNxbO;d0zkqW*ERe8WKAyjbe)89 zyL;VjWk_;$%EB;YwBY#k;0&-ZYoJo9T5Nse)7i=Iluv=gQ8_Mn10~?Bk2HKeq{B8}j zJ0EEK4;Q**-mr52?0Eb0fwme5_WX+ZJ`4V~<^%0O2cp=Ui0TBF75<+U{vSQS{(PXV z279k`~+7i1|2l;w?7|f0Y_AvV4NtG z%~w^91nT-n=3k(HYX0`-11&YsPbm)YIKQV1I%wc;dp^(xl%*4Vh2H!yzy~&Jm#?G5lt`K_QK_m1`>Y%G9zeYkF!fS_S+g@ z37$I-rIf+!v7mpyXPYqEFQQPbCq_>qYZV>=hqeZ|EK88j11V?EG+!RxDHTRfYz_%3 zZW5phW<=s1d=rj*ZNW7NPt!TO<+DiD)sH(K{g+ZH(T_ z45I`yck;d8m+#)YzIFe)d!2Qj{ha+fd#(N3&pzio=asRc7B$6R6aWB#T1Q*m1phn) z00@xeM0l-2m@XLrAj~(`H`BnsN=r*;XJ@ait*x)GZ)|LAZfMU9v-4lC^Q;S%y*(adW@ct+XlP_)WNd8w@Zm!f6BAQYQ~coH z6Y*d?Mo&*qUthnpwDiM=4@E^q`2O|l*R!*;^Yily3k!>ji%UyO%gf6vD=UA9#j}d1 z6wfD~Ogxi+)A%=se+b00htI{AFJJJU%gV~i%gZY&Dk>{0tE#H1tE+2jYHDk1zkdB% zS6BD#+qe4q`i6#v#>U2`rl#iR=I`IXx3siCAduG9*0#2`_V#ut6bggEIyyQ!J3G6& zy1Ki&dwP0$dwcu(`uh9(2L=WP2M33ShK7fSM@B|QM@PrT#(w z$*HNS>FH@W96mEMgO6@*Ztm{@5eNi6MkEsXC(PB=)jyH`e|}^@qa4+2Ft<228qqUY^)|F>TY(tJ|ur<_zu6DxmLRe~OiLkgVYp*qdOT5z9yFr4Y zhlPV}V|Jc83#p%5CKaw?pXr4f;*RqsHjejTK^v(v*S1m~Czsl1q#rYU?wPhS_HSkI7 z9<|LA8U=D3j4PvMYwKJ7CTZJhq%{m2eVK}OiK6juJYRwy*;%K4Sm1B z{t3Rjq#^6F_8puu?C7VCB8gbzEjH$TQd|dkTiIRPsTczvW$yvO`JdMv%d>UY&4LWM$Pnq1MQ&R2xb&;!`;8M4Rn9E?azP8UHdV`eD742=vGS`>FluvU(0ET|bddrv=WR7$oz1T6 zzwhFIlWwp6;G$IfzR;vitlBh16jz+z6v9jQd)l?Gno;qyFYEWw^Vep6Q8L`HGkxi6 z2JN%HsMZ!TFUg9RQg964D#=kgTz^)a6RqF%rn-oZP11J?rl*_G5KGQ;JDz6N;jCPM zwxabXnutN_WZafuFv0;eg~yw@&(%g zYrT!4n70OdZ`p_&T*LRN)+$`QfY-~0q4C}`7*qY>ln16y%{$=4^i2d zav(n4(~PI8fxpa`?vb;S<{IWV_|Tf#aW;K*0P$(8IT|2oST3qHmJlZ1x@RcU>ei0t zkM|z=Zg`#ac1~uJRqZj&(@#ENq4#To2Pj_#>(y&4Pf1tf40Suqwo|6}Y&$JHh^D2Z zj$*SYb;u;*LVZdfk0ZQDrJcRlA zRJ?l&tW{-gQ+rt*p?aCgC?h51COhiQL+6CN+OV|mPPkIhBwpll>duCzV1m?3qh3OC@;*{i4gez)Ib!G-#U7Vf9D zyhQBOCzd%p;+B2LCD-?jr{N233kZj>bXpP!JR9Xnhx&NLa^($LiNCHJ!?JMOo|^kJ zTf6O$u^>{5>tF~h6K@r|6Oia*t{vLs$EJSCjfz_GB6=7^M{$O)M6_VnIb`wiGi|Lc zr7;bT>AK=7=kQT2ag~DOnNQ)Y<2849Y7d;Q-K5t0$dEi-bEm^XS#zVamhqG$Zbfik z85LjDG^#HWwj5?U2!D0aZf6sp*@WvSk{Gk?Rp_xin2EZ|zcSu*B)Qi=wZPBS!k12a zTZ2GJ26y};gIJxI=j3zm6PRwZ+m~$${?8qxM#HLp5WY%g`bY$14MVMPng_INEjnH5 zK6kfY-g{gF&vBP{N2dbSgc}4s!)~$M_>n_Q`Rybnpqde3Do6LA?;pb--4LmC6iFlD zt1GXKg_;hjWF2Gv!uu%69KeX)2GH|90v@iItAX~}DzszRej8{qIS_f+1gVvd-ZsQp zdY<1Fs)fommh~UDP=|Gc()U!7M;}zHQ#(*J7W%O)c!K~f;~_*GI@@tn%yW=51E zg7?Y57!O1aw~9Sz82C_dHo$%RbJZC}7k4@0e*&cC&Sr`%755*)8q-fN{ia73*l=vJ>hU#cET)a;ZS21rDkPQMy{+q zKi}*MysQqjP?7eR zZ`~MP9cesZBn{+$K(P-d%`L(#DS@u;uHB9^=AOvX9lqQ$T*7iQY44u_;-)_xLFb0q zszxikW#lcnUzTvB8#_KIT`jwkwaUh z>hXSCA$~pO!9*F=pC7&33gkdYNi(g_n6#y!JRPe)KKk6K6kT$C;Mx&ea){Wz00Tf8`D|`=KvM@^$?75k$O{uXDMZONuy6-pS9jjsIr{TG>EsgiUsFT9S7@=zao_c{8@_?#ry`m=hFVhavGM$^9Po*jia;}1V z4;V&)3bsZ}N>~IIStgYWd&B_=g<&2$$r5!z=UC>mm>*@pp`-dKs9Dx+Kz3K!Vq7yCqP`ufHt16kF32Eu3>c>3LvLTv{ob$jTI zHO!Uam}5Vmm6%Qv;UNi)Jx?h>lWcDwcS2Ry!IzP(;5X#L5J|sIsHs=j64%L+PV5qg zw|BKnunZECLNuB_LR1#7eW#@qf8XbUfKhWa-*V(=5SdE=r!R`1Y#Q&;25 zZw={!KJvz~jd|%+YyMI93BY#HJnok!u^w}M*e|ETR=wi#-5-N0BL|14A7IAz_aJRqB zed{N>+j`pjQSxQ0nZ;0+g6Xku7RuCK5D65v7S3!&uHg)`hTQs|bH2OrIBTNc=V@?h zhgRUt1!d6!ppYU2D4xyl^0e-rxZ|zQrUHqGuVr8fiBFUOd9Ss1$c`DF4{yxIb%lzp zcxqi9bz}Q%Zxjqt?!?OZPHi8&OO4W-RH^5tlj_VW$hNEZ39RgL30zV}N9198gq+RR zfn^!4{pwv*e!?(PvCb3I4@iy9jJWttT-CNPaFh9I6@!+EB zOF$q!_?WJbV5*;9g-T%?tw~e0yP};5!p415fl2}SIhD3I4p^SY$XG@HX{vrvPwNURn}FkOksJO6HOV2{Mf^I`-Zo$G7cKcarafXi4PYS3I+ zW?gIpeN9W)AI?N>C2S^Y(vVn+f`QJfM}jV9U%v+AJm+gP-y4+$twb-O9Twt^xvEwh zK5Q56A%Bs<@X-(g`@J5Ei={o&nZRSlMKCKvMCICF0Ls*QFNlZHqp zotNB44kS{jFRSeg0EMHcX4COdw1c;5QwDB;SWen)ZnZ*X1az+0a=aK3?d1IeirQElA~rwBaHtQkD%IALvOp3=bjKyoK*6V@Z2yAn$qqJ~jTY9uhh@!_I!4c}e1V z+7y1n`nw@@h=U7{#Wu;4h2U#;XHxC-2(rAOM!$sulJMcs3h1LJw(a|!%9;4R$K?aG zG~g7AF25v>G?w4l@N;g`}4(Cg= zm`l>@rrb@{DQ6m5CfyhNyu=IH-m<;FI#G6K>y5t69swsq2(KqS^M||eceYu-jE&@!Bf*j8mrz3=&~7Z>&7eqX2B|0G$|Hw-LuZls_DDI+CV{MO znj!gv6i$7%l`K?^Lric~bB<^YTPOLc=XjSJRUBW*^b4La0a|5VQFSVJo9iU}QzEM1 z1EXFBC7JYhny14I{g0*X9sM*h1A3nO@W)*gLz5$0CdsA6^4{1BT+cP2(vQY&v~wO* zN+k%lB&)GQUdlb#Hm$^jDy5m!DX9 zC6E{id$;$Pa(NF4XB_G)L2T(Jd$w-U@aICJ zEdtK;FHk(Do?Hn5!Gc1$1VD;JE3Oy#tAdeItqYT(=dwwB6#>i^NsM4e315qnrnEV0 zt0u>4!~$n`WboA^x&YMv5hRhbYi=Jy_Tu%yT|_`_wVX?weEqK6g1^t`yq0%p7Xdgp zLZqZ6H}vA*h&5e~+$R8pdER*Q#p$nwZqDU<5IY!VVj%~7$KLU}T^9`863JfDVqPn8 zuusrM5U2>F0EE45d)WU2-t$l{igc#e3*0=j?kuFG#!g`yQa>_$UT?y&T#R%UX?WcAvSnVL??K$nN1omq zZl@9U2!sI5(N?*df5g@{0izm$o>EGiaLl{(7aCog%f+3BriS-;dXlbAGNWbM&yShJ z-N>?PMaWQYas~>48vQ|bBycS&)z~SXB@; zGf)9+P4RH&kvjLiBCL_7W87|Vv^gI4^xBW?`>FA4%gglhlx;d9Pmp5@I@T;ipFC9+ zQtrEQ)ZQgk{9v<1Y5T^5m?{?g#k7up#A|8#3zFJ z?tXLF4>>3uTM}QYz+MZ{)H@rI%(lg{JDZ+PCEk!1nh7>yT`|tD>Z9))DG3ke7Zxb+ zHkm3~U1y7xs$Y2*S~4i{Gd#tFd|%sKMAUz_ExNEkh1aW|E?Vdl)zW(sz}c#Mi6wEs zElUdS+thvv{_WTDv&LX!(xMuqa`=a~LG*A*X)z`2?Wuwdruyyf|a zsSo{}CT)bv1FGQ7H92=8Y)2~!81o*`=jtkd^<3l``GdsYmp2>sI=+4zJ11lxzlgh6RslrzUWOj#?QBaz!MO8j2NL_b z#e=ZnoR)VL@z~*cR{cNwZR#Erg3+`OQrK&vdZDp|lLyq5<(>fZ4>Q!ovQU3+` C_#XrS diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.css b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.css deleted file mode 100644 index d255ca3896..0000000000 --- a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.css +++ /dev/null @@ -1,1150 +0,0 @@ -/* jsTree default dark theme */ -.jstree-node, -.jstree-children, -.jstree-container-ul { - display: block; - margin: 0; - padding: 0; - list-style-type: none; - list-style-image: none; -} -.jstree-node { - white-space: nowrap; -} -.jstree-anchor { - display: inline-block; - color: black; - white-space: nowrap; - padding: 0 4px 0 1px; - margin: 0; - vertical-align: top; -} -.jstree-anchor:focus { - outline: 0; -} -.jstree-anchor, -.jstree-anchor:link, -.jstree-anchor:visited, -.jstree-anchor:hover, -.jstree-anchor:active { - text-decoration: none; - color: inherit; -} -.jstree-icon { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0; - vertical-align: top; - text-align: center; -} -.jstree-icon:empty { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0; - vertical-align: top; - text-align: center; -} -.jstree-ocl { - cursor: pointer; -} -.jstree-leaf > .jstree-ocl { - cursor: default; -} -.jstree .jstree-open > .jstree-children { - display: block; -} -.jstree .jstree-closed > .jstree-children, -.jstree .jstree-leaf > .jstree-children { - display: none; -} -.jstree-anchor > .jstree-themeicon { - margin-right: 2px; -} -.jstree-no-icons .jstree-themeicon, -.jstree-anchor > .jstree-themeicon-hidden { - display: none; -} -.jstree-hidden, -.jstree-node.jstree-hidden { - display: none; -} -.jstree-rtl .jstree-anchor { - padding: 0 1px 0 4px; -} -.jstree-rtl .jstree-anchor > .jstree-themeicon { - margin-left: 2px; - margin-right: 0; -} -.jstree-rtl .jstree-node { - margin-left: 0; -} -.jstree-rtl .jstree-container-ul > .jstree-node { - margin-right: 0; -} -.jstree-wholerow-ul { - position: relative; - display: inline-block; - min-width: 100%; -} -.jstree-wholerow-ul .jstree-leaf > .jstree-ocl { - cursor: pointer; -} -.jstree-wholerow-ul .jstree-anchor, -.jstree-wholerow-ul .jstree-icon { - position: relative; -} -.jstree-wholerow-ul .jstree-wholerow { - width: 100%; - cursor: pointer; - position: absolute; - left: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.jstree-contextmenu .jstree-anchor { - -webkit-user-select: none; - /* disable selection/Copy of UIWebView */ - -webkit-touch-callout: none; - /* disable the IOS popup when long-press on a link */ - user-select: none; -} -.vakata-context { - display: none; -} -.vakata-context, -.vakata-context ul { - margin: 0; - padding: 2px; - position: absolute; - background: #f5f5f5; - border: 1px solid #979797; - box-shadow: 2px 2px 2px #999999; -} -.vakata-context ul { - list-style: none; - left: 100%; - margin-top: -2.7em; - margin-left: -4px; -} -.vakata-context .vakata-context-right ul { - left: auto; - right: 100%; - margin-left: auto; - margin-right: -4px; -} -.vakata-context li { - list-style: none; -} -.vakata-context li > a { - display: block; - padding: 0 2em 0 2em; - text-decoration: none; - width: auto; - color: black; - white-space: nowrap; - line-height: 2.4em; - text-shadow: 1px 1px 0 white; - border-radius: 1px; -} -.vakata-context li > a:hover { - position: relative; - background-color: #e8eff7; - box-shadow: 0 0 2px #0a6aa1; -} -.vakata-context li > a.vakata-context-parent { - background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); - background-position: right center; - background-repeat: no-repeat; -} -.vakata-context li > a:focus { - outline: 0; -} -.vakata-context .vakata-context-no-icons { - margin-left: 0; -} -.vakata-context .vakata-context-hover > a { - position: relative; - background-color: #e8eff7; - box-shadow: 0 0 2px #0a6aa1; -} -.vakata-context .vakata-context-separator > a, -.vakata-context .vakata-context-separator > a:hover { - background: white; - border: 0; - border-top: 1px solid #e2e3e3; - height: 1px; - min-height: 1px; - max-height: 1px; - padding: 0; - margin: 0 0 0 2.4em; - border-left: 1px solid #e0e0e0; - text-shadow: 0 0 0 transparent; - box-shadow: 0 0 0 transparent; - border-radius: 0; -} -.vakata-context .vakata-contextmenu-disabled a, -.vakata-context .vakata-contextmenu-disabled a:hover { - color: silver; - background-color: transparent; - border: 0; - box-shadow: 0 0 0; -} -.vakata-context .vakata-contextmenu-disabled > a > i { - filter: grayscale(100%); -} -.vakata-context li > a > i { - text-decoration: none; - display: inline-block; - width: 2.4em; - height: 2.4em; - background: transparent; - margin: 0 0 0 -2em; - vertical-align: top; - text-align: center; - line-height: 2.4em; -} -.vakata-context li > a > i:empty { - width: 2.4em; - line-height: 2.4em; -} -.vakata-context li > a .vakata-contextmenu-sep { - display: inline-block; - width: 1px; - height: 2.4em; - background: white; - margin: 0 0.5em 0 0; - border-left: 1px solid #e2e3e3; -} -.vakata-context .vakata-contextmenu-shortcut { - font-size: 0.8em; - color: silver; - opacity: 0.5; - display: none; -} -.vakata-context-rtl ul { - left: auto; - right: 100%; - margin-left: auto; - margin-right: -4px; -} -.vakata-context-rtl li > a.vakata-context-parent { - background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); - background-position: left center; - background-repeat: no-repeat; -} -.vakata-context-rtl .vakata-context-separator > a { - margin: 0 2.4em 0 0; - border-left: 0; - border-right: 1px solid #e2e3e3; -} -.vakata-context-rtl .vakata-context-left ul { - right: auto; - left: 100%; - margin-left: -4px; - margin-right: auto; -} -.vakata-context-rtl li > a > i { - margin: 0 -2em 0 0; -} -.vakata-context-rtl li > a .vakata-contextmenu-sep { - margin: 0 0 0 0.5em; - border-left-color: white; - background: #e2e3e3; -} -#jstree-marker { - position: absolute; - top: 0; - left: 0; - margin: -5px 0 0 0; - padding: 0; - border-right: 0; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid; - width: 0; - height: 0; - font-size: 0; - line-height: 0; -} -#jstree-dnd { - line-height: 16px; - margin: 0; - padding: 4px; -} -#jstree-dnd .jstree-icon, -#jstree-dnd .jstree-copy { - display: inline-block; - text-decoration: none; - margin: 0 2px 0 0; - padding: 0; - width: 16px; - height: 16px; -} -#jstree-dnd .jstree-ok { - background: green; -} -#jstree-dnd .jstree-er { - background: red; -} -#jstree-dnd .jstree-copy { - margin: 0 2px 0 2px; -} -.jstree-default-dark .jstree-node, -.jstree-default-dark .jstree-icon { - background-repeat: no-repeat; - background-color: transparent; -} -.jstree-default-dark .jstree-anchor, -.jstree-default-dark .jstree-animated, -.jstree-default-dark .jstree-wholerow { - transition: background-color 0.15s, box-shadow 0.15s; -} -.jstree-default-dark .jstree-hovered { - background: #555; - border-radius: 2px; - box-shadow: inset 0 0 1px #555; -} -.jstree-default-dark .jstree-context { - background: #555; - border-radius: 2px; - box-shadow: inset 0 0 1px #555; -} -.jstree-default-dark .jstree-clicked { - background: #5fa2db; - border-radius: 2px; - box-shadow: inset 0 0 1px #666666; -} -.jstree-default-dark .jstree-no-icons .jstree-anchor > .jstree-themeicon { - display: none; -} -.jstree-default-dark .jstree-disabled { - background: transparent; - color: #666666; -} -.jstree-default-dark .jstree-disabled.jstree-hovered { - background: transparent; - box-shadow: none; -} -.jstree-default-dark .jstree-disabled.jstree-clicked { - background: #333333; -} -.jstree-default-dark .jstree-disabled > .jstree-icon { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-dark .jstree-search { - font-style: italic; - color: #ffffff; - font-weight: bold; -} -.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox { - display: none !important; -} -.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked { - background: transparent; - box-shadow: none; -} -.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { - background: #555; -} -.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { - background: transparent; -} -.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { - background: #555; -} -.jstree-default-dark > .jstree-striped { - min-width: 100%; - display: inline-block; - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; -} -.jstree-default-dark > .jstree-wholerow-ul .jstree-hovered, -.jstree-default-dark > .jstree-wholerow-ul .jstree-clicked { - background: transparent; - box-shadow: none; - border-radius: 0; -} -.jstree-default-dark .jstree-wholerow { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.jstree-default-dark .jstree-wholerow-hovered { - background: #555; -} -.jstree-default-dark .jstree-wholerow-clicked { - background: #5fa2db; - background: -webkit-linear-gradient(top, #5fa2db 0%, #5fa2db 100%); - background: linear-gradient(to bottom, #5fa2db 0%, #5fa2db 100%); -} -.jstree-default-dark .jstree-node { - min-height: 24px; - line-height: 24px; - margin-left: 24px; - min-width: 24px; -} -.jstree-default-dark .jstree-anchor { - line-height: 24px; - height: 24px; -} -.jstree-default-dark .jstree-icon { - width: 24px; - height: 24px; - line-height: 24px; -} -.jstree-default-dark .jstree-icon:empty { - width: 24px; - height: 24px; - line-height: 24px; -} -.jstree-default-dark.jstree-rtl .jstree-node { - margin-right: 24px; -} -.jstree-default-dark .jstree-wholerow { - height: 24px; -} -.jstree-default-dark .jstree-node, -.jstree-default-dark .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default-dark .jstree-node { - background-position: -292px -4px; - background-repeat: repeat-y; -} -.jstree-default-dark .jstree-last { - background: transparent; -} -.jstree-default-dark .jstree-open > .jstree-ocl { - background-position: -132px -4px; -} -.jstree-default-dark .jstree-closed > .jstree-ocl { - background-position: -100px -4px; -} -.jstree-default-dark .jstree-leaf > .jstree-ocl { - background-position: -68px -4px; -} -.jstree-default-dark .jstree-themeicon { - background-position: -260px -4px; -} -.jstree-default-dark > .jstree-no-dots .jstree-node, -.jstree-default-dark > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-dark > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -36px -4px; -} -.jstree-default-dark > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -4px -4px; -} -.jstree-default-dark .jstree-disabled { - background: transparent; -} -.jstree-default-dark .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default-dark .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default-dark .jstree-checkbox { - background-position: -164px -4px; -} -.jstree-default-dark .jstree-checkbox:hover { - background-position: -164px -36px; -} -.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default-dark .jstree-checked > .jstree-checkbox { - background-position: -228px -4px; -} -.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default-dark .jstree-checked > .jstree-checkbox:hover { - background-position: -228px -36px; -} -.jstree-default-dark .jstree-anchor > .jstree-undetermined { - background-position: -196px -4px; -} -.jstree-default-dark .jstree-anchor > .jstree-undetermined:hover { - background-position: -196px -36px; -} -.jstree-default-dark .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-dark > .jstree-striped { - background-size: auto 48px; -} -.jstree-default-dark.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default-dark.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-dark.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -132px -36px; -} -.jstree-default-dark.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -100px -36px; -} -.jstree-default-dark.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -68px -36px; -} -.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -36px -36px; -} -.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -4px -36px; -} -.jstree-default-dark .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default-dark > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default-dark .jstree-file { - background: url("32px.png") -100px -68px no-repeat; -} -.jstree-default-dark .jstree-folder { - background: url("32px.png") -260px -4px no-repeat; -} -.jstree-default-dark > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default-dark { - line-height: 24px; - padding: 0 4px; -} -#jstree-dnd.jstree-default-dark .jstree-ok, -#jstree-dnd.jstree-default-dark .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default-dark i { - background: transparent; - width: 24px; - height: 24px; - line-height: 24px; -} -#jstree-dnd.jstree-default-dark .jstree-ok { - background-position: -4px -68px; -} -#jstree-dnd.jstree-default-dark .jstree-er { - background-position: -36px -68px; -} -.jstree-default-dark .jstree-ellipsis { - overflow: hidden; -} -.jstree-default-dark .jstree-ellipsis .jstree-anchor { - width: calc(100% - 29px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default-dark.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); -} -.jstree-default-dark.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-dark-small .jstree-node { - min-height: 18px; - line-height: 18px; - margin-left: 18px; - min-width: 18px; -} -.jstree-default-dark-small .jstree-anchor { - line-height: 18px; - height: 18px; -} -.jstree-default-dark-small .jstree-icon { - width: 18px; - height: 18px; - line-height: 18px; -} -.jstree-default-dark-small .jstree-icon:empty { - width: 18px; - height: 18px; - line-height: 18px; -} -.jstree-default-dark-small.jstree-rtl .jstree-node { - margin-right: 18px; -} -.jstree-default-dark-small .jstree-wholerow { - height: 18px; -} -.jstree-default-dark-small .jstree-node, -.jstree-default-dark-small .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default-dark-small .jstree-node { - background-position: -295px -7px; - background-repeat: repeat-y; -} -.jstree-default-dark-small .jstree-last { - background: transparent; -} -.jstree-default-dark-small .jstree-open > .jstree-ocl { - background-position: -135px -7px; -} -.jstree-default-dark-small .jstree-closed > .jstree-ocl { - background-position: -103px -7px; -} -.jstree-default-dark-small .jstree-leaf > .jstree-ocl { - background-position: -71px -7px; -} -.jstree-default-dark-small .jstree-themeicon { - background-position: -263px -7px; -} -.jstree-default-dark-small > .jstree-no-dots .jstree-node, -.jstree-default-dark-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-dark-small > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -39px -7px; -} -.jstree-default-dark-small > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -7px -7px; -} -.jstree-default-dark-small .jstree-disabled { - background: transparent; -} -.jstree-default-dark-small .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default-dark-small .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default-dark-small .jstree-checkbox { - background-position: -167px -7px; -} -.jstree-default-dark-small .jstree-checkbox:hover { - background-position: -167px -39px; -} -.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default-dark-small .jstree-checked > .jstree-checkbox { - background-position: -231px -7px; -} -.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default-dark-small .jstree-checked > .jstree-checkbox:hover { - background-position: -231px -39px; -} -.jstree-default-dark-small .jstree-anchor > .jstree-undetermined { - background-position: -199px -7px; -} -.jstree-default-dark-small .jstree-anchor > .jstree-undetermined:hover { - background-position: -199px -39px; -} -.jstree-default-dark-small .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-dark-small > .jstree-striped { - background-size: auto 36px; -} -.jstree-default-dark-small.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default-dark-small.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-dark-small.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -135px -39px; -} -.jstree-default-dark-small.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -103px -39px; -} -.jstree-default-dark-small.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -71px -39px; -} -.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -39px -39px; -} -.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -7px -39px; -} -.jstree-default-dark-small .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default-dark-small > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default-dark-small .jstree-file { - background: url("32px.png") -103px -71px no-repeat; -} -.jstree-default-dark-small .jstree-folder { - background: url("32px.png") -263px -7px no-repeat; -} -.jstree-default-dark-small > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default-dark-small { - line-height: 18px; - padding: 0 4px; -} -#jstree-dnd.jstree-default-dark-small .jstree-ok, -#jstree-dnd.jstree-default-dark-small .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default-dark-small i { - background: transparent; - width: 18px; - height: 18px; - line-height: 18px; -} -#jstree-dnd.jstree-default-dark-small .jstree-ok { - background-position: -7px -71px; -} -#jstree-dnd.jstree-default-dark-small .jstree-er { - background-position: -39px -71px; -} -.jstree-default-dark-small .jstree-ellipsis { - overflow: hidden; -} -.jstree-default-dark-small .jstree-ellipsis .jstree-anchor { - width: calc(100% - 23px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default-dark-small.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); -} -.jstree-default-dark-small.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-dark-large .jstree-node { - min-height: 32px; - line-height: 32px; - margin-left: 32px; - min-width: 32px; -} -.jstree-default-dark-large .jstree-anchor { - line-height: 32px; - height: 32px; -} -.jstree-default-dark-large .jstree-icon { - width: 32px; - height: 32px; - line-height: 32px; -} -.jstree-default-dark-large .jstree-icon:empty { - width: 32px; - height: 32px; - line-height: 32px; -} -.jstree-default-dark-large.jstree-rtl .jstree-node { - margin-right: 32px; -} -.jstree-default-dark-large .jstree-wholerow { - height: 32px; -} -.jstree-default-dark-large .jstree-node, -.jstree-default-dark-large .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default-dark-large .jstree-node { - background-position: -288px 0px; - background-repeat: repeat-y; -} -.jstree-default-dark-large .jstree-last { - background: transparent; -} -.jstree-default-dark-large .jstree-open > .jstree-ocl { - background-position: -128px 0px; -} -.jstree-default-dark-large .jstree-closed > .jstree-ocl { - background-position: -96px 0px; -} -.jstree-default-dark-large .jstree-leaf > .jstree-ocl { - background-position: -64px 0px; -} -.jstree-default-dark-large .jstree-themeicon { - background-position: -256px 0px; -} -.jstree-default-dark-large > .jstree-no-dots .jstree-node, -.jstree-default-dark-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-dark-large > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -32px 0px; -} -.jstree-default-dark-large > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: 0px 0px; -} -.jstree-default-dark-large .jstree-disabled { - background: transparent; -} -.jstree-default-dark-large .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default-dark-large .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default-dark-large .jstree-checkbox { - background-position: -160px 0px; -} -.jstree-default-dark-large .jstree-checkbox:hover { - background-position: -160px -32px; -} -.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default-dark-large .jstree-checked > .jstree-checkbox { - background-position: -224px 0px; -} -.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default-dark-large .jstree-checked > .jstree-checkbox:hover { - background-position: -224px -32px; -} -.jstree-default-dark-large .jstree-anchor > .jstree-undetermined { - background-position: -192px 0px; -} -.jstree-default-dark-large .jstree-anchor > .jstree-undetermined:hover { - background-position: -192px -32px; -} -.jstree-default-dark-large .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-dark-large > .jstree-striped { - background-size: auto 64px; -} -.jstree-default-dark-large.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default-dark-large.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-dark-large.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -128px -32px; -} -.jstree-default-dark-large.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -96px -32px; -} -.jstree-default-dark-large.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -64px -32px; -} -.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -32px -32px; -} -.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: 0px -32px; -} -.jstree-default-dark-large .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default-dark-large > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default-dark-large .jstree-file { - background: url("32px.png") -96px -64px no-repeat; -} -.jstree-default-dark-large .jstree-folder { - background: url("32px.png") -256px 0px no-repeat; -} -.jstree-default-dark-large > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default-dark-large { - line-height: 32px; - padding: 0 4px; -} -#jstree-dnd.jstree-default-dark-large .jstree-ok, -#jstree-dnd.jstree-default-dark-large .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default-dark-large i { - background: transparent; - width: 32px; - height: 32px; - line-height: 32px; -} -#jstree-dnd.jstree-default-dark-large .jstree-ok { - background-position: 0px -64px; -} -#jstree-dnd.jstree-default-dark-large .jstree-er { - background-position: -32px -64px; -} -.jstree-default-dark-large .jstree-ellipsis { - overflow: hidden; -} -.jstree-default-dark-large .jstree-ellipsis .jstree-anchor { - width: calc(100% - 37px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default-dark-large.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); -} -.jstree-default-dark-large.jstree-rtl .jstree-last { - background: transparent; -} -@media (max-width: 768px) { - #jstree-dnd.jstree-dnd-responsive { - line-height: 40px; - font-weight: bold; - font-size: 1.1em; - text-shadow: 1px 1px white; - } - #jstree-dnd.jstree-dnd-responsive > i { - background: transparent; - width: 40px; - height: 40px; - } - #jstree-dnd.jstree-dnd-responsive > .jstree-ok { - background-image: url("40px.png"); - background-position: 0 -200px; - background-size: 120px 240px; - } - #jstree-dnd.jstree-dnd-responsive > .jstree-er { - background-image: url("40px.png"); - background-position: -40px -200px; - background-size: 120px 240px; - } - #jstree-marker.jstree-dnd-responsive { - border-left-width: 10px; - border-top-width: 10px; - border-bottom-width: 10px; - margin-top: -10px; - } -} -@media (max-width: 768px) { - .jstree-default-dark-responsive { - /* - .jstree-open > .jstree-ocl, - .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } - */ - } - .jstree-default-dark-responsive .jstree-icon { - background-image: url("40px.png"); - } - .jstree-default-dark-responsive .jstree-node, - .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl { - background: transparent; - } - .jstree-default-dark-responsive .jstree-node { - min-height: 40px; - line-height: 40px; - margin-left: 40px; - min-width: 40px; - white-space: nowrap; - } - .jstree-default-dark-responsive .jstree-anchor { - line-height: 40px; - height: 40px; - } - .jstree-default-dark-responsive .jstree-icon, - .jstree-default-dark-responsive .jstree-icon:empty { - width: 40px; - height: 40px; - line-height: 40px; - } - .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node { - margin-left: 0; - } - .jstree-default-dark-responsive.jstree-rtl .jstree-node { - margin-left: 0; - margin-right: 40px; - background: transparent; - } - .jstree-default-dark-responsive.jstree-rtl .jstree-container-ul > .jstree-node { - margin-right: 0; - } - .jstree-default-dark-responsive .jstree-ocl, - .jstree-default-dark-responsive .jstree-themeicon, - .jstree-default-dark-responsive .jstree-checkbox { - background-size: 120px 240px; - } - .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl, - .jstree-default-dark-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { - background: transparent; - } - .jstree-default-dark-responsive .jstree-open > .jstree-ocl { - background-position: 0 0 !important; - } - .jstree-default-dark-responsive .jstree-closed > .jstree-ocl { - background-position: 0 -40px !important; - } - .jstree-default-dark-responsive.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -40px 0 !important; - } - .jstree-default-dark-responsive .jstree-themeicon { - background-position: -40px -40px; - } - .jstree-default-dark-responsive .jstree-checkbox, - .jstree-default-dark-responsive .jstree-checkbox:hover { - background-position: -40px -80px; - } - .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, - .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, - .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox, - .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox:hover { - background-position: 0 -80px; - } - .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined, - .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined:hover { - background-position: 0 -120px; - } - .jstree-default-dark-responsive .jstree-anchor { - font-weight: bold; - font-size: 1.1em; - text-shadow: 1px 1px white; - } - .jstree-default-dark-responsive > .jstree-striped { - background: transparent; - } - .jstree-default-dark-responsive .jstree-wholerow { - border-top: 1px solid #666; - border-bottom: 1px solid #000; - background: #333333; - height: 40px; - } - .jstree-default-dark-responsive .jstree-wholerow-hovered { - background: #555; - } - .jstree-default-dark-responsive .jstree-wholerow-clicked { - background: #5fa2db; - } - .jstree-default-dark-responsive .jstree-children .jstree-last > .jstree-wholerow { - box-shadow: inset 0 -6px 3px -5px #111111; - } - .jstree-default-dark-responsive .jstree-children .jstree-open > .jstree-wholerow { - box-shadow: inset 0 6px 3px -5px #111111; - border-top: 0; - } - .jstree-default-dark-responsive .jstree-children .jstree-open + .jstree-open { - box-shadow: none; - } - .jstree-default-dark-responsive .jstree-node, - .jstree-default-dark-responsive .jstree-icon, - .jstree-default-dark-responsive .jstree-node > .jstree-ocl, - .jstree-default-dark-responsive .jstree-themeicon, - .jstree-default-dark-responsive .jstree-checkbox { - background-image: url("40px.png"); - background-size: 120px 240px; - } - .jstree-default-dark-responsive .jstree-node { - background-position: -80px 0; - background-repeat: repeat-y; - } - .jstree-default-dark-responsive .jstree-last { - background: transparent; - } - .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl { - background-position: -40px -120px; - } - .jstree-default-dark-responsive .jstree-last > .jstree-ocl { - background-position: -40px -160px; - } - .jstree-default-dark-responsive .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; - } - .jstree-default-dark-responsive .jstree-file { - background: url("40px.png") 0 -160px no-repeat; - background-size: 120px 240px; - } - .jstree-default-dark-responsive .jstree-folder { - background: url("40px.png") -40px -40px no-repeat; - background-size: 120px 240px; - } - .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; - } -} -.jstree-default-dark { - background: #333; -} -.jstree-default-dark .jstree-anchor { - color: #999; - text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5); -} -.jstree-default-dark .jstree-clicked, -.jstree-default-dark .jstree-checked { - color: white; -} -.jstree-default-dark .jstree-hovered { - color: white; -} -#jstree-marker.jstree-default-dark { - border-left-color: #999; - background: transparent; -} -.jstree-default-dark .jstree-anchor > .jstree-icon { - opacity: 0.75; -} -.jstree-default-dark .jstree-clicked > .jstree-icon, -.jstree-default-dark .jstree-hovered > .jstree-icon, -.jstree-default-dark .jstree-checked > .jstree-icon { - opacity: 1; -} -.jstree-default-dark.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); -} -.jstree-default-dark.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-dark-small.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); -} -.jstree-default-dark-small.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-dark-large.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); -} -.jstree-default-dark-large.jstree-rtl .jstree-last { - background: transparent; -} diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.min.css b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.min.css deleted file mode 100644 index f3c323fec0..0000000000 --- a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/style.min.css +++ /dev/null @@ -1 +0,0 @@ -.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:black;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em 0 2em;text-decoration:none;width:auto;color:black;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 white;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-no-icons{margin-left:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:white;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context .vakata-contextmenu-disabled>a>i{filter:grayscale(100%)}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:transparent;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:white;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:white;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px 0 2px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default-dark .jstree-anchor,.jstree-default-dark .jstree-animated,.jstree-default-dark .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default-dark .jstree-hovered{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-context{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-clicked{background:#5fa2db;border-radius:2px;box-shadow:inset 0 0 1px #666666}.jstree-default-dark .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default-dark .jstree-disabled{background:transparent;color:#666666}.jstree-default-dark .jstree-disabled.jstree-hovered{background:transparent;box-shadow:none}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#333333}.jstree-default-dark .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark .jstree-search{font-style:italic;color:#ffffff;font-weight:bold}.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox{display:none !important}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked{background:transparent;box-shadow:none}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#555}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:transparent}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#555}.jstree-default-dark>.jstree-striped{min-width:100%;display:inline-block;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat}.jstree-default-dark>.jstree-wholerow-ul .jstree-hovered,.jstree-default-dark>.jstree-wholerow-ul .jstree-clicked{background:transparent;box-shadow:none;border-radius:0}.jstree-default-dark .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default-dark .jstree-wholerow-hovered{background:#555}.jstree-default-dark .jstree-wholerow-clicked{background:#5fa2db;background:-webkit-linear-gradient(top, #5fa2db 0, #5fa2db 100%);background:linear-gradient(to bottom, #5fa2db 0, #5fa2db 100%)}.jstree-default-dark .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default-dark .jstree-anchor{line-height:24px;height:24px}.jstree-default-dark .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default-dark .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default-dark.jstree-rtl .jstree-node{margin-right:24px}.jstree-default-dark .jstree-wholerow{height:24px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-image:url("32px.png")}.jstree-default-dark .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default-dark .jstree-last{background:transparent}.jstree-default-dark .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default-dark .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default-dark .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default-dark .jstree-themeicon{background-position:-260px -4px}.jstree-default-dark>.jstree-no-dots .jstree-node,.jstree-default-dark>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default-dark>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default-dark .jstree-disabled{background:transparent}.jstree-default-dark .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark .jstree-checkbox{background-position:-164px -4px}.jstree-default-dark .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default-dark .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default-dark .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default-dark .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark>.jstree-striped{background-size:auto 48px}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default-dark.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default-dark.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default-dark .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-dark .jstree-file{background:url("32px.png") -100px -68px no-repeat}.jstree-default-dark .jstree-folder{background:url("32px.png") -260px -4px no-repeat}.jstree-default-dark>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default-dark .jstree-ok,#jstree-dnd.jstree-default-dark .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark i{background:transparent;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default-dark .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default-dark .jstree-er{background-position:-36px -68px}.jstree-default-dark .jstree-ellipsis{overflow:hidden}.jstree-default-dark .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default-dark.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-dark-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-dark-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-dark-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-dark-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-dark-small .jstree-wholerow{height:18px}.jstree-default-dark-small .jstree-node,.jstree-default-dark-small .jstree-icon{background-image:url("32px.png")}.jstree-default-dark-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-dark-small .jstree-last{background:transparent}.jstree-default-dark-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-dark-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-dark-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-dark-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-node,.jstree-default-dark-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-dark-small .jstree-disabled{background:transparent}.jstree-default-dark-small .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-dark-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-dark-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-dark-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-small>.jstree-striped{background-size:auto 36px}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-dark-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-dark-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-dark-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-dark-small .jstree-file{background:url("32px.png") -103px -71px no-repeat}.jstree-default-dark-small .jstree-folder{background:url("32px.png") -263px -7px no-repeat}.jstree-default-dark-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-dark-small .jstree-ok,#jstree-dnd.jstree-default-dark-small .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-small i{background:transparent;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-dark-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-dark-small .jstree-er{background-position:-39px -71px}.jstree-default-dark-small .jstree-ellipsis{overflow:hidden}.jstree-default-dark-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-dark-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-dark-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-dark-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-dark-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-dark-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-dark-large .jstree-wholerow{height:32px}.jstree-default-dark-large .jstree-node,.jstree-default-dark-large .jstree-icon{background-image:url("32px.png")}.jstree-default-dark-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-dark-large .jstree-last{background:transparent}.jstree-default-dark-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-dark-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-dark-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-dark-large .jstree-themeicon{background-position:-256px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-node,.jstree-default-dark-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-dark-large .jstree-disabled{background:transparent}.jstree-default-dark-large .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-dark-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-large .jstree-checkbox{background-position:-160px 0}.jstree-default-dark-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-dark-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-large>.jstree-striped{background-size:auto 64px}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-large.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-dark-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-dark-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-dark-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-dark-large .jstree-file{background:url("32px.png") -96px -64px no-repeat}.jstree-default-dark-large .jstree-folder{background:url("32px.png") -256px 0 no-repeat}.jstree-default-dark-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-dark-large .jstree-ok,#jstree-dnd.jstree-default-dark-large .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-large i{background:transparent;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-dark-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-dark-large .jstree-er{background-position:-32px -64px}.jstree-default-dark-large .jstree-ellipsis{overflow:hidden}.jstree-default-dark-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-dark-large.jstree-rtl .jstree-last{background:transparent}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}#jstree-dnd.jstree-dnd-responsive>i{background:transparent;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url("40px.png");background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url("40px.png");background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-dark-responsive .jstree-icon{background-image:url("40px.png")}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-dark-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-dark-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:transparent}.jstree-default-dark-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-dark-responsive .jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl,.jstree-default-dark-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-responsive .jstree-open>.jstree-ocl{background-position:0 0 !important}.jstree-default-dark-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px !important}.jstree-default-dark-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0 !important}.jstree-default-dark-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-dark-responsive .jstree-checkbox,.jstree-default-dark-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-dark-responsive .jstree-anchor{font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}.jstree-default-dark-responsive>.jstree-striped{background:transparent}.jstree-default-dark-responsive .jstree-wholerow{border-top:1px solid #666;border-bottom:1px solid #000;background:#333333;height:40px}.jstree-default-dark-responsive .jstree-wholerow-hovered{background:#555}.jstree-default-dark-responsive .jstree-wholerow-clicked{background:#5fa2db}.jstree-default-dark-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #111111}.jstree-default-dark-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #111111;border-top:0}.jstree-default-dark-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-node>.jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-image:url("40px.png");background-size:120px 240px}.jstree-default-dark-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-dark-responsive .jstree-last{background:transparent}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-dark-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-dark-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-responsive .jstree-file{background:url("40px.png") 0 -160px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive .jstree-folder{background:url("40px.png") -40px -40px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}.jstree-default-dark{background:#333}.jstree-default-dark .jstree-anchor{color:#999;text-shadow:1px 1px 0 rgba(0,0,0,0.5)}.jstree-default-dark .jstree-clicked,.jstree-default-dark .jstree-checked{color:white}.jstree-default-dark .jstree-hovered{color:white}#jstree-marker.jstree-default-dark{border-left-color:#999;background:transparent}.jstree-default-dark .jstree-anchor>.jstree-icon{opacity:.75}.jstree-default-dark .jstree-clicked>.jstree-icon,.jstree-default-dark .jstree-hovered>.jstree-icon,.jstree-default-dark .jstree-checked>.jstree-icon{opacity:1}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default-dark.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-dark-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-dark-large.jstree-rtl .jstree-last{background:transparent} \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default-dark/throbber.gif b/InvenTree/InvenTree/static/script/jstree/themes/default-dark/throbber.gif deleted file mode 100644 index 169062cda53296196d81c1e47816e40358d2523d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1464 zcmZvceN0nV7>Ca-x8)Wpy+Fkag4|n5Efb_r&{j9n7J<@Wy@FyvG_6Bu)oDeY-6HOm z^3gJs3Jj_`bvlivkopWdo^HYA_f&J3A?gB1zKWaA-7|`uci_M55E_tX8YtZda?-Mx(K#qeCPT z5q|}$GPdNU%gBu6)j~fA06_d1kzTf2dw6#-epG*0hims}jr$I0i&yLSmmC1Z3z!}N z*dX3_(ie#WDQuYa*65ZW8E(5Y7Rs%ywc!;amUL1HW`Vy4lXCMS@OY%gaUqbvYFxZf zC5NMgDaToQarKDVeHMfzcx*p4#^&^?kLH(=spG8DcKV68xN^-OXW%df!d#cc;v69S zAa;SsgyS%5V+X%E1luf;A+p)WDVrCxI`OrFJ;_>B{0%NE*1Qm9nn@leW!NSY0KXCtvx1n6Hfojth$ zt3xV&07J*R>ZtsIa`&aCOxKN67(r++I~#bw08@2I*Jjv~xsONkxNib3yfT1`X1#Gs zzD;(lZHk1SM?w!$r}#@ZEOQ}v?1}Sm^&KML$!M#2BvV^f#MYj#p29HJ=2p@`l`(F# z6AxDioPin^357J@tF)EZ{U~Qvj7F|t_VT9_zV3g9E%G6YwFdbDGf=Np?obEC!6Va? z1YJPiS!$aiQHw#nbLl2?xAvLxH+w%!3Fj-KWZp7wQ(8Jp)+|wd5yh47RhC@j&`261 z!>7|LVS*NKUO?G9>irdQP7(Y(8)PG(7M`lt5PMT$6vGM7;Yp4k>u!bqBHzNZ zjOpOUVOIJ{Vc!5;`bOhFkh>_JGb5^Ski>S+cMOs7rm@pW-cN6h)O* za_$~c+|_=%JGib13*VPwJQM0t z(m(OO`1*$)FKz5ND>Cis98Nq~qm;Y`2Yhhr zKBvl?UNZD}fcQPY=9!V7WzkO$beCP`TLw*W1=rC)djBa*><=;1OE3Xam5_7DV2?6A zuhtw9RHWYLp9257^QybWIQ6VIJG#@zC84YC45mESiaZH!o83qi(rFXcaaSq(j-Owa z6CIkzqTzH?&sIi53vbMj7F6%rH6u#lLFP(4SVUU_nzw0O(G0%gHpQ*I+>3=mufOJE zafP$lxzy$Pke=Qav-?=?9H^LqhV&8ls=DoW(1KO5zW?mAaDb{Y(>Koc49sZgb+^uF qc@C8(Mp%rgx+mJC3dQo~8dbUO?Q85zP5Hs^+UpbJR`hQGVEx}cw(Vm8 diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/32px.png b/InvenTree/InvenTree/static/script/jstree/themes/default/32px.png deleted file mode 100644 index ca6af206777a87fb9d27dccf2184934065ceeae8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5660 zcmaKwcTiJNv%r%WFcGALDoU@?QKU+XpcDy62Pr|CN=JGP2mvWlq!W4-L_mu4E?uNZ zliooIO{54(UhtbYZ|2RL_s`ukyL-=`JNKOP+ub+Xh)372FQMK{)O_inBpdX|pMDt68DqVz@s5*+T;~Wh@8P6Na-8@H#{zVJ~pPtP0xU zSUM(l*7_=N)3a1Ipp1XM?ZSD!)Cr0@vS0o*i97KkJ^A)!y?$!Z`Cv*&*b3<8>WVXu zBI$!h)37n{D$=ttF#Hp|q6m~J24IXbHT@?r?NUTvkoDyY{{-lq`IwcFaZ7Iz+oK)h z7*JDMaCb3ZewZ2mDfyl32FJB@^T3UPknAE;5t`Z; zCa)tp*+JGHN)A{f&IvwS*E2B*Agd~Bl^zaSI=Z|#KEaStBfeyY{CcA~;oLe#($`AK zsB|1d)TXeAKzNnvk;va6k)cO{PgoAG{nkbfy_wGQjrAE4100M{Tu;}8!-u?&_I!o$7!z&41P^fNy)ZAU4(#Wp)<5JTt#DU z#t3E2S~aH$h8$|U@wXgDe@QW4Pl21)dtJmh=?{#1UF8Kx8Juo)o!u0Z;$_KC0<1e$ zyyn;tD!#HDsB&Z|TRNlub=kzIR0;xL|oom-N*Si!fSv={5 zzhrd=tvbv|nDUYJo@H1{`Mr{*xY5>AIG`G8Hj8SW14S%8(MS2MQmj;WRadUUBbsr? zpzoQd^cFnLv3(dih^leKQevS|(o&Q}^;~$_?VIXe$022ONah25+U^1I8L(6Ay}tfIUF_b2KQo5eRtxXN zAYy@`u~rM+Ugse%N$UU9Pz(-#3k_-%N#5c`9u&Sg<#2*EzqSYw&$SW}0;{^^8{lUU zsK`?$brgjrs^&LyCU`qW(l?qi-3sJ@IJYP!EA6KOJ=WAvQCH{J(H)OV4t$_0N+vxs z0}nkr#Pd~hb6Baxm!8{3QL(8xde%_V^Std$Kl)rLZ*}eBPH~5bJ(GlW>lMOK+j2HE ze}7rYd2M4Y0U-492rJX@Zu907t!Ie2yZdsI0J4hK=o{e=mu6d5vX|Z~HnaZbUyz=? zD*vcywVX3R^j;5H1t~?xriIWGGx=i>*H0d}O7vF_;Fyx3@93z*JI+P_x3oE&G{{#! z2;yDo@$ql;*cH;r)zlI3Dyhj?Xu&EBIH;f#SNj?$hyiyu!VX(7a#X&jrzRm?lGU;siS5*}iDf;km^N`QJQHYX ztuP0Ux%t)5BdZ^y2E>XRT|f?v=h@cD+{#*=QBhNz^1>{>I2$fAE!Ydu85u!(SbM2!Fk4Yj9R-pm}Cw*U$K;{V}h41 zXUip$uKqbttzu^2s)6O46pd~;1#&Sn7>Agt%+7x^p7TU=JoJq=02N@(Xj-W$g?CXO zEgJF$O$^-$7fPY5^JY!hNvz=$l$W#@mntf8e~08zXa4$I7+dz$>1dMaxwloH5bfWt5cDlYI(CM6?L`l1WgqkaO@TTEUP>6 z=HK$IFrYwlrGO_v=rA8wa8!{FFf+^M9=-iWt6}9eS21M7++R~3cqf_@eK9b>Vk4>I zS4}QC_`%WGIL)5~!pu-k|J;>3;!e$ny_eCAhPEX>x3f4DRh+<@5Uh*`V3gtQq;PdO zOW6ih{YL=SwE%Etf-Ex5@n-~F7x>kod>zpF}}L;t*@+^$BnTy$tRHSu>((*vR5684;*U z6VQza-8rYsRvIK&d+e5-MM4b)=8@M0F9xU&HiL1wzv7^R* zRh0<$H)O8Nrs!L5>(fy|!?LDK(dod!6N62qFIW?$-X2=YJ+O@ ztb6*MPp`c;M|dY0LrXYr(@*er`PY&>f6xCo*y6%;N6<8cZ&e*5MA>on31Z3@+Z`4O z*%83QphafWfsW;Z_O&F8<*}WgaCcp$d}D}oh5bKt6>9$*iQgVE3`qcVbvpHd3dUqe zB+|hp{>;b+ZNQsRU}jC-1;Xt>T}(n-+A|)Y0c2a>y5}i1tfX%;U!7ddhMIQ1@?FjV zh&;{dJ)dgNfbO1Uz=k+@tvOtEbu)tBoTvJ!?QKuS6y$dQjZ!kvxghe5Os3aVtB+2l zHZ*S$ECb3fp5;p-XU@|0wNAdkaA3h!acYZh&CbLnJ9f>jX$>-#bV^SDm@xtwrn z`6qx~>frB+W!6#oQ$bhSN!#e&#t*mm2h&Lvu81)|{k<7^ZXUeX+7|iei5BYPJ6WH< zJKHhRuHV{E<^Y1tfA84dVhWz_`bG81MQ$P1hi(spy^@_je=r#@pUSivHX3XmamZTM zPgO4l9a)CPQ3Q@<#Bx;TFQ8(SLf+;{?*y?cZYDY}eiYP@4gWNxQJ>}xl6)7Nf6=3& zXKk8LXp|z9P_0)xnPUuzzIS7w%ZeR-=AEODqOTo3(^w=f$d80| zC+G@+CP0Cw`?$M+rbYBXS*zLO!u7(-{gHRr=Wbm~;r#_XrkUa;MX-kjjt)2FK^367 zPhLIXv^7l6NV^;z$PWAKm^5N2>Vmx@b<;~*o_ypMczTBh89*eb$$2&mdH7j34Dc=Y z$d^2F^|+m}jiJym6jH&eWc(8v4;Fz?_Y6LG#uRA4a8r*a#{(9MZdYSuJ%BaCpF*Lv zoq$o_uv)ZT3Du$}LwqZSM40hrUMpa`!4q?>i^l%PNUm_uA~Ha+uGfZ z5Fu5W&m<}b@Q9RS2z0lq-_;9C$7x~;&6_Qw3GtiXp%MMDqY0TgbI3dPIFq2JuC6|2 z#H51?HU(Q+wRqh2WV}C~l4Y5XGW0%^nBq|&DSr#pDJ&?+6FxrVl*hTpV(^I%#QnJ; zT_rBu5HnlbkA3gH{eCxlc;8;2L~PVLPOVx%>1UR|KX0PO!FT$cgx!e4A@5uA)mL~$ zcAGQ*d?@Z2!1;sU%Lh zf5O(@_(w$TrB`w0!F#S+omZQpm$*gdpIv$AvAvQ}hg9m>RUr77&S$z7yxKe1U1{+hA#w8$q#FkNTF1_Ufyr6oRz8t*Xt+P z_B7SEkJJf8ntKE94JPM4pWxTk>wRl=0v#}@kYK+9gHT>YWGR117Lug&_$jVK2242J zD#Jqz4X5mEs3qdSzi8M3$e7ACOii0F?rOv>gG+(|vjO}2znvd8-`bFD*9&;BIsXMPQyJustmX=N2_OQk>yt_9}vu>io3@v(Q&mV3TO5)dC_hc#Mr3E&U zFkZvQ!QV!Ay??2)K8`u)WFxTn_BTCXrHcg)z{rye99Ma(_mP_ex_D<)=fgp+pF9EKu63&Op4osuU!56omX*M zsDNFR8%{hjQ0;OnV%)5tEsd1N6)w;$OM{u~^E05=9GFoNWq4aT?C-VRr@K4}mYckK zW=ej*y60lMNAq4OJW<7(418*F=&qz#IrPPgarGUo_!qvQTWi;=3rQ6WJJG~EmnJ8@ zx?Migq9Lfze)wGn%-1=2KNLa5m1~$2ngu!$F)>YQX5A`o%ylfJv3Du48RT#A9#B?F zaMTIqO6BD%;F|s{;>N4>@yGJ+?zlF{p^tq(F86`Ipshx2!YSqE1&*>ja$KPv#JS$Db3Fy3`!y=X7WJ-m&pP7avqSrz%WGZOR39GdDd|nEbMfZP7(Xn;Xa9=CQM@5!H8}ebF7eEoK+G zQ}@}ah0`d()0|epZW?Cklp!JN?ZaOBYLmp|T4nC~=KA`&xOE>DtFFF2-J7>Oa*ufg z+=nXACNg;5N|%2@y*X+=_x_F*!kUcWet(?WOT5sdW%~;7qHuY2?vxUTjE*9sAfqO2 zY8-Re>k4ILahA2074|;cZKC$sYgruK6R)MoRYTbn+VC_U<~PqhoWVk%#9Nj4Io{k6 z@7Az*i{t7R6CTB%dwx|d!A?#Y@Y%XBss+#4_re279F*Wln{Z{XTm&Lxt12Bsy1JyX zOiIbJ<0vRGnV6WoMDLWGQ?IOTBA5+&03+5mM21g>vrEm4Eo9_jc{ENZ&l_iU{frta z-Ul#t68B+?W)c4@8yh-)e*Vy{0qrN|!2^-%dWLChmaZ`tUbDsVq zDh)kHtWNClF2ncpY>yvhe;=Y3!d-Oi_#{)>eXET)SK3cvBj;6&0Z&g$mcDPLN@Vx` zB_SlMGh3=Th$#P2@A1-uvQ|j8|A8CHuLE^q;may)zbq^&>azZdA_`>wzb2_+wdQ4S tl-L|?sIRZTY>v9R-b=Vd*EsEI(C%%u)9mPYA7a-Rpr(RQ{s>2g{1@mKk){9u diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/40px.png b/InvenTree/InvenTree/static/script/jstree/themes/default/40px.png deleted file mode 100644 index 2a3fcb9dfacf4e82a4c3ac3a6cd1650af966fc29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2215 zcmZuzdpr|rA0P9&=N6Vrbc&;6OvQ;bysG804oRQpZq($GSx1;iE@jnT7TOk}w=~m@ zc?mHyjiU%P6}84pNH*p&Gq)Wl@25|l_x=6xe7}D@m*4mM{GQ+Exq8&gZIh~@DgXf3 z;06CsAaGgD})FP|{?C6o>uywSxwUvF1b+R5pp>TtI8`*63H~zl_3Wbss z{x!e8k>0suUcT!nC$Ffetg4~A)%2&M{z1Vjt7`)%*X#iRr4^4uuE((-gxrZn&QA68 zVJ+{|-H)uBW$==osQl{pnK{b&(#5_~^EB*9BegpiNPk7}k-Zlm$AFmWazI7(ExV9^ zk-Y#0cT9eW-qNkGHm0{Z5O5JoX;Wk-RbBUUS)3qhKUAusZx0vpau5fs01FHZ*5-?z zR(+Oi^6((%=UlpwA0d*UKQ&wPFC{rFz9!Hm4Gp+@y_JjJvx8-P$lzg7qfPSk?z5(G zMp(`*y5vejLA{Fcg2gn~W@t!_QJ zF>k419eO3fyyo5sZkW)>7~sxY&>|0 z9B_}^J8x6&VRQXUC`8CXH!3|IB2pyjh_v|*6t--jOrorku5t0Px($|-khHKLzCvFO;u*P&09w^Sb-08AfxmU}| zmzOfPpA)O=S8<7>?)SibXpdi#!uE?EU=Ut2;6po`U@i_HW{%JXdQN({pHZ{gwpS4i z3Iy8YyE6jY7nnKWS-ic~FigRKSp!V{CcMZM-=UMCbjQ3vsT^kpaGy~&pHa_1<&(1e zNx2CTjTC+TK0nA?$Hn0KH#&Z zow#nhAIj$MioaGA#>8sbqHUC5p+*|qR>2}2%;#MjOg5-gergaj!tLutFMFzFOwz@x zf`$T;a>KhoPH$xjP9=S^Ibl^m4-Bxy66(uub0xR}d4zUiF|W*JdQ)0G;*b@9H2Y3H zuCX;`+EK{+updqBuV3rgDVp+myKPZ4_k1UIwLODczE8CDaEDLkucD={gFbn?MMYRE zRXa6jLvcX!Jxw?1VWr0-HHNnclAB^pMyR zaUm6lE2xbaXWc)WlC1zh&LL;+-I6{U^=}Qo8ZW+zouOz8;nsY7=oe658`=Je4Y|_> z8562Sw()rtGP^DG(%t3?7~`dT%6m49as5bgSkaN(x@W1{QMzRL|Lfb2)#MGFLR`A5 z{qf05chiRWp9&o@)5lz6c~kBG?qsfZT}a3nI{NCd>Pl|@1tL$->aCd8)q&Q{#N%AR z4oTyss`N}$hvkKSyRWZ%m!rtXB9jAXC5r#;65pqdk!buNg9gLgebf4nP3tNam}!nQS?nGW zNY)j^>s|Y$RB=VC7s$X{$S>cH04{siWUThqWVCQQYM?k%p~Pdmb+yaMxKpztR@sFm z;(HzB2+u_pP~ReRaPnIifi5sZBY-mCmR-F2t>+i|&TB62;TU|M%Z76&l-Hm}i>Ely zqL}Yn+r~t5TK6{vKHroKwV|b-M|=}yvM(T3e{AA&tjQU1>|-8biB$y_ty1M2 zQn`uV*Tqee#kymnX8!EtX1Y|m;4;ZUHmP-vahom%T40;9;QGc4$VUlkd5Wu9t}G~4 zJHOam&@cMXEHlbM413uRH;ofBS;6Nkhuc$HO0qy5Da%1+W%m`_mUUnjwklqNh;uoF zaxG&J{`7(S!X)2i`{2!PzDiyKC@~M+n-bmeAZ97jlG!ub6Q>JxzWsu;e?JOt`rBrQ zr!{`iV0Y&$F?E)&Z6k$}Kkl5!L4X{lhG$g;do=mQ2;hL;)R2~7I}M&4;9vDK<^c|_ z8-ECiU>v^tIY!q(9or|F)`1as4-nllb}`cIvF#keoVTT)%JLsQO;`&^7s@ijz{w+KUWF5I$uu8et;cSaKgDyMzyvMU8o;T`3T z6U>KL=7#yfkQ}N+-7WaVVdb!Qdy@MfwBX7rKkc|=D4L8+73~bx8}82vbsJ&bW)TOi z2T;tavYDAY(!)7469VkflwAv-0C9g;!9-}^zfpJGF3>W`3R??#Z-kvT+J|-yqR$68 z4G2w)6;V*nEPM=rnoH_Y&IL5Fo$8_~jHl#~t^Qr9>Ab{DZXSJp7Y*EQL_{VbN5hN< zh#ljWG)_yMotEI*Nc>g@a_!41lU&a>YUA$;#a;pW?{K)xVCnfvd1^k1qMBZfM9@no znUdmv#^!V&Y2e^qB5zlee2IH3^&;K+H~dlI5Hs+;C2YH{@G_pYp!&8&YA03I-}LzM@R GnSTO{AtE3E diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/style.css b/InvenTree/InvenTree/static/script/jstree/themes/default/style.css deleted file mode 100644 index b50e6a2c53..0000000000 --- a/InvenTree/InvenTree/static/script/jstree/themes/default/style.css +++ /dev/null @@ -1,1106 +0,0 @@ -/* jsTree default theme */ -.jstree-node, -.jstree-children, -.jstree-container-ul { - display: block; - margin: 0; - padding: 0; - list-style-type: none; - list-style-image: none; -} -.jstree-node { - white-space: nowrap; -} -.jstree-anchor { - display: inline-block; - color: black; - white-space: nowrap; - padding: 0 4px 0 1px; - margin: 0; - vertical-align: top; -} -.jstree-anchor:focus { - outline: 0; -} -.jstree-anchor, -.jstree-anchor:link, -.jstree-anchor:visited, -.jstree-anchor:hover, -.jstree-anchor:active { - text-decoration: none; - color: inherit; -} -.jstree-icon { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0; - vertical-align: top; - text-align: center; -} -.jstree-icon:empty { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0; - vertical-align: top; - text-align: center; -} -.jstree-ocl { - cursor: pointer; -} -.jstree-leaf > .jstree-ocl { - cursor: default; -} -.jstree .jstree-open > .jstree-children { - display: block; -} -.jstree .jstree-closed > .jstree-children, -.jstree .jstree-leaf > .jstree-children { - display: none; -} -.jstree-anchor > .jstree-themeicon { - margin-right: 2px; -} -.jstree-no-icons .jstree-themeicon, -.jstree-anchor > .jstree-themeicon-hidden { - display: none; -} -.jstree-hidden, -.jstree-node.jstree-hidden { - display: none; -} -.jstree-rtl .jstree-anchor { - padding: 0 1px 0 4px; -} -.jstree-rtl .jstree-anchor > .jstree-themeicon { - margin-left: 2px; - margin-right: 0; -} -.jstree-rtl .jstree-node { - margin-left: 0; -} -.jstree-rtl .jstree-container-ul > .jstree-node { - margin-right: 0; -} -.jstree-wholerow-ul { - position: relative; - display: inline-block; - min-width: 100%; -} -.jstree-wholerow-ul .jstree-leaf > .jstree-ocl { - cursor: pointer; -} -.jstree-wholerow-ul .jstree-anchor, -.jstree-wholerow-ul .jstree-icon { - position: relative; -} -.jstree-wholerow-ul .jstree-wholerow { - width: 100%; - cursor: pointer; - position: absolute; - left: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.jstree-contextmenu .jstree-anchor { - -webkit-user-select: none; - /* disable selection/Copy of UIWebView */ - -webkit-touch-callout: none; - /* disable the IOS popup when long-press on a link */ - user-select: none; -} -.vakata-context { - display: none; -} -.vakata-context, -.vakata-context ul { - margin: 0; - padding: 2px; - position: absolute; - background: #f5f5f5; - border: 1px solid #979797; - box-shadow: 2px 2px 2px #999999; -} -.vakata-context ul { - list-style: none; - left: 100%; - margin-top: -2.7em; - margin-left: -4px; -} -.vakata-context .vakata-context-right ul { - left: auto; - right: 100%; - margin-left: auto; - margin-right: -4px; -} -.vakata-context li { - list-style: none; -} -.vakata-context li > a { - display: block; - padding: 0 2em 0 2em; - text-decoration: none; - width: auto; - color: black; - white-space: nowrap; - line-height: 2.4em; - text-shadow: 1px 1px 0 white; - border-radius: 1px; -} -.vakata-context li > a:hover { - position: relative; - background-color: #e8eff7; - box-shadow: 0 0 2px #0a6aa1; -} -.vakata-context li > a.vakata-context-parent { - background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); - background-position: right center; - background-repeat: no-repeat; -} -.vakata-context li > a:focus { - outline: 0; -} -.vakata-context .vakata-context-no-icons { - margin-left: 0; -} -.vakata-context .vakata-context-hover > a { - position: relative; - background-color: #e8eff7; - box-shadow: 0 0 2px #0a6aa1; -} -.vakata-context .vakata-context-separator > a, -.vakata-context .vakata-context-separator > a:hover { - background: white; - border: 0; - border-top: 1px solid #e2e3e3; - height: 1px; - min-height: 1px; - max-height: 1px; - padding: 0; - margin: 0 0 0 2.4em; - border-left: 1px solid #e0e0e0; - text-shadow: 0 0 0 transparent; - box-shadow: 0 0 0 transparent; - border-radius: 0; -} -.vakata-context .vakata-contextmenu-disabled a, -.vakata-context .vakata-contextmenu-disabled a:hover { - color: silver; - background-color: transparent; - border: 0; - box-shadow: 0 0 0; -} -.vakata-context .vakata-contextmenu-disabled > a > i { - filter: grayscale(100%); -} -.vakata-context li > a > i { - text-decoration: none; - display: inline-block; - width: 2.4em; - height: 2.4em; - background: transparent; - margin: 0 0 0 -2em; - vertical-align: top; - text-align: center; - line-height: 2.4em; -} -.vakata-context li > a > i:empty { - width: 2.4em; - line-height: 2.4em; -} -.vakata-context li > a .vakata-contextmenu-sep { - display: inline-block; - width: 1px; - height: 2.4em; - background: white; - margin: 0 0.5em 0 0; - border-left: 1px solid #e2e3e3; -} -.vakata-context .vakata-contextmenu-shortcut { - font-size: 0.8em; - color: silver; - opacity: 0.5; - display: none; -} -.vakata-context-rtl ul { - left: auto; - right: 100%; - margin-left: auto; - margin-right: -4px; -} -.vakata-context-rtl li > a.vakata-context-parent { - background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); - background-position: left center; - background-repeat: no-repeat; -} -.vakata-context-rtl .vakata-context-separator > a { - margin: 0 2.4em 0 0; - border-left: 0; - border-right: 1px solid #e2e3e3; -} -.vakata-context-rtl .vakata-context-left ul { - right: auto; - left: 100%; - margin-left: -4px; - margin-right: auto; -} -.vakata-context-rtl li > a > i { - margin: 0 -2em 0 0; -} -.vakata-context-rtl li > a .vakata-contextmenu-sep { - margin: 0 0 0 0.5em; - border-left-color: white; - background: #e2e3e3; -} -#jstree-marker { - position: absolute; - top: 0; - left: 0; - margin: -5px 0 0 0; - padding: 0; - border-right: 0; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid; - width: 0; - height: 0; - font-size: 0; - line-height: 0; -} -#jstree-dnd { - line-height: 16px; - margin: 0; - padding: 4px; -} -#jstree-dnd .jstree-icon, -#jstree-dnd .jstree-copy { - display: inline-block; - text-decoration: none; - margin: 0 2px 0 0; - padding: 0; - width: 16px; - height: 16px; -} -#jstree-dnd .jstree-ok { - background: green; -} -#jstree-dnd .jstree-er { - background: red; -} -#jstree-dnd .jstree-copy { - margin: 0 2px 0 2px; -} -.jstree-default .jstree-node, -.jstree-default .jstree-icon { - background-repeat: no-repeat; - background-color: transparent; -} -.jstree-default .jstree-anchor, -.jstree-default .jstree-animated, -.jstree-default .jstree-wholerow { - transition: background-color 0.15s, box-shadow 0.15s; -} -.jstree-default .jstree-hovered { - background: #e7f4f9; - border-radius: 2px; - box-shadow: inset 0 0 1px #cccccc; -} -.jstree-default .jstree-context { - background: #e7f4f9; - border-radius: 2px; - box-shadow: inset 0 0 1px #cccccc; -} -.jstree-default .jstree-clicked { - background: #beebff; - border-radius: 2px; - box-shadow: inset 0 0 1px #999999; -} -.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { - display: none; -} -.jstree-default .jstree-disabled { - background: transparent; - color: #666666; -} -.jstree-default .jstree-disabled.jstree-hovered { - background: transparent; - box-shadow: none; -} -.jstree-default .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default .jstree-disabled > .jstree-icon { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default .jstree-search { - font-style: italic; - color: #8b0000; - font-weight: bold; -} -.jstree-default .jstree-no-checkboxes .jstree-checkbox { - display: none !important; -} -.jstree-default.jstree-checkbox-no-clicked .jstree-clicked { - background: transparent; - box-shadow: none; -} -.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { - background: #e7f4f9; -} -.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { - background: transparent; -} -.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { - background: #e7f4f9; -} -.jstree-default > .jstree-striped { - min-width: 100%; - display: inline-block; - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; -} -.jstree-default > .jstree-wholerow-ul .jstree-hovered, -.jstree-default > .jstree-wholerow-ul .jstree-clicked { - background: transparent; - box-shadow: none; - border-radius: 0; -} -.jstree-default .jstree-wholerow { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.jstree-default .jstree-wholerow-hovered { - background: #e7f4f9; -} -.jstree-default .jstree-wholerow-clicked { - background: #beebff; - background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); - background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); -} -.jstree-default .jstree-node { - min-height: 24px; - line-height: 24px; - margin-left: 24px; - min-width: 24px; -} -.jstree-default .jstree-anchor { - line-height: 24px; - height: 24px; -} -.jstree-default .jstree-icon { - width: 24px; - height: 24px; - line-height: 24px; -} -.jstree-default .jstree-icon:empty { - width: 24px; - height: 24px; - line-height: 24px; -} -.jstree-default.jstree-rtl .jstree-node { - margin-right: 24px; -} -.jstree-default .jstree-wholerow { - height: 24px; -} -.jstree-default .jstree-node, -.jstree-default .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default .jstree-node { - background-position: -292px -4px; - background-repeat: repeat-y; -} -.jstree-default .jstree-last { - background: transparent; -} -.jstree-default .jstree-open > .jstree-ocl { - background-position: -132px -4px; -} -.jstree-default .jstree-closed > .jstree-ocl { - background-position: -100px -4px; -} -.jstree-default .jstree-leaf > .jstree-ocl { - background-position: -68px -4px; -} -.jstree-default .jstree-themeicon { - background-position: -260px -4px; -} -.jstree-default > .jstree-no-dots .jstree-node, -.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -36px -4px; -} -.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -4px -4px; -} -.jstree-default .jstree-disabled { - background: transparent; -} -.jstree-default .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default .jstree-checkbox { - background-position: -164px -4px; -} -.jstree-default .jstree-checkbox:hover { - background-position: -164px -36px; -} -.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default .jstree-checked > .jstree-checkbox { - background-position: -228px -4px; -} -.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default .jstree-checked > .jstree-checkbox:hover { - background-position: -228px -36px; -} -.jstree-default .jstree-anchor > .jstree-undetermined { - background-position: -196px -4px; -} -.jstree-default .jstree-anchor > .jstree-undetermined:hover { - background-position: -196px -36px; -} -.jstree-default .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default > .jstree-striped { - background-size: auto 48px; -} -.jstree-default.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -132px -36px; -} -.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -100px -36px; -} -.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -68px -36px; -} -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -36px -36px; -} -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -4px -36px; -} -.jstree-default .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default .jstree-file { - background: url("32px.png") -100px -68px no-repeat; -} -.jstree-default .jstree-folder { - background: url("32px.png") -260px -4px no-repeat; -} -.jstree-default > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default { - line-height: 24px; - padding: 0 4px; -} -#jstree-dnd.jstree-default .jstree-ok, -#jstree-dnd.jstree-default .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default i { - background: transparent; - width: 24px; - height: 24px; - line-height: 24px; -} -#jstree-dnd.jstree-default .jstree-ok { - background-position: -4px -68px; -} -#jstree-dnd.jstree-default .jstree-er { - background-position: -36px -68px; -} -.jstree-default .jstree-ellipsis { - overflow: hidden; -} -.jstree-default .jstree-ellipsis .jstree-anchor { - width: calc(100% - 29px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); -} -.jstree-default.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-small .jstree-node { - min-height: 18px; - line-height: 18px; - margin-left: 18px; - min-width: 18px; -} -.jstree-default-small .jstree-anchor { - line-height: 18px; - height: 18px; -} -.jstree-default-small .jstree-icon { - width: 18px; - height: 18px; - line-height: 18px; -} -.jstree-default-small .jstree-icon:empty { - width: 18px; - height: 18px; - line-height: 18px; -} -.jstree-default-small.jstree-rtl .jstree-node { - margin-right: 18px; -} -.jstree-default-small .jstree-wholerow { - height: 18px; -} -.jstree-default-small .jstree-node, -.jstree-default-small .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default-small .jstree-node { - background-position: -295px -7px; - background-repeat: repeat-y; -} -.jstree-default-small .jstree-last { - background: transparent; -} -.jstree-default-small .jstree-open > .jstree-ocl { - background-position: -135px -7px; -} -.jstree-default-small .jstree-closed > .jstree-ocl { - background-position: -103px -7px; -} -.jstree-default-small .jstree-leaf > .jstree-ocl { - background-position: -71px -7px; -} -.jstree-default-small .jstree-themeicon { - background-position: -263px -7px; -} -.jstree-default-small > .jstree-no-dots .jstree-node, -.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -39px -7px; -} -.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -7px -7px; -} -.jstree-default-small .jstree-disabled { - background: transparent; -} -.jstree-default-small .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default-small .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default-small .jstree-checkbox { - background-position: -167px -7px; -} -.jstree-default-small .jstree-checkbox:hover { - background-position: -167px -39px; -} -.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default-small .jstree-checked > .jstree-checkbox { - background-position: -231px -7px; -} -.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default-small .jstree-checked > .jstree-checkbox:hover { - background-position: -231px -39px; -} -.jstree-default-small .jstree-anchor > .jstree-undetermined { - background-position: -199px -7px; -} -.jstree-default-small .jstree-anchor > .jstree-undetermined:hover { - background-position: -199px -39px; -} -.jstree-default-small .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-small > .jstree-striped { - background-size: auto 36px; -} -.jstree-default-small.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default-small.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -135px -39px; -} -.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -103px -39px; -} -.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -71px -39px; -} -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -39px -39px; -} -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -7px -39px; -} -.jstree-default-small .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default-small .jstree-file { - background: url("32px.png") -103px -71px no-repeat; -} -.jstree-default-small .jstree-folder { - background: url("32px.png") -263px -7px no-repeat; -} -.jstree-default-small > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default-small { - line-height: 18px; - padding: 0 4px; -} -#jstree-dnd.jstree-default-small .jstree-ok, -#jstree-dnd.jstree-default-small .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default-small i { - background: transparent; - width: 18px; - height: 18px; - line-height: 18px; -} -#jstree-dnd.jstree-default-small .jstree-ok { - background-position: -7px -71px; -} -#jstree-dnd.jstree-default-small .jstree-er { - background-position: -39px -71px; -} -.jstree-default-small .jstree-ellipsis { - overflow: hidden; -} -.jstree-default-small .jstree-ellipsis .jstree-anchor { - width: calc(100% - 23px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default-small.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); -} -.jstree-default-small.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-large .jstree-node { - min-height: 32px; - line-height: 32px; - margin-left: 32px; - min-width: 32px; -} -.jstree-default-large .jstree-anchor { - line-height: 32px; - height: 32px; -} -.jstree-default-large .jstree-icon { - width: 32px; - height: 32px; - line-height: 32px; -} -.jstree-default-large .jstree-icon:empty { - width: 32px; - height: 32px; - line-height: 32px; -} -.jstree-default-large.jstree-rtl .jstree-node { - margin-right: 32px; -} -.jstree-default-large .jstree-wholerow { - height: 32px; -} -.jstree-default-large .jstree-node, -.jstree-default-large .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default-large .jstree-node { - background-position: -288px 0px; - background-repeat: repeat-y; -} -.jstree-default-large .jstree-last { - background: transparent; -} -.jstree-default-large .jstree-open > .jstree-ocl { - background-position: -128px 0px; -} -.jstree-default-large .jstree-closed > .jstree-ocl { - background-position: -96px 0px; -} -.jstree-default-large .jstree-leaf > .jstree-ocl { - background-position: -64px 0px; -} -.jstree-default-large .jstree-themeicon { - background-position: -256px 0px; -} -.jstree-default-large > .jstree-no-dots .jstree-node, -.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -32px 0px; -} -.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: 0px 0px; -} -.jstree-default-large .jstree-disabled { - background: transparent; -} -.jstree-default-large .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default-large .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default-large .jstree-checkbox { - background-position: -160px 0px; -} -.jstree-default-large .jstree-checkbox:hover { - background-position: -160px -32px; -} -.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default-large .jstree-checked > .jstree-checkbox { - background-position: -224px 0px; -} -.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default-large .jstree-checked > .jstree-checkbox:hover { - background-position: -224px -32px; -} -.jstree-default-large .jstree-anchor > .jstree-undetermined { - background-position: -192px 0px; -} -.jstree-default-large .jstree-anchor > .jstree-undetermined:hover { - background-position: -192px -32px; -} -.jstree-default-large .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-large > .jstree-striped { - background-size: auto 64px; -} -.jstree-default-large.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default-large.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -128px -32px; -} -.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -96px -32px; -} -.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -64px -32px; -} -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -32px -32px; -} -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: 0px -32px; -} -.jstree-default-large .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default-large .jstree-file { - background: url("32px.png") -96px -64px no-repeat; -} -.jstree-default-large .jstree-folder { - background: url("32px.png") -256px 0px no-repeat; -} -.jstree-default-large > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default-large { - line-height: 32px; - padding: 0 4px; -} -#jstree-dnd.jstree-default-large .jstree-ok, -#jstree-dnd.jstree-default-large .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default-large i { - background: transparent; - width: 32px; - height: 32px; - line-height: 32px; -} -#jstree-dnd.jstree-default-large .jstree-ok { - background-position: 0px -64px; -} -#jstree-dnd.jstree-default-large .jstree-er { - background-position: -32px -64px; -} -.jstree-default-large .jstree-ellipsis { - overflow: hidden; -} -.jstree-default-large .jstree-ellipsis .jstree-anchor { - width: calc(100% - 37px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default-large.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); -} -.jstree-default-large.jstree-rtl .jstree-last { - background: transparent; -} -@media (max-width: 768px) { - #jstree-dnd.jstree-dnd-responsive { - line-height: 40px; - font-weight: bold; - font-size: 1.1em; - text-shadow: 1px 1px white; - } - #jstree-dnd.jstree-dnd-responsive > i { - background: transparent; - width: 40px; - height: 40px; - } - #jstree-dnd.jstree-dnd-responsive > .jstree-ok { - background-image: url("40px.png"); - background-position: 0 -200px; - background-size: 120px 240px; - } - #jstree-dnd.jstree-dnd-responsive > .jstree-er { - background-image: url("40px.png"); - background-position: -40px -200px; - background-size: 120px 240px; - } - #jstree-marker.jstree-dnd-responsive { - border-left-width: 10px; - border-top-width: 10px; - border-bottom-width: 10px; - margin-top: -10px; - } -} -@media (max-width: 768px) { - .jstree-default-responsive { - /* - .jstree-open > .jstree-ocl, - .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } - */ - } - .jstree-default-responsive .jstree-icon { - background-image: url("40px.png"); - } - .jstree-default-responsive .jstree-node, - .jstree-default-responsive .jstree-leaf > .jstree-ocl { - background: transparent; - } - .jstree-default-responsive .jstree-node { - min-height: 40px; - line-height: 40px; - margin-left: 40px; - min-width: 40px; - white-space: nowrap; - } - .jstree-default-responsive .jstree-anchor { - line-height: 40px; - height: 40px; - } - .jstree-default-responsive .jstree-icon, - .jstree-default-responsive .jstree-icon:empty { - width: 40px; - height: 40px; - line-height: 40px; - } - .jstree-default-responsive > .jstree-container-ul > .jstree-node { - margin-left: 0; - } - .jstree-default-responsive.jstree-rtl .jstree-node { - margin-left: 0; - margin-right: 40px; - background: transparent; - } - .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { - margin-right: 0; - } - .jstree-default-responsive .jstree-ocl, - .jstree-default-responsive .jstree-themeicon, - .jstree-default-responsive .jstree-checkbox { - background-size: 120px 240px; - } - .jstree-default-responsive .jstree-leaf > .jstree-ocl, - .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { - background: transparent; - } - .jstree-default-responsive .jstree-open > .jstree-ocl { - background-position: 0 0 !important; - } - .jstree-default-responsive .jstree-closed > .jstree-ocl { - background-position: 0 -40px !important; - } - .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -40px 0 !important; - } - .jstree-default-responsive .jstree-themeicon { - background-position: -40px -40px; - } - .jstree-default-responsive .jstree-checkbox, - .jstree-default-responsive .jstree-checkbox:hover { - background-position: -40px -80px; - } - .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, - .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, - .jstree-default-responsive .jstree-checked > .jstree-checkbox, - .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { - background-position: 0 -80px; - } - .jstree-default-responsive .jstree-anchor > .jstree-undetermined, - .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { - background-position: 0 -120px; - } - .jstree-default-responsive .jstree-anchor { - font-weight: bold; - font-size: 1.1em; - text-shadow: 1px 1px white; - } - .jstree-default-responsive > .jstree-striped { - background: transparent; - } - .jstree-default-responsive .jstree-wholerow { - border-top: 1px solid rgba(255, 255, 255, 0.7); - border-bottom: 1px solid rgba(64, 64, 64, 0.2); - background: #ebebeb; - height: 40px; - } - .jstree-default-responsive .jstree-wholerow-hovered { - background: #e7f4f9; - } - .jstree-default-responsive .jstree-wholerow-clicked { - background: #beebff; - } - .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { - box-shadow: inset 0 -6px 3px -5px #666666; - } - .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { - box-shadow: inset 0 6px 3px -5px #666666; - border-top: 0; - } - .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { - box-shadow: none; - } - .jstree-default-responsive .jstree-node, - .jstree-default-responsive .jstree-icon, - .jstree-default-responsive .jstree-node > .jstree-ocl, - .jstree-default-responsive .jstree-themeicon, - .jstree-default-responsive .jstree-checkbox { - background-image: url("40px.png"); - background-size: 120px 240px; - } - .jstree-default-responsive .jstree-node { - background-position: -80px 0; - background-repeat: repeat-y; - } - .jstree-default-responsive .jstree-last { - background: transparent; - } - .jstree-default-responsive .jstree-leaf > .jstree-ocl { - background-position: -40px -120px; - } - .jstree-default-responsive .jstree-last > .jstree-ocl { - background-position: -40px -160px; - } - .jstree-default-responsive .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; - } - .jstree-default-responsive .jstree-file { - background: url("40px.png") 0 -160px no-repeat; - background-size: 120px 240px; - } - .jstree-default-responsive .jstree-folder { - background: url("40px.png") -40px -40px no-repeat; - background-size: 120px 240px; - } - .jstree-default-responsive > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; - } -} diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/style.min.css b/InvenTree/InvenTree/static/script/jstree/themes/default/style.min.css deleted file mode 100644 index 0c6897a98f..0000000000 --- a/InvenTree/InvenTree/static/script/jstree/themes/default/style.min.css +++ /dev/null @@ -1 +0,0 @@ -.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:black;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em 0 2em;text-decoration:none;width:auto;color:black;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 white;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-no-icons{margin-left:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:white;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context .vakata-contextmenu-disabled>a>i{filter:grayscale(100%)}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:transparent;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:white;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:white;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px 0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-animated,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #cccccc}.jstree-default .jstree-context{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #cccccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:transparent;color:#666666}.jstree-default .jstree-disabled.jstree-hovered{background:transparent;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:bold}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none !important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:transparent;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:transparent}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:transparent;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top, #beebff 0, #a8e4ff 100%);background:linear-gradient(to bottom, #beebff 0, #a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url("32px.png")}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:transparent}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:transparent}.jstree-default .jstree-disabled.jstree-hovered{background:transparent}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default .jstree-file{background:url("32px.png") -100px -68px no-repeat}.jstree-default .jstree-folder{background:url("32px.png") -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:transparent;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default .jstree-ellipsis{overflow:hidden}.jstree-default .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==")}.jstree-default.jstree-rtl .jstree-last{background:transparent}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url("32px.png")}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:transparent}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:transparent}.jstree-default-small .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-small .jstree-file{background:url("32px.png") -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url("32px.png") -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:transparent;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small .jstree-ellipsis{overflow:hidden}.jstree-default-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==")}.jstree-default-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url("32px.png")}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:transparent}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:transparent}.jstree-default-large .jstree-disabled.jstree-hovered{background:transparent}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-large .jstree-file{background:url("32px.png") -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url("32px.png") -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:transparent;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large .jstree-ellipsis{overflow:hidden}.jstree-default-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-large.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==")}.jstree-default-large.jstree-rtl .jstree-last{background:transparent}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}#jstree-dnd.jstree-dnd-responsive>i{background:transparent;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url("40px.png");background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url("40px.png");background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url("40px.png")}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:transparent}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl,.jstree-default-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0 !important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px !important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0 !important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:bold;font-size:1.1em;text-shadow:1px 1px white}.jstree-default-responsive>.jstree-striped{background:transparent}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,0.7);border-bottom:1px solid rgba(64,64,64,0.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url("40px.png");background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:transparent}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url("40px.png") 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url("40px.png") -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}} \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/jstree/themes/default/throbber.gif b/InvenTree/InvenTree/static/script/jstree/themes/default/throbber.gif deleted file mode 100644 index cf06c1ad0f00be54b10f73e03c11d182d411fad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1464 zcmZvceN0nV9EQ&=r=^8TFHo@{ANQ70%LFN(7Ima80;R!PL9rm3)*-a&w4%$!u$DOG!y_yWJ*}DKj&Z!{KyycdONE2;suQ z0>0oY%h;NiE|O;?tl@hho}Kt#A?am%R7ds{W5+Z{)R=0oO1J-@s(6j&K*>RXzl3BT zzyL9xm7Yix2%*;PtW~c(I@)n*B9Lt|nX$@5x^P+w+`!wx60-9`uo!Bs<$^EHs)-UfnV9p;}KqjClm$MVbM$&>WbPV&ij*ka|M=U@X9sGyLDa1jBO)0C&2bFU5^USyT%ow`Y6z3+!yPy*Q>C*G{34S5-7|bGDZQ z;p6Czucr+YRHzuORgJ5K?Gb~I)~a}v9rie@5~I_JSG?&Y0H19O93PH4T#q0ADD;!P zk^f0VJ^TO`dJ=PNij?y~;w)~e*CcK*ZY52{2MQ$)2O(_;C7G%3Zo-!*0`gZhYhSL< znt;k5!N~ERdLnRmTxxns-8=KZykgLf4(wIkTqMjv3H^P0 z0}wE)29!5I&o+~aFX!~k)T{bi(Dhe zIH87(qxAGc0w`-lB2B++2#J?l`gGWV+B}h2SM(t^bWT#g9>Fcs52mlk>PRPILR$oj*LlzNEnI}n!K<3 z)aPyCTC2f!DRM}V09yub^?|M=!+Y@mELj`_)TX%OO>kCHio!~( znD>rK?x{ZA<6qyz3f`ZjI~5!kK{oSzRuM%1ivpD2V-;hMHZiNKhH-%|h?1H9lphlk zFgW#r;6}N_Nt!r84^6u^hv5%Xq^WPf0T0|iW8f(hZ6Nk)qHY$>y?>U{G)$G{h>Nyn zpO@v$E*p6=g#Y1VcDTfCbn@Au-m=SFxmH%8-f*3fsjN8kedp=8= - @@ -157,7 +156,6 @@ - diff --git a/InvenTree/templates/js/dynamic/nav.js b/InvenTree/templates/js/dynamic/nav.js index f9e71bbf8e..67194fe76d 100644 --- a/InvenTree/templates/js/dynamic/nav.js +++ b/InvenTree/templates/js/dynamic/nav.js @@ -149,23 +149,81 @@ function enableSidebar(label, options={}) { /** * Enable support for breadcrumb tree navigation on this page */ -function enableBreadcrumbTree(label) { - $('#breadcrumb-tree').jstree({ - 'core': { - 'data': { - 'url': '/api/part/category/tree/', - 'data': function(node) { - return {'id': node.id}; +function enableBreadcrumbTree(options) { + + var label = options.label; + + if (!label) { + console.log("ERROR: enableBreadcrumbTree called without supplying label"); + return; + } + + var filters = options.filters || {}; + + function list_to_tree(data) { + + + + return roots; + } + + inventreeGet( + options.url, + filters, + { + success: function(data) { + + // Data are returned from the InvenTree server as a flattened list; + // We need to convert this into a tree structure + + var nodes = {}; + var roots = []; + var node = null; + + for (var i = 0; i < data.length; i++) { + node = data[i]; + node.nodes = []; // Initialize with empty node set + + nodes[node.pk] = node; + node.selectable = false; + + if (options.processNode) { + node = options.processNode(node); + } + + node.state = { + expanded: node.pk == options.selected, + selected: node.pk == options.selected, + }; } - }, - 'themes': { - 'icons': false, - 'responsive': true, - }, + + for (var i = 0; i < data.length; i++) { + node = data[i]; + + if (node.parent != null) { + nodes[node.parent].nodes.push(node); + + if (node.state.expanded) { + nodes[node.parent].state.expanded = true; + } + + } else { + roots.push(node); + } + } + + $('#breadcrumb-tree').treeview({ + data: roots, + showTags: true, + enableLinks: true, + expandIcon: 'fas fa-chevron-right', + collapseIcon: 'fa fa-chevron-down', + }); + + setBreadcrumbTreeState(label, state); + } } - }).bind('select_node.jstree', function(e, data) { - window.location.href = data.node.a_attr.href; - }); + ); $('#breadcrumb-tree-toggle').click(function() { // Add callback to "collapse" and "expand" the sidebar @@ -180,8 +238,6 @@ function enableBreadcrumbTree(label) { // Set the initial state (default = expanded) var state = localStorage.getItem(`inventree-tree-state-${label}`) || 'expanded'; - setBreadcrumbTreeState(label, state); - function setBreadcrumbTreeState(label, state) { if (state == 'collapsed') { From 9e16989c914f0ddcdb654892310813179e8a5e6d Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Dec 2021 00:25:59 +1100 Subject: [PATCH 30/35] Add same breadcrumb tree for StockLocation and StockItem --- InvenTree/stock/api.py | 21 +++++++++++++++++++ InvenTree/stock/serializers.py | 14 +++++++++++++ .../stock/templates/stock/item_base.html | 20 ++++++++++++++++++ InvenTree/stock/templates/stock/location.html | 19 +++++++++++++++++ .../stock/templates/stock/stock_app_base.html | 3 ++- 5 files changed, 76 insertions(+), 1 deletion(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 26787878a8..9961bb7bae 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -277,6 +277,24 @@ class StockLocationList(generics.ListCreateAPIView): ] +class StockLocationTree(generics.ListAPIView): + """ + API endpoint for accessing a list of StockLocation objects, + ready for rendering as a tree + """ + + queryset = StockLocation.objects.all() + serializer_class = StockSerializers.LocationTreeSerializer + + filter_backends = [ + DjangoFilterBackend, + filters.OrderingFilter, + ] + + # Order by tree level (top levels first) and then name + ordering = ['level', 'name'] + + class StockFilter(rest_filters.FilterSet): """ FilterSet for StockItem LIST API @@ -1182,6 +1200,9 @@ class LocationDetail(generics.RetrieveUpdateDestroyAPIView): stock_api_urls = [ url(r'^location/', include([ + + url(r'^tree/', StockLocationTree.as_view(), name='api-location-tree'), + url(r'^(?P\d+)/', LocationDetail.as_view(), name='api-location-detail'), url(r'^.*$', StockLocationList.as_view(), name='api-location-list'), ])), diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index fb78eaeaa0..e69cd90f82 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -390,6 +390,20 @@ class SerializeStockItemSerializer(serializers.Serializer): ) +class LocationTreeSerializer(InvenTree.serializers.InvenTreeModelSerializer): + """ + Serializer for a simple tree view + """ + + class Meta: + model = StockLocation + fields = [ + 'pk', + 'name', + 'parent', + ] + + class LocationSerializer(InvenTree.serializers.InvenTreeModelSerializer): """ Detailed information about a stock location """ diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 64b45ed0c8..65f5f21000 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -9,9 +9,15 @@ {% endblock %} {% block breadcrumbs %} + {% include 'stock/loc_link.html' with location=item.location %} {% endblock %} +{% block breadcrumb_tree %} + +{% endblock breadcrumb_tree %} + + {% block heading %} {% trans "Stock Item" %}: {{ item.part.full_name}} {% endblock heading %} @@ -611,4 +617,18 @@ $('#serial-number-search').click(function() { findStockItemBySerialNumber({{ item.part.pk }}); }); +enableBreadcrumbTree({ + label: 'stockitem', + url: '{% url "api-location-tree" %}', + {% if item.location %} + selected: {{ item.location.pk }}, + {% endif %} + processNode: function(node) { + node.text = node.name; + node.href = `/stock/item/${node.pk}/`; + + return node; + } +}); + {% endblock %} diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 6a201e610c..39b9faedb4 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -7,6 +7,10 @@ {% include "stock/location_sidebar.html" %} {% endblock %} +{% block breadcrumb_tree %} + +{% endblock breadcrumb_tree %} + {% block heading %} {% if location %} {% trans "Stock Location" %}: {{ location.name }} @@ -348,4 +352,19 @@ enableSidebar('stocklocation'); + // Enable breadcrumb tree view + enableBreadcrumbTree({ + label: 'location', + url: '{% url "api-location-tree" %}', + {% if location %} + selected: {{ location.pk }}, + {% endif %} + processNode: function(node) { + node.text = node.name; + node.href = `/stock/location/${node.pk}/`; + + return node; + } + }); + {% endblock %} diff --git a/InvenTree/stock/templates/stock/stock_app_base.html b/InvenTree/stock/templates/stock/stock_app_base.html index 3da3fad240..93994ebd21 100644 --- a/InvenTree/stock/templates/stock/stock_app_base.html +++ b/InvenTree/stock/templates/stock/stock_app_base.html @@ -18,9 +18,10 @@ {% endblock %} {% block breadcrumbs %} + {% if item %} {% include 'stock/loc_link.html' with location=item.location %} {% else %} {% include 'stock/loc_link.html' with location=location %} {% endif %} -{% endblock %} +{% endblock breadcrumbs %} From b908aa24672ceffc219456816f408e945909a70c Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Dec 2021 00:33:16 +1100 Subject: [PATCH 31/35] fix js linting issues --- InvenTree/templates/js/dynamic/nav.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/InvenTree/templates/js/dynamic/nav.js b/InvenTree/templates/js/dynamic/nav.js index 67194fe76d..28f9a26d8d 100644 --- a/InvenTree/templates/js/dynamic/nav.js +++ b/InvenTree/templates/js/dynamic/nav.js @@ -154,19 +154,12 @@ function enableBreadcrumbTree(options) { var label = options.label; if (!label) { - console.log("ERROR: enableBreadcrumbTree called without supplying label"); + console.log('ERROR: enableBreadcrumbTree called without supplying label'); return; } var filters = options.filters || {}; - function list_to_tree(data) { - - - - return roots; - } - inventreeGet( options.url, filters, @@ -182,8 +175,7 @@ function enableBreadcrumbTree(options) { for (var i = 0; i < data.length; i++) { node = data[i]; - node.nodes = []; // Initialize with empty node set - + node.nodes = []; nodes[node.pk] = node; node.selectable = false; From e1a51926042a07c2f438af6390371c9e382131b3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Dec 2021 00:45:53 +1100 Subject: [PATCH 32/35] Calculate how many items to assign to sales order - Do not over-allocate by default --- InvenTree/templates/js/translated/order.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/templates/js/translated/order.js b/InvenTree/templates/js/translated/order.js index fefa82475c..008091bf15 100644 --- a/InvenTree/templates/js/translated/order.js +++ b/InvenTree/templates/js/translated/order.js @@ -1658,7 +1658,7 @@ function allocateStockToSalesOrder(order_id, line_items, options={}) { var available = Math.max((data.quantity || 0) - (data.allocated || 0), 0); // Remaining quantity to be allocated? - var remaining = opts.quantity || available; + var remaining = Math.max(line_item.quantity - line_item.shipped - line_item.allocated, 0); // Maximum amount that we need var desired = Math.min(available, remaining); From d573668f81f8f124aab208a2609f18bae6c198ed Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Dec 2021 01:05:19 +1100 Subject: [PATCH 33/35] Correctly allow "inherited" BOM items to be allocated to a build order - Some back-end logic was not running correctly --- InvenTree/build/models.py | 9 ++++++--- InvenTree/build/serializers.py | 14 ++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index d6dd0df0e3..392c773e6b 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -1150,7 +1150,7 @@ class BuildItem(models.Model): bom_item_valid = False - if self.bom_item: + if self.bom_item and self.build: """ A BomItem object has already been assigned. This is valid if: @@ -1162,10 +1162,13 @@ class BuildItem(models.Model): iii) The Part referenced by the StockItem is a valid substitute for the BomItem """ - if self.build and self.build.part == self.bom_item.part: - + if self.build.part == self.bom_item.part: bom_item_valid = self.bom_item.is_stock_item_valid(self.stock_item) + elif self.bom_item.inherited: + if self.build.part in self.bom_item.part.get_descendants(include_self=False): + bom_item_valid = self.bom_item.is_stock_item_valid(self.stock_item) + # If the existing BomItem is *not* valid, try to find a match if not bom_item_valid: diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index 2ea898f66c..452864e3c4 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -309,14 +309,20 @@ class BuildAllocationItemSerializer(serializers.Serializer): ) def validate_bom_item(self, bom_item): - - # TODO: Fix this validation - allow for variants and substitutes! + """ + Check if the parts match! + """ build = self.context['build'] - # BomItem must point to the same 'part' as the parent build + # BomItem should point to the same 'part' as the parent build if build.part != bom_item.part: - raise ValidationError(_("bom_item.part must point to the same part as the build order")) + + # If not, it may be marked as "inherited" from a parent part + if bom_item.inherited and build.part in bom_item.part.get_descendants(include_self=False): + pass + else: + raise ValidationError(_("bom_item.part must point to the same part as the build order")) return bom_item From 1dafa040f9f3fe5cc7d46b21630be7420ba728be Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Dec 2021 01:08:18 +1100 Subject: [PATCH 34/35] Move 'quantity' field --- InvenTree/build/templates/build/build_base.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index 428e40649f..48ef98b2b1 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -77,6 +77,11 @@ src="{% static 'img/blank_image.png' %}" {% trans "Part" %} {{ build.part.full_name }} + + + {% trans "Quantity" %} + {{ build.quantity }} + {% trans "Build Description" %} @@ -127,11 +132,6 @@ src="{% static 'img/blank_image.png' %}" {% block details_right %} - - - - - From 438bbb5c03cdf98c1d9a615478da214eb427506c Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Dec 2021 01:11:27 +1100 Subject: [PATCH 35/35] Translation merge (#2447) * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin --- InvenTree/locale/de/LC_MESSAGES/django.po | 2251 +++++++++++--------- InvenTree/locale/el/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/es/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/fr/LC_MESSAGES/django.po | 2263 ++++++++++++--------- InvenTree/locale/he/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/id/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/it/LC_MESSAGES/django.po | 2233 ++++++++++++-------- InvenTree/locale/ja/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/ko/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/nl/LC_MESSAGES/django.po | 2237 +++++++++++--------- InvenTree/locale/no/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/pl/LC_MESSAGES/django.po | 2245 +++++++++++--------- InvenTree/locale/pt/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/ru/LC_MESSAGES/django.po | 2237 +++++++++++--------- InvenTree/locale/sv/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/th/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/tr/LC_MESSAGES/django.po | 2233 ++++++++++++-------- InvenTree/locale/vi/LC_MESSAGES/django.po | 2227 ++++++++++++-------- InvenTree/locale/zh/LC_MESSAGES/django.po | 2231 ++++++++++++-------- 19 files changed, 25232 insertions(+), 17195 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 768f5a9304..60d2d7b8a4 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:46\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Datum eingeben" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Bestätigen" @@ -85,8 +86,8 @@ msgstr "E-Mail Adressen müssen übereinstimmen." msgid "Duplicate serial: {n}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -122,7 +123,7 @@ msgstr "Fehlende Datei" msgid "Missing external link" msgstr "Fehlender externer Link" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Anhang" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Link" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Link zu einer externen URL" @@ -152,10 +153,10 @@ msgstr "Kommentar" msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Benutzer" @@ -194,10 +195,15 @@ msgstr "Ungültige Auswahl" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Name" @@ -206,22 +212,23 @@ msgstr "Name" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Beschreibung" @@ -241,83 +248,83 @@ msgstr "Muss eine gültige Nummer sein" msgid "Filename" msgstr "Dateiname" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Deutsch" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Griechisch" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Englisch" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Spanisch" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "Spanisch (Mexikanisch)" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Französisch" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Hebräisch" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Italienisch" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Japanisch" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Koreanisch" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Niederländisch" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Norwegisch" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Polnisch" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "Portugiesisch" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Schwedisch" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Thailändisch" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Türkisch" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Vietnamesisch" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Chinesisch" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "InvenTree Status-Überprüfung fehlgeschlagen" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "Ausstehend" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Platziert" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Fertig" @@ -361,8 +370,8 @@ msgstr "Verloren" msgid "Returned" msgstr "Zurückgegeben" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Versendet" @@ -442,7 +451,7 @@ msgstr "Vom übergeordneten Element geteilt" msgid "Split child item" msgstr "Unterobjekt geteilt" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "Zum Kunden geschickt" @@ -522,55 +531,55 @@ msgstr "Passwort eingeben" msgid "Password fields must match" msgstr "Passwörter stimmen nicht überein" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Systeminformationen" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "barcode_data Parameter angeben" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "Keine Treffer für Barcode" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Treffer für Barcode gefunden" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "Lagerartikel-Parameter muss angegeben werden" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Keine passende Lagerartikel gefunden" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" -msgstr "Barcode entspricht bereits einem Lagerartikel" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" +msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" -msgstr "Barcode entspricht bereits Bestandslagerort" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" +msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "Barcode entspricht bereits Teil" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" +msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" -msgstr "Barcode ist bereits Lagerartikel zugeordnet" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" -msgstr "Barcode Lagerartikel zugeordnet" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" +msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "Barcode Lagerartikel zugeordnet" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "Anzahl" @@ -603,9 +615,9 @@ msgstr "Anzahl" msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "Seriennummer" @@ -640,17 +652,17 @@ msgstr "Ungültige Wahl für übergeordneten Bauauftrag" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "Bauauftrag" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "Bauaufträge" @@ -658,13 +670,13 @@ msgstr "Bauaufträge" msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referenz" @@ -683,7 +695,7 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Teil" @@ -721,7 +735,8 @@ msgstr "Auftrag Referenz" msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Quell-Lagerort" @@ -761,7 +776,7 @@ msgstr "Bauauftrags-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "Losnummer" @@ -769,12 +784,12 @@ msgstr "Losnummer" msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" @@ -782,8 +797,8 @@ msgstr "geplantes Fertigstellungsdatum" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "Fertigstellungsdatum" @@ -791,7 +806,7 @@ msgstr "Fertigstellungsdatum" msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "Aufgegeben von" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Verantwortlicher Benutzer" @@ -815,7 +830,7 @@ msgstr "Nutzer der für diesen Bauauftrag zuständig ist" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "Externer Link" @@ -823,18 +838,19 @@ msgstr "Externer Link" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "Notizen" @@ -867,7 +883,7 @@ msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "Ausgewähltes Bestands-Objekt nicht in Stückliste für Teil '{p}' gefunden" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "Bauauftrag" @@ -889,14 +905,17 @@ msgstr "Bauauftrag" msgid "Build to allocate parts" msgstr "Bauauftrag starten um Teile zuzuweisen" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "Lagerartikel" @@ -936,16 +955,17 @@ msgstr "Dieses Endprodukt wurde bereits fertiggestellt" msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "Lagerort" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "Status" @@ -984,16 +1004,16 @@ msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" @@ -1006,7 +1026,7 @@ msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Endprodukt kann bei Zuweisung nicht-verfolgter Teile nicht angegeben werden" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" @@ -1079,11 +1099,11 @@ msgstr "Bestand wurde Bauauftrag noch nicht vollständig zugewiesen" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "Zieldatum" @@ -1096,28 +1116,28 @@ msgstr "Bauauftrag war fällig am %(target)s" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "Überfällig" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "Fertig" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "Auftrag" @@ -1191,8 +1211,8 @@ msgstr "Ausgangs-Lager" msgid "Stock can be taken from any available location." msgstr "Bestand kann jedem verfügbaren Lagerort entnommen werden." -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Ziel-Lager" @@ -1200,22 +1220,22 @@ msgstr "Ziel-Lager" msgid "Destination location not specified" msgstr "Ziel-Lagerort nicht angegeben" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "Zugewiesene Teile" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "Losnummer" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "Erstellt" @@ -1235,7 +1255,7 @@ msgstr "Unter-Bauaufträge" msgid "Allocate Stock to Build" msgstr "Bestand Bauauftrag zuweisen" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "Bestandszuordnung aufheben" @@ -1257,7 +1277,7 @@ msgstr "Benötigte Teile bestellen" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "Teile bestellen" @@ -1309,8 +1329,8 @@ msgstr "Fertiggestellte Endprodukte" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "Bauauftrags-Notizen" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "Endprodukt anlegen" msgid "Maximum output quantity is " msgstr "Maximale Endproduktmenge ist " -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" @@ -1400,7 +1420,7 @@ msgstr "Endprodukt entfernen" msgid "Confirm unallocation of build stock" msgstr "Entfernung von Bestands-Zuordnung bestätigen" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "Bestätigungsbox bestätigen" @@ -1469,7 +1489,7 @@ msgstr "{name.title()} Datei" msgid "Select {name} file to upload" msgstr "{name} Datei zum Hochladen auswählen" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" @@ -1557,7 +1577,7 @@ msgstr "Von URL herunterladen" msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" @@ -1623,7 +1643,7 @@ msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "Vorlage" @@ -1633,7 +1653,7 @@ msgstr "Teile sind standardmäßig Vorlagen" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "Baugruppe" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "Komponente" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "Verkäuflich" @@ -1670,7 +1690,7 @@ msgstr "Artikel sind grundsätzlich verkaufbar" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "Nachverfolgbar" @@ -1932,230 +1952,262 @@ msgstr "Gruppe bei Registrierung" msgid "Group to which new users are assigned on registration" msgstr "Gruppe der neue Benutzer bei der Registrierung zugewiesen werden" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "Abonnierte Teile anzeigen" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "Zeige abonnierte Teile auf der Startseite" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "Abonnierte Kategorien anzeigen" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "Zeige abonnierte Teilkategorien auf der Startseite" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "Neueste Teile anzeigen" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "Zeige neueste Teile auf der Startseite" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "Aktuelle Teile-Stände" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "Anzahl der neusten Teile auf der Startseite" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "Nicht validierte Stücklisten anzeigen" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "Zeige Stücklisten, die noch nicht validiert sind, auf der Startseite" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "Neueste Bestandänderungen anzeigen" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "Zeige zuletzt geänderte Lagerbestände auf der Startseite" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "aktueller Bestand" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "Anzahl des geänderten Bestands auf der Startseite" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "Niedrigen Bestand anzeigen" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "Zeige geringen Bestand auf der Startseite" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "Lerren Bestand anzeigen" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "Zeige aufgebrauchte Lagerartikel auf der Startseite" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "Benötigten Bestand anzeigen" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "Zeige Bestand für Bauaufträge auf der Startseite" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "Abgelaufenen Bestand anzeigen" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "Zeige abgelaufene Lagerbestände auf der Startseite" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "Alten Bestand anzeigen" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "Zeige überfällige Lagerartikel auf der Startseite" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "Ausstehende Bauaufträge anzeigen" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "Zeige ausstehende Bauaufträge auf der Startseite" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "Zeige überfällige Bauaufträge" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "Zeige überfällige Bauaufträge auf der Startseite" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "Ausstehende POs anzeigen" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "Zeige ausstehende POs auf der Startseite" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "Überfällige POs anzeigen" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "Zeige überfällige POs auf der Startseite" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "Ausstehende SOs anzeigen" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "Zeige ausstehende SOs auf der Startseite" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "Überfällige SOs anzeigen" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "Zeige überfällige SOs auf der Startseite" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "Label inline anzeigen" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-Labels im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "Berichte inline anzeigen" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-Berichte im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "Anzahl Suchergebnisse" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "Anzahl der Ergebnisse, die in der Vorschau angezeigt werden sollen" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "Suche Bestand anzeigen" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "Bestand in Suchvorschau anzeigen" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "Inaktive Teile in der Suchvorschau ausblenden" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "Esc-Taste schließt Formulare" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "Benutze die Esc-Taste, um Formulare zu schließen" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "Fixierter Navigationsleiste" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "Position der InvenTree Navigationsleiste am oberen Bildschirmrand fixieren" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "Preis" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "Datei hochgeladen" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "Vorheriger Schritt" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "URL" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "Firmenbeschreibung" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "Website" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "Währung" @@ -2293,12 +2347,12 @@ msgstr "Währung" msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "Teil auswählen" @@ -2319,7 +2373,7 @@ msgstr "Hersteller auswählen" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "MPN" @@ -2349,8 +2403,8 @@ msgstr "Parametername" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "Wert" @@ -2360,7 +2414,7 @@ msgstr "Parameterwert" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "Einheiten" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "Zulieferer" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "Zulieferer auswählen" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "SKU (Lagerbestandseinheit)" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "Verpackungen" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "Firma" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "Bestellung anlegen" @@ -2493,11 +2547,12 @@ msgstr "Neues Bild hochladen" msgid "Download image from URL" msgstr "Bild von URL herunterladen" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "Kunde" @@ -2580,7 +2635,7 @@ msgstr "Zulieferer-Bestand" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "Bestellungen" @@ -2602,7 +2657,7 @@ msgstr "Neue Bestellung" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "Aufträge" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "Neuer Auftrag" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "Zugeordneter Bestand" @@ -2644,7 +2699,7 @@ msgstr "Zulieferer-Liste" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "Hersteller" @@ -2673,7 +2728,7 @@ msgstr "Internes Teil" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "Zulieferer" @@ -2687,7 +2742,7 @@ msgstr "Zuliefererteil entfernen" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "Löschen" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "Zugewiesene Lagerartikel" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "Zuliefererteil" @@ -2767,7 +2822,7 @@ msgstr "Neuen Lagerartikel hinzufügen" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "Neuer Lagerartikel" @@ -2817,11 +2872,11 @@ msgstr "Preisstaffel löschen" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "Bestand" @@ -2844,7 +2899,7 @@ msgstr "Bepreisung" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "Lagerartikel" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "Neuer Hersteller" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "Kunden" @@ -2960,284 +3015,374 @@ msgstr "Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "Teile-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "Bestellung aufgeben" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "Bestellung als vollständig markieren" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "Bestellung stornieren" -#: order/forms.py:70 -msgid "Ship order" -msgstr "Bestellung versenden" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "Seriennummern für Lagerartikel eingeben" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "Menge der Lagerartikel eingeben" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "Bestellungs-Beschreibung" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "Erstellt von" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "Bestell-Notizen" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "Empfangen von" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "Ziel-Versanddatum" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "Zieldatum für Auftrags-Fertigstellung." -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "Versand von" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" -msgstr "Bestellung kann nicht versendet werden weil er nicht anhängig ist" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "Bestellung" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "Bestellung" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "Empfangen" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "Wo möchte der Käufer diesen Artikel gelagert haben?" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kann Lagerartikel keiner Zeile mit einem anderen Teil hinzufügen" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "Zu viele Lagerartikel zugewiesen" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "Position" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "Position" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "Position" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "Barcode-Hash" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "Einzigartiger Identifikator" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "Elemente empfangen" msgid "Receive Items" msgstr "Teile empfangen" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "Auftrag fertigstellen" @@ -3290,12 +3436,23 @@ msgstr "Bestellungsbeschreibung" msgid "Order Status" msgstr "Bestellstatus" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "Aufgegeben" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "Bestellung bearbeiten" @@ -3371,8 +3528,9 @@ msgstr "Auswahl duplizieren" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "Zeile entfernen" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "Bestellungen auswählen oder anlegen." #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "Positionen" @@ -3489,7 +3648,7 @@ msgstr "Bestellungs-Positionen" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "Position hinzufügen" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "Empfangene Teile" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "Notizen zur Bestellung" @@ -3520,25 +3679,30 @@ msgid "Print packing list" msgstr "Paketliste drucken" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" -msgstr "Versenden" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" +msgstr "" #: order/templates/order/sales_order_base.html:102 msgid "This Sales Order has not been fully allocated" msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "Kundenreferenz" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "Auftrag bearbeiten" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar i msgid "Sales Order Items" msgstr "Auftrags-Positionen" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." -msgstr "Dieser Auftrag ist nicht vollständig zugeordnet. Wenn der Auftrag als versendet markiert wird, kann er nicht mehr geändert werden." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" +msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." -msgstr "Vor dem Versand sicherstellen, dass die Zuordnung richtig ist." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" +msgstr "Aktionen" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" -msgstr "Einige Positionen dieses Auftrags sind überzugeordnet" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" +msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "Vor dem Versand sicherstellen, dass dies richtig ist." - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "Versenden dieses Auftrags bedeutet, dass der Auftrag nicht mehr bearbeitbar ist." - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "Teilebestand per Seriennummer zuweisen" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "Bestellung stornieren" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "Bestellstornierung bestätigen" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "Auftrag stornieren" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "Bestellung aufgeben" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "Bestellungstätigung bestätigen" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "Bestellung plaziert" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "Fertigstellung bestätigen" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "Bestellung als vollständig markieren" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "Versand bestätigen" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "Versand fehlgeschlagen" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "Zuliefererteile zuordnen" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "Preise aktualisieren" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "{n} Teile bestellt" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "Seriennummern zuweisen" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "{n} Positionen zugeordnet" - -#: order/views.py:907 -msgid "Select line item" -msgstr "Position auswählen" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "Kein passends Teil für Seriennummer {serial} gefunden" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "{serial} ist nicht auf Lager" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "{serial} bereits einem Auftrag zugeordnet" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "Auftrag nicht gefunden" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "Preis nicht gefunden" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "Stückpreis für {part} auf {price} aktualisiert" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "{part} Stückpreis auf {price} und Menge auf {qty} aktualisiert" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "Muss größer als 0 sein" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "Muss eine gültige Nummer sein" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "Standort für anfänglichen Bestand angeben" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "Dieses Feld ist erforderlich" @@ -3828,8 +3946,8 @@ msgstr "Teil-Kategorien" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "Teile" @@ -3895,7 +4013,7 @@ msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "Kategorie" @@ -3906,7 +4024,7 @@ msgstr "Teile-Kategorie" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "IPN (Interne Produktnummer)" @@ -3975,10 +4093,11 @@ msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "Aktiv" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "Ein Test mit diesem Namen besteht bereits für dieses Teil" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "Test-Name" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Benötigt" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "Einheit des Parameters" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "Parameter Vorlage" @@ -4098,7 +4217,7 @@ msgstr "Wert" msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "Standard-Wert" @@ -4175,7 +4294,7 @@ msgstr "Varianten zulassen" msgid "Stock items for variant parts can be used for this BOM item" msgstr "Bestand von Varianten kann für diese Stücklisten-Position verwendet werden" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" @@ -4724,8 +4843,8 @@ msgstr "Teildetails anzeigen" msgid "This part is a variant of %(link)s" msgstr "Dieses Teil ist eine Variante von %(link)s" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "Auf Lager" @@ -5101,6 +5220,78 @@ msgstr "Interne Preisspanne bearbeiten" msgid "Delete Internal Price Break" msgstr "Interne Preisspanne löschen" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5199,12 +5390,12 @@ msgid "Stock Item Test Report" msgstr "Lagerartikel Test-Bericht" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "Seriennummer" @@ -5213,17 +5404,19 @@ msgid "Test Results" msgstr "Testergebnisse" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "Test" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "Ergebnis" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "Datum" @@ -5241,302 +5434,318 @@ msgid "Installed Items" msgstr "Verbaute Objekte" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "Seriennummer" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "Ablaufdatum" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "Ablaufdatum für diesen Lagerartikel" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "Eindeutige Seriennummern eingeben (oder leer lassen)" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "Lagerort für serial" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "Seriennummern" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "Anzahl der eindeutigen Seriennummern (muss mit der Anzahl übereinstimmen)" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "Lagerartikel für Einbau" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "Anzahl darf die verfügbare Anzahl nicht überschreiten" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "Ziel Lagerort für unverbaute Objekte" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "nicht mehr verbauen bestätigen" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "Entfernen der verbauten Lagerartikel bestätigen" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "Besitzer auswählen" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "Teile-Typ ('{pf}') muss {pe} sein" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Seriennummer kann nicht gesetzt werden wenn die Anzahl größer als 1 ist" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "Teil muss eine Referenz haben wenn is_building wahr ist" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "Die Verpackung dieses Lagerartikel ist gelagert in" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ablaufdatum für Lagerartikel. Bestand wird danach als abgelaufen gekennzeichnet" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "Lagerartikel-Notizen" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "Zur Löschung vorgesehen" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "Dieser Lagerartikel wird vom Hintergrund-Prozess gelöscht" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Anzahl darf nicht die verfügbare Anzahl überschreiten ({n})" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Seriennummern {exists} existieren bereits" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "Lagerartikel kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "Name des Tests" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "Test Notizen" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "Kaufpreis für diesen Lagerartikel" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "Eine Liste der Lagerbestände muss angegeben werden" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "Eine Liste der Lagerbestände muss angegeben werden" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "Informationen zur Bestand-Verfolgung" @@ -5574,7 +5783,7 @@ msgstr "Testdaten hinzufügen" msgid "Installed Stock Items" msgstr "Installierte Lagerartikel" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "Lagerartikel installieren" @@ -5634,7 +5843,7 @@ msgstr "Bestand serialisieren" msgid "Transfer stock" msgstr "Bestand verschieben" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "Kunden zuweisen" @@ -5696,7 +5905,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Dieser Lagerartikel lief am %(item.expiry_date)s ab" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "abgelaufen" @@ -5706,12 +5915,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "Dieser Lagerartikel läuft am %(item.expiry_date)s ab" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "überfällig" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "Zuletzt aktualisiert" @@ -5740,14 +5949,12 @@ msgid "This stock item has not passed all required tests" msgstr "Dieser Lagerartikel hat nicht alle Tests bestanden" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" -msgstr "Dieser Lagerartikel ist dem Auftrag %(link)s zugewiesen (Menge: %(qty)s)" +msgid "This stock item is allocated to Sales Order" +msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" -msgstr "Dieser Lagerartikel ist dem Bauauftrag %(link)s zugewiesen (Menge: %(qty)s)" +msgid "This stock item is allocated to Build Order" +msgstr "" #: stock/templates/stock/item_base.html:269 msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." @@ -5762,7 +5969,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "Dieser Bestand wird automatisch gelöscht wenn der Bestand aufgebraucht ist." #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "Kein Lagerort gesetzt" @@ -5912,7 +6119,7 @@ msgstr "Untergeordnete Objekte" msgid "The following stock items will be uninstalled" msgstr "Die folgenden Lagerartikel werden nicht mehr verbaut" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "Lagerartikel umwandeln" @@ -5937,8 +6144,7 @@ msgstr "Sind Sie sicher, dass Sie diesen Lagerartikel-Verfolgungs-Eintrag lösch msgid "Edit Stock Location" msgstr "Lagerartikel-Ort bearbeiten" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "Eigentümer notwendig (Eigentümerkontrolle aktiv)" @@ -5947,86 +6153,78 @@ msgid "Stock Location QR code" msgstr "QR-Code für diesen Lagerort" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "Kunden zuweisen" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "Kunde muss angegeben werden" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "zurück ins Lager" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "gültigen Lagerort angeben" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "Lagerartikel retoure vom Kunden" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "alle Testdaten löschen" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "Löschen Testdaten bestätigen" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "Lagerartikel-QR-Code" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "Lagerartikel deinstallieren" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "Bestands-Anpassung bestätigen" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "Lagerartikel deinstalliert" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "Lagerartikel bearbeiten" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "Neuen Lagerort erstellen" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "Neuen Lagerartikel hinzufügen" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "Bestand duplizieren" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "Anzahl kann nicht negativ sein" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "Bestand-Lagerort löschen" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "Lagerartikel löschen" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "Bestand-Tracking-Eintrag löschen" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "Bestand-Verfolgungs-Eintrag bearbeiten" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "Bestand-Verfolgungs-Eintrag hinzufügen" @@ -6046,6 +6244,14 @@ msgstr "Seite nicht gefunden" msgid "The requested page does not exist" msgstr "Seite existiert nicht" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "Index" @@ -6155,7 +6361,7 @@ msgid "Server Settings" msgstr "Server Einstellungen" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "Anmeldeeinstellungen" @@ -6163,6 +6369,24 @@ msgstr "Anmeldeeinstellungen" msgid "Signup" msgstr "Anmelden" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "Einstellungen" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "Teil-Einstellungen" @@ -6179,6 +6403,126 @@ msgstr "Teil importieren" msgid "Part Parameter Templates" msgstr "Teil-Parametervorlage" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "Admin" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "Commit-Datum" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "Commit-Hash" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "Bestellungs-Einstellungen" @@ -6196,86 +6540,82 @@ msgstr "Kein Wert angegeben" msgid "Edit setting" msgstr "Einstellungen ändern" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "Einstellungen" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "Allgemeine Einstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "Benutzereinstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "Keine Kategorie-Parametervorlagen gefunden" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "Vorlage bearbeiten" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "Vorlage löschen" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "Keine Teilparametervorlagen gefunden" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "ID" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "Benutzer-Einstellungen" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "Kontoeinstellungen" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "Anzeigeeinstellungen" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "Startseite" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "Sucheinstellungen" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "Etikettendruck" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "Berichte" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Allgemeine Einstellungen" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "Serverkonfiguration" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "Währungen" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "Kategorien" @@ -6493,8 +6833,8 @@ msgstr "InvenTree-Versionsinformationen" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Schliessen" @@ -6515,14 +6855,6 @@ msgstr "Aktuell" msgid "Update Available" msgstr "Aktualisierung verfügbar" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "Commit-Hash" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "Commit-Datum" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "InvenTree-Dokumentation" @@ -6720,8 +7052,9 @@ msgstr "Benötigte Menge" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "Verfügbar" @@ -6767,11 +7100,11 @@ msgstr "Der angegebene Server muss erreichbar sein" msgid "Remote image must not exceed maximum allowable file size" msgstr "Das Bild darf nicht größer als die maximal-erlaubte Größe sein" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "Keine Antwort" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "keine Antwort vom InvenTree Server" @@ -6783,35 +7116,35 @@ msgstr "Fehler 400: Fehlerhafte Anfrage" msgid "API request returned error code 400" msgstr "Fehler-Code 400 zurückgegeben" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "Fehler 401: Nicht Angemeldet" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "Authentication Kredentials nicht angegeben" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "Fehler 403: keine Berechtigung" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "Fehlende Berechtigung für diese Aktion" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "Fehler 404: Ressource nicht gefunden" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "Die angefragte Ressource kann auf diesem Server nicht gefunden werden" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "Fehler 408: Zeitüberschreitung" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "Verbindungszeitüberschreitung bei der Datenanforderung" @@ -6880,7 +7213,7 @@ msgid "Unknown response from server" msgstr "Unbekannte Antwort von Server erhalten" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "Ungültige Antwort von Server" @@ -6888,7 +7221,7 @@ msgstr "Ungültige Antwort von Server" msgid "Scan barcode data below" msgstr "Barcode unterhalb scannen" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "Barcode scannen" @@ -6908,7 +7241,7 @@ msgstr "Dadurch wird die Verknüpfung zwischen diesem Lagerartikel und dem Barco msgid "Unlink" msgstr "Entfernen" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "Lagerartikel entfernen" @@ -6978,7 +7311,7 @@ msgstr "Stücklisten Ersatzteile bearbeiten" msgid "Substitutes Available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "Varianten erlaubt" @@ -7002,11 +7335,6 @@ msgstr "Durchschnittlicher Kaufpreis" msgid "View BOM" msgstr "Stückliste anzeigen" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "Aktionen" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "Stücklisten-Position kontrollieren" @@ -7027,7 +7355,7 @@ msgstr "Stücklisten-Position bearbeiten" msgid "Delete BOM Item" msgstr "Stücklisten-Position löschen" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "Keine Stücklisten-Position(en) gefunden" @@ -7035,7 +7363,7 @@ msgstr "Keine Stücklisten-Position(en) gefunden" msgid "Are you sure you want to delete this BOM item?" msgstr "Sind Sie sicher, dass Sie diese Stücklisten-Position löschen wollen?" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "benötigtes Teil" @@ -7043,165 +7371,165 @@ msgstr "benötigtes Teil" msgid "Inherited from parent BOM" msgstr "Geerbt von übergeordneter Stückliste" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "Bauauftrag bearbeiten" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "Bauauftrag erstellen" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "Lagerartikel zu diesem Endprodukt zuweisen" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "Bestand von Endpordukt zurücknehmen" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "Endprodukt fertigstellen" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "Endprodukt entfernen" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "Sind Sie sicher, dass sie alle Lagerartikel von diesem Bauauftrag entfernen möchten?" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "Lagerartikel zurücknehmen" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "Endprodukte auswählen" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "Mindestens ein Endprodukt muss ausgewählt werden" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "Endprodukt" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "Endprodukte fertigstellen" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "Keine Allokationen für Bauauftrag gefunden" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "Standort nicht angegeben" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "Keine aktiven Endprodukte gefunden" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "Bestands-Zuordnung bearbeiten" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "Zuordnung bearbeiten" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "Zuordnung entfernen" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "Anzahl pro" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "Zugeordnet" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "Bestand bauen" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "Bestand bestellen" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "Bestand zuweisen" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Teile auswählen" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "Sie müssen mindestens ein Teil auswählen" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "Wählen Sie den Quellort aus (leer lassen um von allen Standorten zu nehmen)" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "Bestandszuordnung bestätigen" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "Lagerartikel für Bauauftrag zuweisen" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "Keine passenden Lagerstandorte" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "Keine passenden Lagerbestände" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "Keine Bauaufträge passen zur Anfrage" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "Auswählen" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "Bauauftrag ist überfällig" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "Keine Information" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "Keine Teile zugeordnet zu" @@ -7221,7 +7549,7 @@ msgstr "Herstellerteil ändern" msgid "Delete Manufacturer Part" msgstr "Herstellerteil löschen" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "Zulieferer hinzufügen" @@ -7356,20 +7684,20 @@ msgstr "Anzeigevorgang nicht erlaubt" msgid "Enter a valid number" msgstr "Gib eine gültige Nummer ein" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Fehler in Formular" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "Keine Ergebnisse gefunden" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "Suche" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "Eingabe leeren" @@ -7382,7 +7710,7 @@ msgid "NO" msgstr "NEIN" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "Lagerartikel auswählen" @@ -7431,62 +7759,62 @@ msgstr "Label auswählen" msgid "Select Label Template" msgstr "Label-Vorlage auswählen" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "Abbrechen" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Abschicken" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "Formulartitel" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "Warte auf Server..." -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "Fehler-Informationen anzeigen" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "Akzeptieren" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "Lade Daten" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "ungültige Antwort vom Server" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "Formulardaten fehlen bei Serverantwort" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "Formulardaten fehlerhaft" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "JSON Antwort enthält keine Formulardaten" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "Fehler 400: Ungültige Anfrage" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "Fehler 400 von Server erhalten" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "Fehler bei Formulardaten-Anfrage" @@ -7514,176 +7842,245 @@ msgstr "Teil-ID" msgid "Order ID" msgstr "Bestell-ID" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "Kategorie-ID" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "Herstellerteil-ID" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "Zuliefererteil-ID" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "Kunden hinzufügen" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "Auftrag anlegen" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "Bestellung exportieren" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "Format" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "Dateiformat auswählen" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "Positionen auswählen" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "Mindestens eine Position muss ausgewählt werden" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "Zu erhaltende Menge" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "Status" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "Bestellnummer" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "Bestellt" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "Empfangen" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "Empfang der Teile bestätigen" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "Bestellpositionen erhalten" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "Keine Bestellungen gefunden" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "Bestellung überfällig" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "Position bearbeiten" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "Position löschen" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "Keine Positionen gefunden" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "Summe" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "Stück-Preis" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "Gesamtpreis" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "Position bearbeiten" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "Position löschen" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "Position empfangen" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "Keine Aufträge gefunden" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "Ungültiger Kunde" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "Keine Allokationen für Verkaufsaufträge gefunden" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "Bestandszuordnung bearbeiten" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "Löschvorgang bestätigen" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "Bestands-Zuordnung löschen" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "an Kunde versand" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "Lagerstandort nicht angegeben" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "Erledigt" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "Seriennummern zuweisen" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "Bestand kaufen" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "Preis berechnen" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " -msgstr "Position löschen " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" +msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" -msgstr "Bestand zuweisen" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" +msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "Seriennummern zuweisen" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "Stückpreis aktualisieren" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "Keine passenden Positionen gefunden" @@ -7828,12 +8225,12 @@ msgid "No category" msgstr "Keine Kategorie" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "Bestand niedrig" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "Listenansicht" @@ -7841,7 +8238,7 @@ msgstr "Listenansicht" msgid "Display as grid" msgstr "Rasteransicht" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "Baumansicht" @@ -7849,7 +8246,7 @@ msgstr "Baumansicht" msgid "Subscribed category" msgstr "Abonnierte Kategorie" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "Pfad" @@ -7857,11 +8254,11 @@ msgstr "Pfad" msgid "No test templates matching query" msgstr "Keine zur Anfrage passenden Testvorlagen" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "Testergebnis bearbeiten" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "Testergebnis löschen" @@ -7900,6 +8297,10 @@ msgstr "Einzelpreis" msgid "Single Price Difference" msgstr "Einzelpreisdifferenz" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "Lagerartikel ausgewählt" @@ -7966,300 +8367,316 @@ msgstr "Aufträge auswählen" msgid "Sales Order(s) must be selected before printing report" msgstr "Auftrag muss vor dem Berichtsdruck ausgewählt werden" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "Lagerartikel serialisieren" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "Nächste verfügbare Seriennummer" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "Letzte Seriennummer" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "Lager-Serialisierung bestätigen" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "Übergeordneter Lagerort" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "Neuer Lagerstandort" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "Dieser Teil kann nicht serialisiert werden" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "Ausgangsmenge für diesen Lagerartikel eingeben" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Seriennummern für neue Lagerartikel eingeben (oder leer lassen)" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "Neuer Lagerartikel erstellt" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "Mehrere Lagerartikel erstellt" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "Seriennummer finden" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "Seriennummer eingeben" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "Eine Seriennummer eingeben" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "Keine passende Seriennummer" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "Mehrere Ergebnisse gefunden" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "Bestand exportieren" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "Einschließlich Unterstandorte" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "Lagerartikel in untergeordneten Lagerorten einschließen" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "Bestand verschieben" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "Verschieben" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "Bestand zählen" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "Anzahl" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "Bestand entfernen" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "Entfernen" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "Bestand hinzufügen" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "Hinzufügen" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "Bestand löschen" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "Menge von serialisiertem Bestand kann nicht bearbeitet werden" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "Bestandsanzahl angeben" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "Sie müssen mindestens einen Lagerartikel auswählen" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "ERFOLGREICH" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "FEHLGESCHLAGEN" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "KEIN ERGEBNIS" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "Testergebnis hinzufügen" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "Keine Testergebnisse gefunden" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "Testdatum" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "In Arbeit" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "In Lagerartikel installiert" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "an Kunde versand" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "Auftrag zugewiesen" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "Kein Lagerort gesetzt" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "Lagerartikel wird produziert" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "Lagerartikel wurde Auftrag zugewiesen" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "Lagerartikel wurde Kunden zugewiesen" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "Lagerartikel ist abgelaufen" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "Lagerartikel läuft demnächst ab" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" -msgstr "Lagerartikel zugewiesen" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" +msgstr "Serialisierter Lagerartikel wurde zugewiesen" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "Lagerartikel wurde vollständig zugewiesen" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "Lagerartikel wurde teilweise zugewiesen" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "Lagerartikel in anderem Element verbaut" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "Lagerartikel abgewiesen" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "Lagerartikel verloren" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "Lagerartikel zerstört" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "gelöscht" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "Inventur" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "Zuliefererteil nicht angegeben" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "Keine zur Anfrage passenden Lagerartikel" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "Teile" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "lose" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "Lagerorte" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "unbekannter Lagerort" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "Status setzen" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "Status Code setzen" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "Status Code muss ausgewählt werden" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "Ungültiges Datum" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "Details" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "Standort nicht mehr vorhanden" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "Bestellung existiert nicht mehr" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "Kunde existiert nicht mehr" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "Lagerartikel existiert nicht mehr" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "Hinzugefügt" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "Entfernt" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "Tracking-Eintrag bearbeiten" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "Tracking-Eintrag löschen" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "Keine installierten Elemente" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "Lagerartikel entfernen" @@ -8280,7 +8697,7 @@ msgid "Allow Variant Stock" msgstr "Bestand an Varianten zulassen" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "Unter-Lagerorte einschließen" @@ -8290,54 +8707,54 @@ msgstr "Lagerorte einschließen" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "Unterkategorien einschließen" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "Abonniert" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "Hat Seriennummer" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "Seriennummer >=" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "Seriennummer größer oder gleich" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "Seriennummer <=" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "Seriennummern kleiner oder gleich" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "Seriennummer" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "Losnummer" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "Aktive Teile" @@ -8358,101 +8775,111 @@ msgid "Item has been allocated" msgstr "Teil wurde zugeordnet" #: templates/js/translated/table_filters.js:179 +msgid "Stock is available for use" +msgstr "Lagerartikel ist zur Verwendung verfügbar" + +#: templates/js/translated/table_filters.js:184 msgid "Include stock in sublocations" msgstr "Bestand in Unter-Lagerorten einschließen" -#: templates/js/translated/table_filters.js:184 +#: templates/js/translated/table_filters.js:189 msgid "Show stock items which are depleted" msgstr "Zeige aufgebrauchte Lagerartikel" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:194 msgid "Show items which are in stock" msgstr "Zeige Objekte welche im Lager sind" -#: templates/js/translated/table_filters.js:193 +#: templates/js/translated/table_filters.js:198 msgid "In Production" msgstr "In Arbeit" -#: templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:199 msgid "Show items which are in production" msgstr "Elemente, die in Produktion sind, anzeigen" -#: templates/js/translated/table_filters.js:198 +#: templates/js/translated/table_filters.js:203 msgid "Include Variants" msgstr "Varianten einschließen" -#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:204 msgid "Include stock items for variant parts" msgstr "Lagerartikel für Teil-Varianten einschließen" -#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:208 msgid "Installed" msgstr "Installiert" -#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:209 msgid "Show stock items which are installed in another item" msgstr "Lagerartikel, die in anderen Elementen verbaut sind, anzeigen" -#: templates/js/translated/table_filters.js:209 +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "zeige zu Kunden zugeordnete Einträge" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "Status" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "Hat Einkaufspreis" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "Bestand mit Einkaufspreis anzeigen" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "Zeige abgelaufene Lagerartikel" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "Bestand, der bald ablaufen, anzeigen" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "Bauauftrags-Status" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "Mir zugewiesen" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "Bestellstatus" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "ausstehend" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "Teile in Unterkategorien einschließen" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "Hat IPN" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "Teil hat Interne Teilenummer" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "Aktive Teile anzeigen" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "verfügbarer Bestand" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "Käuflich" @@ -8509,27 +8936,23 @@ msgstr "Spalten" msgid "All" msgstr "Alle" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "Kaufen" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "Verkaufen" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "Admin" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "Ausloggen" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "Einloggen" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "Über InvenTree" @@ -8641,15 +9064,15 @@ msgstr "Bestand verschieben" msgid "Order selected items" msgstr "Ausgewählte Positionen bestellen" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "Status ändern" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "Status ändern" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "Ausgewählte Positionen löschen" @@ -8685,35 +9108,35 @@ msgstr "Berechtigungen" msgid "Important dates" msgstr "wichtige Daten" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "Gruppe" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "Ansicht" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "Ändern" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" diff --git a/InvenTree/locale/el/LC_MESSAGES/django.po b/InvenTree/locale/el/LC_MESSAGES/django.po index 3b6d4f01a4..8882c2081b 100644 --- a/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/InvenTree/locale/el/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:46\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "" @@ -194,10 +195,15 @@ msgstr "" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "" @@ -206,22 +212,23 @@ msgstr "" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "" @@ -241,83 +248,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index ed69daafd0..4f7aa77d3e 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Ingrese fecha" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Confirmar" @@ -85,8 +86,8 @@ msgstr "Debe escribir el mismo correo electrónico cada vez." msgid "Duplicate serial: {n}" msgstr "Duplicar serie: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -122,7 +123,7 @@ msgstr "Falta archivo" msgid "Missing external link" msgstr "Falta enlace externo" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Adjunto" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Seleccionar archivo a adjuntar" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Enlace" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Enlace a URL externa" @@ -152,10 +153,10 @@ msgstr "Comentario" msgid "File comment" msgstr "Comentario de archivo" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Usuario" @@ -194,10 +195,15 @@ msgstr "Elección no válida" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Nombre" @@ -206,22 +212,23 @@ msgstr "Nombre" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Descripción" @@ -241,83 +248,83 @@ msgstr "Debe ser un número válido" msgid "Filename" msgstr "Nombre de archivo" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Alemán" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Griego" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Inglés" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Español" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "Español (México)" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "Separar del artículo principal" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "Opción no válida para el armado principal" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "Debe proporcionar adjudicación de artículos" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "Mostrar artículos de stock recientemente modificados en la página de inicio" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "Número de elementos de stock recientes a mostrar en la página de índice" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "Mostrar artículos de stock bajo en la página de inicio" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "Mostrar artículos agotados en la página de inicio" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "Mostrar elementos de stock necesarios para construir en la página de inicio" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "Mostrar artículos de stock caducados en la página de inicio" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "Mostrar elementos de stock obsoletos en la página de inicio" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "Artículos de Stock Asignados" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "Artículos de Stock" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "Introducir cantidad de artículos de stock" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "Empresa de la que se están pidiendo los artículos" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "Debe proporcionar elementos de línea" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "Recibir artículos" msgid "Receive Items" msgstr "Recibir Artículos" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "Artículos" @@ -3489,7 +3648,7 @@ msgstr "Comprar Artículos de Orden" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "Artículos Recibidos" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "Artículos de Orden de Venta" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" -msgstr "Algunos artículos de línea en este pedido han sido sobreasignados" - -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "Asignar artículos de stock por número de serie" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "Asignados {n} artículos" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "Artículo de stock principal" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "Heredado de BOM principal" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "Ubicación del stock principal" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "Inventario" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "Mostrar artículos de stock que han caducado" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "Pedir artículos seleccionados" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "Eliminar artículos seleccionados" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "Permiso para ver artículos" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "Permiso para añadir artículos" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "Permisos para editar artículos" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "Permiso para eliminar artículos" diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po index ccbb92c1b4..17c4d272c4 100644 --- a/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:46\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Entrer la date" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Confirmer" @@ -85,8 +86,8 @@ msgstr "Vous devez taper le même e-mail à chaque fois." msgid "Duplicate serial: {n}" msgstr "Dupliquer le numéro de série: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" @@ -116,13 +117,13 @@ msgstr "Le nombre de numéros de série uniques ({s}) doit correspondre à la qu #: InvenTree/models.py:120 msgid "Missing file" -msgstr "" +msgstr "Fichier manquant" #: InvenTree/models.py:121 msgid "Missing external link" -msgstr "" +msgstr "Lien externe manquant" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Pièce jointe" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Lien" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Lien vers une url externe" @@ -152,10 +153,10 @@ msgstr "Commentaire" msgid "File comment" msgstr "Commentaire du fichier" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Utilisateur" @@ -194,10 +195,15 @@ msgstr "Choix invalide" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Nom" @@ -206,22 +212,23 @@ msgstr "Nom" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Description" @@ -241,83 +248,83 @@ msgstr "Doit être un nombre valide" msgid "Filename" msgstr "Nom du fichier" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Allemand" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Greek" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Anglais" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Spanish" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "Espagnol (Mexique)" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Français" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Hebrew" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Italian" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Japanese" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Korean" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Dutch" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Norwegian" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Polonais" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "Portugais" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Russian" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Swedish" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Thai" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Turc" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Vietnamese" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Chinese" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "Échec des contrôles de santé du système" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "En attente" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Placé" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Terminé" @@ -361,8 +370,8 @@ msgstr "Perdu" msgid "Returned" msgstr "Retourné" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Expédié" @@ -442,7 +451,7 @@ msgstr "Séparer de l'élément parent" msgid "Split child item" msgstr "Fractionner l'élément enfant" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "Envoyé au client" @@ -492,15 +501,15 @@ msgstr "Caractère invalide dans le nom ({x})" #: InvenTree/validators.py:133 InvenTree/validators.py:149 msgid "Overage value must not be negative" -msgstr "" +msgstr "La valeur de surplus ne doit pas être négative" #: InvenTree/validators.py:151 msgid "Overage must not exceed 100%" -msgstr "" +msgstr "Le surplus ne doit pas dépasser 100%" #: InvenTree/validators.py:158 msgid "Overage must be an integer value or a percentage" -msgstr "" +msgstr "La valeur de surplus doit être un nombre entier ou un pourcentage" #: InvenTree/views.py:538 msgid "Delete Item" @@ -522,55 +531,55 @@ msgstr "Définir le mot de passe" msgid "Password fields must match" msgstr "Les mots de passe doivent correspondre" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Informations système" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "Le paramètre barcode_data doit être fourni" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "Aucune correspondance trouvée pour les données du code-barres" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Correspondance trouvée pour les données du code-barres" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "Vous devez fournir le paramètre stockitem" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Aucun article d'inventaire correspondant trouvé" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "Le code-barres correspond déjà à une Pièce" - -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" + +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,36 +591,39 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "Quantité" #: build/forms.py:37 msgid "Enter quantity for build output" -msgstr "" +msgstr "Entrer la quantité désiré pour la fabrication" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "Numéros de série" #: build/forms.py:43 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "Entrer les numéros de séries pour la fabrication" #: build/forms.py:49 msgid "Confirm creation of build output" @@ -619,11 +631,11 @@ msgstr "Confirmer la création de la sortie de l'assemblage" #: build/forms.py:70 msgid "Confirm deletion of build output" -msgstr "" +msgstr "Confirmer la supression de la fabrication" #: build/forms.py:94 msgid "Mark build as complete" -msgstr "" +msgstr "Indiquer la fabrication comme terminé" #: build/forms.py:107 msgid "Confirm cancel" @@ -631,26 +643,26 @@ msgstr "Confirmer l'annulation" #: build/forms.py:107 build/views.py:65 msgid "Confirm build cancellation" -msgstr "" +msgstr "Confirmer l'annulation de la fabrication" #: build/models.py:133 msgid "Invalid choice for parent build" -msgstr "" +msgstr "Choix invalide pour la fabrication parente" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "Ordre de Fabrication" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "Ordres de Fabrication" @@ -658,32 +670,32 @@ msgstr "Ordres de Fabrication" msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Référence" #: build/models.py:210 msgid "Brief description of the build" -msgstr "" +msgstr "Brève description de la fabrication" #: build/models.py:219 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" -msgstr "" +msgstr "Fabrication parente" #: build/models.py:220 msgid "BuildOrder to which this build is allocated" -msgstr "" +msgstr "BuildOrder associé a cette fabrication" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Pièce" @@ -715,13 +729,14 @@ msgstr "Sélectionnez la pièce à construire" #: build/models.py:238 msgid "Sales Order Reference" -msgstr "" +msgstr "Bon de commande de référence" #: build/models.py:242 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Emplacement d'origine" @@ -739,7 +754,7 @@ msgstr "Sélectionnez l'emplacement où les éléments complétés seront stock #: build/models.py:264 msgid "Build Quantity" -msgstr "" +msgstr "Quantité a fabriquer" #: build/models.py:267 msgid "Number of stock items to build" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "Lien Externe" @@ -823,18 +838,19 @@ msgstr "Lien Externe" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "Notes" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "Assemblage" @@ -889,14 +905,17 @@ msgstr "Assemblage" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "Article en stock" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "Emplacement" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "État" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "Date Cible" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "En retard" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "Terminé" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "Commandes" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Destination" @@ -1200,22 +1220,22 @@ msgstr "Destination" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "Créé le" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "Commander les pièces requises" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "Commander des pièces" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "La quantité maximale de sortie est " -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "{name.title()} Fichier" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "Télécharger depuis l'URL" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "Composant" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "Afficher les dernières pièces" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "Afficher les dernières modifications du stock" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "URL" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "Cette entreprise fabrique-t-elle des pièces?" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "Devise" @@ -2293,12 +2347,12 @@ msgstr "Devise" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "Sélectionner un fabricant" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "Valeur" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "Fournisseur" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "Créer une commande d'achat" @@ -2493,11 +2547,12 @@ msgstr "Ajouter une nouvelle image" msgid "Download image from URL" msgstr "Télécharger l'image depuis l'URL" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "Commandes d'achat" @@ -2602,7 +2657,7 @@ msgstr "Nouvelle commande achat" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "Ventes" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "Nouvelle commande de vente" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "Stock affecté" @@ -2644,7 +2699,7 @@ msgstr "Liste des Fournisseurs" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "Fabricants" @@ -2673,7 +2728,7 @@ msgstr "Pièces Internes" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "Fournisseurs" @@ -2687,7 +2742,7 @@ msgstr "Supprimer les pièces du fournisseur" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "Supprimer" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "Stock" @@ -2844,7 +2899,7 @@ msgstr "Tarif" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "Éléments en stock" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "Nouveau Fabricant" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "Clients" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "Passer la commande" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "Marquer la commande comme complète" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "Annuler la commande" -#: order/forms.py:70 -msgid "Ship order" -msgstr "Expédier la commande" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "Description de la commande" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "Lien vers une page externe" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "Créé par" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "expédié par" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "Commande" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "Reçu" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "Ligne" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "Article" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "Finaliser la commande" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "Statut de la commande" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "Dupliquer la sélection" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "Supprimer la ligne" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "Articles de la commande d'achat" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "Annuler la commande" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "Annuler la vente" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "Mettre à jour les prix" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "Prix introuvable" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "Catégorie" @@ -3906,7 +4024,7 @@ msgstr "Catégorie de la pièce" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "IPN" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "Actif" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "Nom de test" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Requis" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "Données" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "Sélectionner un propriétaire" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "Disponible" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "Annuler" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "Détails" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "A un IPN" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "Ventes" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/he/LC_MESSAGES/django.po b/InvenTree/locale/he/LC_MESSAGES/django.po index 634eb7da35..9938394fec 100644 --- a/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/InvenTree/locale/he/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "" @@ -194,10 +195,15 @@ msgstr "" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "" @@ -206,22 +212,23 @@ msgstr "" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "" @@ -241,83 +248,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/id/LC_MESSAGES/django.po b/InvenTree/locale/id/LC_MESSAGES/django.po index cfcf2e1d88..6ee9158635 100644 --- a/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/InvenTree/locale/id/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Masukkan tanggal" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Konfirmasi" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "" @@ -194,10 +195,15 @@ msgstr "" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "" @@ -206,22 +212,23 @@ msgstr "" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "" @@ -241,83 +248,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po index b478c9da25..685dd24ab4 100644 --- a/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/InvenTree/locale/it/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Inserisci la data" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Conferma" @@ -85,8 +86,8 @@ msgstr "È necessario digitare la stessa e-mail ogni volta." msgid "Duplicate serial: {n}" msgstr "Seriale Duplicato: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Allegato" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Seleziona file da allegare" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Link" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Link a URL esterno" @@ -152,10 +153,10 @@ msgstr "Commento" msgid "File comment" msgstr "Commento del file" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Utente" @@ -194,10 +195,15 @@ msgstr "Scelta non valida" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Nome" @@ -206,22 +212,23 @@ msgstr "Nome" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Descrizione" @@ -241,83 +248,83 @@ msgstr "Deve essere un numero valido" msgid "Filename" msgstr "Nome del file" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Tedesco" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Greco" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Inglese" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Spagnolo" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "Spagnolo (Messicano)" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Francese" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Ebraico" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Italiano" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Giapponese" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Coreano" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Olandese" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Norvegese" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Polacco" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "Portoghese" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Russo" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Svedese" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Thailandese" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Turco" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Cinese" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "Controlli di sistema InvenTree falliti" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "In attesa" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Inviato" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Completo" @@ -361,8 +370,8 @@ msgstr "Perso" msgid "Returned" msgstr "Reso" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Spedito" @@ -442,7 +451,7 @@ msgstr "Diviso dall'elemento genitore" msgid "Split child item" msgstr "Dividi elemento figlio" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "Inviato al cliente" @@ -522,55 +531,55 @@ msgstr "Imposta Password" msgid "Password fields must match" msgstr "Le password devono coincidere" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Informazioni sistema" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "È necessario fornire il parametro barcode_data" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "Nessuna corrispondenza trovata per i dati del codice a barre" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Corrispondenza trovata per i dati del codice a barre" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "È necessario fornire il parametro stockitem" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Nessun elemento corrispondente trovato" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" -msgstr "Il codice a barre corrisponde già all'oggetto StockItem" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" +msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" -msgstr "Il codice a barre corrisponde già all'oggetto StockItem" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" +msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "Il codice a barre corrisponde già all'articolo" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" +msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" -msgstr "Il codice a barre corrisponde già all'articolo in giacenza" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" -msgstr "Codice a barre associato all'articolo in giacenza" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" +msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "Codice a barre associato all'articolo in giacenza" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "Quantità" @@ -603,9 +615,9 @@ msgstr "Quantità" msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "Codice Seriale" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Riferimento" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Articolo" @@ -721,7 +735,8 @@ msgstr "Numero di riferimento ordine di vendita" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Posizione Di Origine" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "Data completamento obiettivo" @@ -782,8 +797,8 @@ msgstr "Data completamento obiettivo" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "Data di completamento" @@ -791,7 +806,7 @@ msgstr "Data di completamento" msgid "completed by" msgstr "Completato da" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "Rilasciato da" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Responsabile" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "Collegamento esterno" @@ -823,18 +838,19 @@ msgstr "Collegamento esterno" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "Note" @@ -867,7 +883,7 @@ msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità di msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "Articolo in giacenza selezionato non trovato nel BOM" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "Articoli in magazzino" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "Posizione" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "Stato" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "Data scadenza" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "In ritardo" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "Completato" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "Ordini di Vendita" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "Lo stock può essere prelevato da qualsiasi posizione disponibile." -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Destinazione" @@ -1200,22 +1220,22 @@ msgstr "Destinazione" msgid "Destination location not specified" msgstr "Posizione di destinazione non specificata" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "Lotto" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "Creato" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "Ordina articoli richiesti" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "Ordine Articoli" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "Genera Note" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "{name.title()} File" msgid "Select {name} file to upload" msgstr "Seleziona il file {name} da caricare" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" @@ -1557,7 +1577,7 @@ msgstr "Scarica dall'URL" msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Supporto Codice A Barre" @@ -1623,7 +1643,7 @@ msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "Template" @@ -1633,7 +1653,7 @@ msgstr "Gli articoli sono modelli per impostazione predefinita" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "Assemblaggio" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "Componente" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "Vendibile" @@ -1670,7 +1690,7 @@ msgstr "Gli articoli sono acquistabili per impostazione predefinita" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "Tracciabile" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "Mostra le categorie sottoscritte" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "Mostra le categorie dei componenti sottoscritti nella homepage" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "Mostra ultimi articoli" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "Risultati Dell'Anteprima Di Ricerca" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "Prezzo" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "Carica file" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "Passaggio Precedente" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "URL" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "Descrizione dell'azienda" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "Sito Web" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "Valuta" @@ -2293,12 +2347,12 @@ msgstr "Valuta" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "Articolo di base" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "Seleziona articolo" @@ -2319,7 +2373,7 @@ msgstr "Seleziona Produttore" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "Codice articolo produttore (MPN)" @@ -2349,8 +2403,8 @@ msgstr "Nome parametro" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "Valore" @@ -2360,7 +2414,7 @@ msgstr "Valore del parametro" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "Unità" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "Fornitore" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "Seleziona fornitore" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "SKU" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "Confezionamento" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "Azienda" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "Crea ordine d'acquisto" @@ -2493,11 +2547,12 @@ msgstr "Carica nuova immagine" msgid "Download image from URL" msgstr "Scarica immagine dall'URL" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "Cliente" @@ -2580,7 +2635,7 @@ msgstr "Giacenza Fornitore" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "Ordine di acquisto" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "Elenco dei fornitori" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "Produttori" @@ -2673,7 +2728,7 @@ msgstr "Articolo interno" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "Fornitori" @@ -2687,7 +2742,7 @@ msgstr "Elimina articolo fornitore" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "Elimina" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "Articolo Fornitore" @@ -2767,7 +2822,7 @@ msgstr "Crea nuova allocazione magazzino" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "Nuovo Elemento in giacenza" @@ -2817,11 +2872,11 @@ msgstr "Cancella riduzione di prezzo" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "Magazzino" @@ -2844,7 +2899,7 @@ msgstr "Prezzi" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "Articoli in magazzino" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "Nuovo Produttore" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "Clienti" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "Invia l'ordine" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "Contrassegna ordine come completato" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "Annulla l'ordine" -#: order/forms.py:70 -msgid "Ship order" -msgstr "Spedizione ordine" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "Inserisci i numeri di serie dell'articolo in giacenza" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "Inserisci la quantità di articoli disponibili" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "Descrizione ordine" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "Creato Da" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "Utente o gruppo responsabile di questo ordine" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "Note ordine" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "ricevuto da" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "Data di emissione" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "Data di emissione ordine" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "Data di consegna programmata" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data prevista per la consegna dell'ordine. L'ordine scadrà dopo questa data." -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "Ricevere articoli" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "Stato dell'ordine" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "Emesso" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "Modifica ordine d'acquisto" @@ -3371,8 +3528,9 @@ msgstr "Duplica selezionati" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "Elimina riga" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." -msgstr "Assicurarsi che l'assegnazione degli ordini sia corretta prima di spedire l'ordine." - -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "Specifica la posizione per lo stock iniziale" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "Categorie Articolo" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "Articoli" @@ -3895,7 +4013,7 @@ msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "Categoria" @@ -3906,7 +4024,7 @@ msgstr "Categoria articolo" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "IPN - Numero di riferimento interno" @@ -3975,10 +4093,11 @@ msgstr "Quest'articolo può essere acquistato da fornitori esterni?" msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "Attivo" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "Consenti Le Varianti" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "In magazzino" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "Data" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "Seriale" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "Data di Scadenza" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "Conferma la disinstallazione" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "Seleziona Owner" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "Installato In" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "Trasferisci giacenza" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "Ultimo aggiornamento" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "Nessuna posizione impostata" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "Modifica Posizione Giacenza" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "QR Code della posizione magazzino" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "Specificare una posizione valida" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "Crea una nuova Posizione di Giacenza" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "Elimina Posizione di Giacenza" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "Impostazioni Server" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "Impostazioni di accesso" @@ -6161,6 +6367,24 @@ msgstr "Impostazioni di accesso" msgid "Signup" msgstr "Registrati" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "Impostazioni articolo" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "Admin" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "Nessun parametro di categoria trovato" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "Impostazioni Utente" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "Impostazioni di ricerca" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "Informazioni Versione InvenTree" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Chiudi" @@ -6513,14 +6853,6 @@ msgstr "Aggiornato" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "Documentazione InvenTree" @@ -6719,8 +7051,9 @@ msgstr "Quantità richiesta" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "Disponibile" @@ -6766,11 +7099,11 @@ msgstr "Il server remoto deve essere accessibile" msgid "Remote image must not exceed maximum allowable file size" msgstr "L'immagine remota non deve superare la dimensione massima consentita del file" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6782,35 +7115,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6879,7 +7212,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6887,7 +7220,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6907,7 +7240,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6977,7 +7310,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7001,11 +7334,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7026,7 +7354,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7034,7 +7362,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7042,165 +7370,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "Posizione non specificata" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "Modifica allocazione magazzino" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "Elimina posizione giacenza" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "Modifica Posizione" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "Rimuovi Posizione" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "Specificare il quantitativo assegnato allo stock" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Seleziona Articoli" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "Seleziona la posizione di origine (lascia vuoto per prendere da tutte le posizioni)" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "Conferma l'assegnazione della giacenza" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "Nessuna posizione di magazzino corrispondente" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7220,7 +7548,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "Aggiungi fornitore" @@ -7355,20 +7683,20 @@ msgstr "Mostra operazione non consentita" msgid "Enter a valid number" msgstr "Inserisci un numero valido" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "Nessun risultato trovato" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "Ricerca" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "Cancella input" @@ -7381,7 +7709,7 @@ msgid "NO" msgstr "NO" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7430,62 +7758,62 @@ msgstr "Seleziona l'etichetta" msgid "Select Label Template" msgstr "Seleziona Modello Etichetta" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "Annulla" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Invia" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "Titolo modulo" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "In attesa del server..." -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "Informazioni sull'errore" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "Accetta" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "Risposta dal server non valida" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7513,176 +7841,245 @@ msgstr "Codice Articolo" msgid "Order ID" msgstr "ID Ordine" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "Id Categoria" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "ID articolo produttore" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "Aggiungi cliente" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "Formato" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "Quantità da ricevere" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "Stato giacenza" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "Codice ordine" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "Ordinato" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "Ricevuto" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "Totale" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "Prezzo Unitario" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "Prezzo Totale" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "Cliente non valido" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "Nessun ordine di vendita trovato" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "Modifica posizione giacenza" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "Conferma Operazione Eliminazione" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "Elimina posizione giacenza" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "Spedito al cliente" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "Nessun posizione specificata" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "Soddisfatto" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "Prezzo d'acquisto" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "Calcola il prezzo" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7827,12 +8224,12 @@ msgid "No category" msgstr "Nessuna categoria" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "In esaurimento" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "Visualizza come elenco" @@ -7840,7 +8237,7 @@ msgstr "Visualizza come elenco" msgid "Display as grid" msgstr "Visualizza come griglia" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "Visualizza come struttura ad albero" @@ -7848,7 +8245,7 @@ msgstr "Visualizza come struttura ad albero" msgid "Subscribed category" msgstr "Categoria sottoscritta" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "Percorso" @@ -7856,11 +8253,11 @@ msgstr "Percorso" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7899,6 +8296,10 @@ msgstr "Prezzo Singolo" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "elementi selezionati" @@ -7965,300 +8366,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "Posizione giacenza principale" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "Nuova posizione giacenza" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "Inserisci quantità iniziale per questo articolo in giacenza" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Inserire i numeri di serie per la nuova giacenza (o lasciare vuoto)" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "Crea nuova allocazione magazzino" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "Creato più elementi stock" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "Esporta giacenza" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "Includi sotto allocazioni" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "Includi elementi in giacenza nelle sottoallocazioni" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "Trasferisci giacenza" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "Sposta" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "Conta giacenza" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "Conta" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "Rimuovi giacenza" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "Prendi" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "Aggiungi giacenza" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "Aggiungi" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "Elimina Stock" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "Specificare la quantità di magazzino" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "Devi selezionare almeno un articolo disponibile" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "PASS" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "FAIL" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "NESSUN RISULTATO" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "Aggiungi risultato test" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "Nessun risultato di prova trovato" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "In produzione" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "Installato nell'elemento stock" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "Spedito al cliente" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "Assegnato all'ordine di vendita" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "Nessuna giacenza impostata" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "L'articolo di magazzino è in produzione" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "Articolo stock assegnato al cliente" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "L'articolo stock è scaduto" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "Articolo in giacenza prossimo alla scadenza" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" -msgstr "L'articolo stock è stato allocato" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" +msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "L'elemento stock è stato installato in un altro articolo" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "L'articolo stock è stato rifiutato" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "Esaurito" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "Inventario" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "elementi" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "posizione" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "Posizione non definita" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "Data non valida" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "La posizione non esiste più" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "Aggiunto" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "Rimosso" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8279,7 +8696,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "Includi sottoallocazioni/posizioni" @@ -8289,54 +8706,54 @@ msgstr "Includi posizioni" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "Includi sottocategorie" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "Sottoscritto" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "Codice Lotto" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "Elementi attivi" @@ -8357,101 +8774,111 @@ msgid "Item has been allocated" msgstr "L'elemento è stato posizionato" #: templates/js/translated/table_filters.js:179 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:184 msgid "Include stock in sublocations" msgstr "Includi elementi in giacenza nelle sottoallocazioni" -#: templates/js/translated/table_filters.js:184 +#: templates/js/translated/table_filters.js:189 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:194 msgid "Show items which are in stock" msgstr "Mostra gli elementi che sono in giacenza" -#: templates/js/translated/table_filters.js:193 +#: templates/js/translated/table_filters.js:198 msgid "In Production" msgstr "In Produzione" -#: templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:199 msgid "Show items which are in production" msgstr "Mostra gli elementi in produzione" -#: templates/js/translated/table_filters.js:198 +#: templates/js/translated/table_filters.js:203 msgid "Include Variants" msgstr "Includi Varianti" -#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:204 msgid "Include stock items for variant parts" msgstr "Includi gli articoli stock per le varianti degli articoli" -#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:208 msgid "Installed" msgstr "Installato" -#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:209 msgid "Show stock items which are installed in another item" msgstr "Mostra gli elementi stock che sono installati in un altro elemento" -#: templates/js/translated/table_filters.js:209 +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "Mostra elementi che sono stati assegnati a un cliente" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "Stato magazzino" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "Ha il prezzo d'acquisto" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "Mostra gli articoli di magazzino che hanno un prezzo di acquisto impostato" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "Mostra gli elementi in giacenza scaduti" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "Mostra giacenza prossima alla scadenza" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "Stato Build" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "Stato dell'ordine" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "In Sospeso" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "Includi articoli nelle sottocategorie" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "Ha IPN" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "L'articolo possiede un part number interno" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "Visualizza articoli attivi" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "Disponibilità" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "Acquistabile" @@ -8508,27 +8935,23 @@ msgstr "Colonne" msgid "All" msgstr "Tutti" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "Acquista" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "Vendi" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "Admin" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "Esci" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "Accedi" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "Informazioni Su InvenTree" @@ -8640,15 +9063,15 @@ msgstr "Sposta giacenza" msgid "Order selected items" msgstr "Ordina articolo selezionato" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "Modifica stato" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "Modifica stato stock" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "Elimina articoli selezionati" @@ -8684,35 +9107,35 @@ msgstr "Permessi" msgid "Important dates" msgstr "Date Importanti" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "Impostazione autorizzazioni" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "Gruppo" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "Visualizza" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "Autorizzazione a visualizzare gli articoli" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "Autorizzazione ad aggiungere elementi" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "Modificare" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "Permessi per modificare gli elementi" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "Autorizzazione ad eliminare gli elementi" diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po index dbc37a257c..84bec02c3a 100644 --- a/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "日付を入力する" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "確認" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "数量コードが無効です" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "添付ファイル" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "添付ファイルを選択" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "コメント:" msgid "File comment" msgstr "ファイルコメント" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "ユーザー" @@ -194,10 +195,15 @@ msgstr "無効な選択です" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "お名前" @@ -206,22 +212,23 @@ msgstr "お名前" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "説明" @@ -241,83 +248,83 @@ msgstr "有効な数字でなければなりません" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "ドイツ語" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "英語" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "フランス語" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "ポーランド語" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "トルコ語" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "InvenTree システムのヘルスチェックに失敗しました" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "処理待ち" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "設置済" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "完了" @@ -361,8 +370,8 @@ msgstr "紛失" msgid "Returned" msgstr "返品済" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "発送済み" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "パーツ" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "パーツを割り当てるためにビルドする" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "注文必須パーツ" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "パーツの注文" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "テンプレート" @@ -1633,7 +1653,7 @@ msgstr "パーツはデフォルトのテンプレートです" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "アセンブリ" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "コンポーネント" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "パーツはデフォルトで販売可能です" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "追跡可能" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "内部パーツ" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "パーツ" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "メーカー・パーツの編集" msgid "Delete Manufacturer Part" msgstr "メーカー・パーツを削除" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/ko/LC_MESSAGES/django.po b/InvenTree/locale/ko/LC_MESSAGES/django.po index 226941ff9f..033d2a192a 100644 --- a/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "" @@ -194,10 +195,15 @@ msgstr "" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "" @@ -206,22 +212,23 @@ msgstr "" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "" @@ -241,83 +248,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/nl/LC_MESSAGES/django.po b/InvenTree/locale/nl/LC_MESSAGES/django.po index 7208eb54a1..713d52d267 100644 --- a/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Voer datum in" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Bevestigen" @@ -85,8 +86,8 @@ msgstr "U moet elke keer hetzelfde e-mailadres invoeren." msgid "Duplicate serial: {n}" msgstr "Dubbel serienummer: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveeldheid ingevoerd" @@ -122,7 +123,7 @@ msgstr "Ontbrekend bestand" msgid "Missing external link" msgstr "Externe link ontbreekt" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Bijlage" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Link" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Link naar externe URL" @@ -152,10 +153,10 @@ msgstr "Opmerking" msgid "File comment" msgstr "Bijlage opmerking" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Gebruiker" @@ -194,10 +195,15 @@ msgstr "Ongeldige keuze" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Naam" @@ -206,22 +212,23 @@ msgstr "Naam" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Omschrijving" @@ -241,83 +248,83 @@ msgstr "Moet een geldig nummer zijn" msgid "Filename" msgstr "Bestandsnaam" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Duits" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Grieks" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Engels" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Spaans" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "Spaans (Mexicaans)" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Frans" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Hebreeuws" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Italiaans" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Japans" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Koreaans" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Nederlands" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Noors" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Pools" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "Portugees" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Zweeds" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Thais" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Turks" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Vietnamees" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Chinees" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "Inventree gezondsheidscheck faalt" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "Bezig" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Geplaatst" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Voltooid" @@ -361,8 +370,8 @@ msgstr "Kwijt" msgid "Returned" msgstr "Retour" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Verzonden" @@ -442,7 +451,7 @@ msgstr "Splits van bovenliggend item" msgid "Split child item" msgstr "Splits onderliggende item" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "Naar klant verzonden" @@ -522,55 +531,55 @@ msgstr "Wachtwoord instellen" msgid "Password fields must match" msgstr "Wachtwoordvelden komen niet overeen" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Systeeminformatie" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "De paramenter barcode_data moet worden aangeleverd" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "Geen overeenkomst gevonden voor barcode gegevens" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Overeenkomst gevonden voor barcode gegevens" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "Moet voorraaditem parameter aanleveren" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Geen overeenkomend voorraaditem gevonden" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" -msgstr "Barcode komt al overeen met StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" +msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" -msgstr "Barcode komt al overeen met StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" +msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "Barcode komt al overeen met Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" +msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" -msgstr "Barcode komt al overeen met StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" -msgstr "Barcode gekoppeld aan StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" +msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "Barcode gekoppeld aan StockItem" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "Aantal" @@ -603,9 +615,9 @@ msgstr "Aantal" msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor build-output" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "Serienummers" @@ -640,17 +652,17 @@ msgstr "Ongeldige keuze voor bovenliggende build" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "Bouwopdracht" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "Bouwopdrachten" @@ -658,13 +670,13 @@ msgstr "Bouwopdrachten" msgid "Build Order Reference" msgstr "Bouwopdracht referentie" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referentie" @@ -683,7 +695,7 @@ msgstr "BuildOrder waaraan deze build is toegewezen" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "BuildOrder waaraan deze build is toegewezen" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Onderdeel" @@ -721,7 +735,8 @@ msgstr "Verkoop Order Referentie" msgid "SalesOrder to which this build is allocated" msgstr "Verkooporder waaraan deze build is toegewezen" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Bron Locatie" @@ -761,7 +776,7 @@ msgstr "Bouwstatus" msgid "Build status code" msgstr "Bouwstatuscode" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "Verwachte voltooiingsdatum" @@ -782,8 +797,8 @@ msgstr "Verwachte voltooiingsdatum" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "Voltooiingsdatum" @@ -791,7 +806,7 @@ msgstr "Voltooiingsdatum" msgid "completed by" msgstr "voltooid door" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "Gebruiker die bouwopdracht heeft gegeven" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Verantwoordelijke" @@ -815,7 +830,7 @@ msgstr "Gebruiker verantwoordelijk voor deze bouwopdracht" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "Externe Link" @@ -823,18 +838,19 @@ msgstr "Externe Link" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "Opmerkingen" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "Product" @@ -889,14 +905,17 @@ msgstr "Product" msgid "Build to allocate parts" msgstr "Bouw om onderdelen toe te wijzen" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "Voorraadartikel" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "Locatie" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "Status" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "Voorraad is niet volledig toegewezen aan deze bouwopdracht" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "Streefdatum" @@ -1096,28 +1116,28 @@ msgstr "Deze bouw was verwacht op %(target)s" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "Achterstallig" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "Verkoop Order" @@ -1191,8 +1211,8 @@ msgstr "Voorraadbron" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "Batch" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "Gecreëerd" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "Niet toegewezen voorraad" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "Bestel onderdelen" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "Bouw notities" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" @@ -1557,7 +1577,7 @@ msgstr "Download van URL" msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Barcode ondersteuning" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "Samenstelling" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere delen worden samengesteld" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "Fabriceert dit bedrijf onderdelen?" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "Fabrikant selecteren" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "MPN" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "Fabrikanten" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "Nieuwe fabrikant" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "Serienummer" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "Voorraad overzetten" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "Geen Locatie ingesteld" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "Bewerk voorraadlocatie" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "QR-code voor voorraadlocatie" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "Specificeer een geldige locatie" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "Maak nieuwe voorraadlocatie" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "Verwijder voorraadlocatie" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "Bevestig de voorraadtoewijzing" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "Fabrikant onderdeel bewerken" msgid "Delete Manufacturer Part" msgstr "Fabrikant onderdeel verwijderen" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "Onderdeelnummer fabrikant" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "Geen voorraadlocatie ingesteld" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "Inkoop" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "Verkoop" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/no/LC_MESSAGES/django.po b/InvenTree/locale/no/LC_MESSAGES/django.po index d440762c4b..4201822661 100644 --- a/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/InvenTree/locale/no/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Oppgi dato" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Bekreft" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "Dupliser serie: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Vedlegg" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Velg fil å legge ved" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "Kommenter" msgid "File comment" msgstr "Kommentar til fil" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Bruker" @@ -194,10 +195,15 @@ msgstr "Ugyldig valg" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Navn" @@ -206,22 +212,23 @@ msgstr "Navn" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Beskrivelse" @@ -241,83 +248,83 @@ msgstr "Nummer må være gyldig" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Tysk" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Gresk" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Engelsk" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Spansk" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Fransk" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Italiensk" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Japansk" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Koreansk" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Nederlandsk" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Polsk" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Russisk" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Svensk" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Kinesisk" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "Må oppgi gyldig strekkode_data parameter" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "Ingen treff funnet for strekkodedata" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Treff funnet for strekkodedata" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "Må oppgi lagervareparameter" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Ingen samsvarende lagervare funnet" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po index ce000b6277..22b38b1665 100644 --- a/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Wprowadź dane" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Potwierdź" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "Powtórzony numer seryjny: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Załącznik" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Wybierz plik do załączenia" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Łącze" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" @@ -152,10 +153,10 @@ msgstr "Komentarz" msgid "File comment" msgstr "Komentarz pliku" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Użytkownik" @@ -194,10 +195,15 @@ msgstr "Błędny wybór" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Nazwa" @@ -206,22 +212,23 @@ msgstr "Nazwa" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Opis" @@ -241,83 +248,83 @@ msgstr "Numer musi być prawidłowy" msgid "Filename" msgstr "Nazwa pliku" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Niemiecki" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Grecki" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Angielski" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Hiszpański" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "Hiszpański (Meksyk)" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Francuski" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Hebrajski" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Włoski" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Japoński" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Koreański" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Holenderski" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Norweski" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Polski" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "Portugalski" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Rosyjski" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Szwedzki" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Tajski" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Turecki" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Wietnamski" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Chiński" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "W toku" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Umieszczony" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Zakończono" @@ -361,8 +370,8 @@ msgstr "Zagubiono" msgid "Returned" msgstr "Zwrócone" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Wysłane" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "Podziel element podrzędny" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "Wyślij do klienta" @@ -522,55 +531,55 @@ msgstr "Ustaw hasło" msgid "Password fields must match" msgstr "Hasła muszą być zgodne" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Informacja systemowa" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Nie znaleziono pasujących stanów magazynowych" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" -msgstr "Kod kreskowy już pasuje do obiektu StockItem" - -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" -msgstr "Kod kreskowy już pasuje do obiektu StockItem" - -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "Kod kreskowy już pasuje do obiektu StockItem" - -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" +msgstr "" + +#: barcodes/api.py:199 +msgid "Barcode already matches Part" +msgstr "" + +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" + +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "Ilość" @@ -603,9 +615,9 @@ msgstr "Ilość" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "Numer seryjny" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "Zlecenie Budowy" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "Zlecenia budowy" @@ -658,13 +670,13 @@ msgstr "Zlecenia budowy" msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referencja" @@ -683,7 +695,7 @@ msgstr "Zamówienie budowy, do którego budowa jest przypisana" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "Zamówienie budowy, do którego budowa jest przypisana" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Część" @@ -721,7 +735,8 @@ msgstr "Odwołanie do zamówienia sprzedaży" msgid "SalesOrder to which this build is allocated" msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Lokalizacja źródła" @@ -761,7 +776,7 @@ msgstr "Status budowania" msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "Kod partii" @@ -769,12 +784,12 @@ msgstr "Kod partii" msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "Docelowy termin zakończenia" @@ -782,8 +797,8 @@ msgstr "Docelowy termin zakończenia" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "Data zakończenia" @@ -791,7 +806,7 @@ msgstr "Data zakończenia" msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "Wydany przez" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Odpowiedzialny" @@ -815,7 +830,7 @@ msgstr "Użytkownik odpowiedzialny za to zamówienie budowy" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "Link Zewnętrzny" @@ -823,18 +838,19 @@ msgstr "Link Zewnętrzny" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "Uwagi" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "Budowa" @@ -889,14 +905,17 @@ msgstr "Budowa" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "Element magazynowy" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "Lokalizacja" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "Status" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "Data docelowa" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "Zaległe" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "Zakończone" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "Zamówienie zakupu" @@ -1191,8 +1211,8 @@ msgstr "Źródło magazynu" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Przeznaczenie" @@ -1200,22 +1220,22 @@ msgstr "Przeznaczenie" msgid "Destination location not specified" msgstr "Nie określono lokalizacji docelowej" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "Partia" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "Utworzony" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "Przydziel zapasy do budowy" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "Cofnij przydział zapasów" @@ -1257,7 +1277,7 @@ msgstr "Zamów wymagane komponenty" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "Zamów części" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "Notatki tworzenia" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "Utwórz zlecenie budowy" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "Pobierz z adresu URL" msgid "Allow download of remote images and files from external URL" msgstr "Zezwól na pobieranie zewnętrznych obrazów i plików z zewnętrznego URL" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "Szablon" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "Złożenie" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "Komponent" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "Możliwość sprzedaży" @@ -1670,7 +1690,7 @@ msgstr "Części są domyślnie z możliwością sprzedaży" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "Możliwość śledzenia" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "Pokaż ilość w formularzach" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "Cena" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "Wyślij plik" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "URL" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "Opis firmy" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "Strona WWW" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "Czy to przedsiębiorstwo produkuje części?" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "Waluta" @@ -2293,12 +2347,12 @@ msgstr "Waluta" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "Część bazowa" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "Wybierz część" @@ -2319,7 +2373,7 @@ msgstr "Wybierz producenta" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "MPN" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "Jednostki" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "Dostawca" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "Wybierz dostawcę" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "SKU" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "Opakowanie" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "Firma" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "Prześlij nowy obraz" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "Klient" @@ -2580,7 +2635,7 @@ msgstr "Zapasy dostawcy" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "Lista dostawców" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "Producenci" @@ -2673,7 +2728,7 @@ msgstr "Część wewnętrzna" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "Dostawcy" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "Usuń" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "Stan" @@ -2844,7 +2899,7 @@ msgstr "Cennik" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "Now producent" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "Klienci" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "Złóż zamówienie" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "Oznacz zamówienie jako zakończone" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "Anuluj zamówienie" -#: order/forms.py:70 -msgid "Ship order" -msgstr "Wyślij zamówienie" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "Wprowadź ilość produktów magazynowych" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "Opis Zamówienia" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "Utworzony przez" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "Notatki do zamówienia" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "odebrane przez" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "Data wydania" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "Data wystawienia zamówienia" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "Data Dostawy Towaru" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "Wartość musi być liczbą całkowitą" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "Zamówienie" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "Odebrane" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "Gdzie kupujący chce przechowywać ten przedmiot?" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "Linia" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "Komponent" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "Status zamówienia" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "Wydany" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "Przedmioty" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "Dodaj element zamówienia" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "Otrzymane elementy" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "Notatki zamówień" @@ -3520,25 +3679,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" -msgstr "Wyślij zamówienie" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" +msgstr "" #: order/templates/order/sales_order_base.html:102 msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" +msgstr "Akcje" + +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" -msgstr "" - -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "Anuluj zamówienie" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "Potwierdź anulowanie zamówienia" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "Nie znaleziono ceny" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "Części" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "Kategoria" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "IPN" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "Aktywny" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "Nazwa testu" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Wymagane" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "Dane" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "Wartość domyślna" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "Numer Seryjny" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "Wynik" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "Data" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "Data ważności" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "Numery seryjne" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "Termin minął" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "Ostatnia aktualizacja" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "Lokacje nie są ustawione" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "Utwórz nową lokalizację magazynową" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "Ilość nie może być ujemna" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "Indeks" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "Dostępne" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "Błąd 403: Odmowa dostępu" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "Nie masz uprawnień wymaganych do dostępu do tej funkcji" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "Akcje" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "Ilość za" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "Przydzielono" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "Potwierdź przydział zapasów" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "Kod zamówienia" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "Odbierz" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "Cena jednostkowa" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "Cena zakupu" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "Oblicz cenę" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "Zaktualizuj cenę jednostkową" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "Cena jednostkowa" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "Dodaj stan" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "Dodaj" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "Szczegóły" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "Dodano" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "Uprawnienia" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "Uprawnienia nadane" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "Uprawnienie do wyświetlania przedmiotów" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "Uprawnienie do dodawania przedmiotów" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "Uprawnienie do edycji przedmiotów" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "Uprawnienie do usuwania przedmiotów" diff --git a/InvenTree/locale/pt/LC_MESSAGES/django.po b/InvenTree/locale/pt/LC_MESSAGES/django.po index 03d5295103..5b636802e5 100644 --- a/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "" @@ -194,10 +195,15 @@ msgstr "" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "" @@ -206,22 +212,23 @@ msgstr "" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "" @@ -241,83 +248,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po index 3b0f4954b2..1882f12d21 100644 --- a/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Введите дату" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Подтвердить" @@ -85,8 +86,8 @@ msgstr "Вы должны вводить один и тот же адрес эл msgid "Duplicate serial: {n}" msgstr "Дублировать серийный номер: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "недопустимое количество" @@ -122,7 +123,7 @@ msgstr "Файл не найден" msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Вложения" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Выберите файл для вложения" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Ссылка" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Ссылка на внешний URL" @@ -152,10 +153,10 @@ msgstr "Комментарий" msgid "File comment" msgstr "Комментарий к файлу" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Пользователь" @@ -194,10 +195,15 @@ msgstr "Неверный выбор" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Название" @@ -206,22 +212,23 @@ msgstr "Название" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Описание" @@ -241,83 +248,83 @@ msgstr "Должно быть действительным номером" msgid "Filename" msgstr "Имя файла" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Немецкий" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Греческий" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Английский" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Испанский" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "Испанский (Мексика)" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Французский" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Иврит" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Итальянский" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Японский" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Корейский" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Голландский" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Норвежский" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Польский" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "Португальский" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Русский" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Шведский" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Тайский" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Турецкий" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Вьетнамский" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Китайский" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "Ошибка проверки состояния системы InvenTree" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "Ожидаемый" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Размещены" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Готово" @@ -361,8 +370,8 @@ msgstr "Потерян" msgid "Returned" msgstr "Возвращено" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Доставлено" @@ -442,7 +451,7 @@ msgstr "Отделить от родительского элемента" msgid "Split child item" msgstr "Разбить дочерний элемент" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "Отправлено клиенту" @@ -522,55 +531,55 @@ msgstr "Установить пароль" msgid "Password fields must match" msgstr "Пароли должны совпадать" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Информация о системе" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "Должен быть предоставлен параметр штрихкода" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "Не найдено совпадений для данных штрих-кода" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Найдено совпадение по штрих-коду" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "Необходимо предоставить параметр инвентаря" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Не найдено совпадающих элементов инвентаря" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" -msgstr "Штрих-код уже соответствует объекту StockItem" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" +msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" -msgstr "Штрих-код уже соответствует объекту StockLocation" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" +msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "Штрих-код уже соответствует объекту Part" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" +msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" -msgstr "Хэш штрих-кода уже соответствует объекту StockItem" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" -msgstr "Штрих-код, связанный с инвентарем" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" +msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "Штрих-код, связанный с инвентарем" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "Количество" @@ -603,9 +615,9 @@ msgstr "Количество" msgid "Enter quantity for build output" msgstr "Введите количество для вывода сборки" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "Серийные номера" @@ -640,17 +652,17 @@ msgstr "Неверный выбор для родительской сборки #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "Порядок сборки" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "Порядок сборки" @@ -658,13 +670,13 @@ msgstr "Порядок сборки" msgid "Build Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Отсылка" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Детали" @@ -721,7 +735,8 @@ msgstr "Отсылка на заказ" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Расположение источника" @@ -761,7 +776,7 @@ msgstr "Статус сборки" msgid "Build status code" msgstr "Код статуса сборки" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "Штрих код" @@ -769,12 +784,12 @@ msgstr "Штрих код" msgid "Batch code for this build output" msgstr "Штрих код для этого вывода сборки" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "Целевая дата завершения" @@ -782,8 +797,8 @@ msgstr "Целевая дата завершения" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для сборки. Сборка будет просрочена после этой даты." -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "Дата завершения" @@ -791,7 +806,7 @@ msgstr "Дата завершения" msgid "completed by" msgstr "выполнено" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "Выдал/ла" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "Пользователь, выпустивший этот заказ на сборку" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Ответственный" @@ -815,7 +830,7 @@ msgstr "Пользователь ответственный за этот зак #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "Внешняя ссылка" @@ -823,18 +838,19 @@ msgstr "Внешняя ссылка" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "Заметки" @@ -867,7 +883,7 @@ msgstr "Выделенное количество ({q}) не должно пре msgid "Stock item is over-allocated" msgstr "Предмет на складе перераспределен" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "Выделенное количество должно быть больше нуля" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "Выбранный предмет со складом не найден в BOM" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "Сборка" @@ -889,14 +905,17 @@ msgstr "Сборка" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "Предметы на складе" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "Расположение" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "Статус" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "Целевая дата" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "Просрочено" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "Партия" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "Создано" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "Заказать детали" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "Заметки сборки" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "Подтвердите выделение запасов" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/sv/LC_MESSAGES/django.po b/InvenTree/locale/sv/LC_MESSAGES/django.po index 0902728d5f..f30c4284d8 100644 --- a/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Ange datum" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Bekräfta" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Bilaga" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Välj fil att bifoga" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "Kommentar" msgid "File comment" msgstr "Fil kommentar" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Användare" @@ -194,10 +195,15 @@ msgstr "Ogiltigt val" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Namn" @@ -206,22 +212,23 @@ msgstr "Namn" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Beskrivning" @@ -241,83 +248,83 @@ msgstr "Måste vara ett giltigt nummer" msgid "Filename" msgstr "Filnamn" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Tyska" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Grekiska" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "Engelska" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "Spanska" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Franska" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "Hebreiska" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "Italienska" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Japanska" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Koreanska" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Nederländska" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Norska" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Polska" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Ryska" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "Svenska" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Thailändska" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Turkiska" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "Vietnamesiska" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Kinesiska" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "InvenTree systemhälsokontroll misslyckades" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "Väntar" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Placerad" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Slutför" @@ -361,8 +370,8 @@ msgstr "Förlorad" msgid "Returned" msgstr "Återlämnad" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Skickad" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/th/LC_MESSAGES/django.po b/InvenTree/locale/th/LC_MESSAGES/django.po index 826a1b4653..33d8b3334a 100644 --- a/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/InvenTree/locale/th/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "" @@ -194,10 +195,15 @@ msgstr "" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "" @@ -206,22 +212,23 @@ msgstr "" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "" @@ -241,83 +248,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "" @@ -658,13 +670,13 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "" @@ -791,7 +806,7 @@ msgstr "" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po index 39695002e7..032934132c 100644 --- a/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "Tarih giriniz" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "Onay" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "Tekrarlanan seri {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "Ek" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "Bağlantı" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" @@ -152,10 +153,10 @@ msgstr "Yorum" msgid "File comment" msgstr "Dosya yorumu" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Kullanıcı" @@ -194,10 +195,15 @@ msgstr "Geçersiz seçim" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "Adı" @@ -206,22 +212,23 @@ msgstr "Adı" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Açıklama" @@ -241,83 +248,83 @@ msgstr "Geçerli bir numara olmalı" msgid "Filename" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "Almanca" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "Yunanca" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "İngilizce" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "İspanyolca" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "Fransızca" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "İbranice" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "İtalyanca" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "Japonca" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "Korece" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "Flemenkçe" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "Norveççe" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "Polonyaca" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "Rusça" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "İsveççe" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "Tay dili" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "Türkçe" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "Çince" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "InvenTree sistem sağlık kontrolü başarısız" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "Bekliyor" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "Sipariş verildi" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "Tamamlandı" @@ -361,8 +370,8 @@ msgstr "Kayıp" msgid "Returned" msgstr "İade" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Sevk edildi" @@ -442,7 +451,7 @@ msgstr "Üst ögeden ayır" msgid "Split child item" msgstr "Alt ögeyi ayır" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "Müşteriye gönderildi" @@ -522,55 +531,55 @@ msgstr "Şifre Belirle" msgid "Password fields must match" msgstr "Parola alanları eşleşmelidir" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Sistem Bilgisi" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "Barcode_data parametresini sağlamalıdır" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "Barkod verisi için eşleşme bulunamadı" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "Barkod verisi için eşleşme bulundu" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "Stok kalemi parametresi sağlamalıdır" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "Eşleşen stok kalemi bulunamadı" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" -msgstr "Barkod başka bir stok kalemi nesnesi ile eşleşmektedir" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" +msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" -msgstr "Barkod başka bir stok konumu nesnesi ile eşleşmektedir" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" +msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "Barkod başka bir parça nesnesi ile eşleşmektedir" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" +msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" -msgstr "Barkod karması (hash) zaten stok kalemi nesnesiyle eşleşiyor" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" -msgstr "Barkod başka bir stok kalemiyle ilişkili" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" +msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "Barkod başka bir stok kalemiyle ilişkili" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "Miktar" @@ -603,9 +615,9 @@ msgstr "Miktar" msgid "Enter quantity for build output" msgstr "Yapım işi çıktısı için miktarını girin" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "Seri Numaraları" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "Yapım İşi Emri" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "Yapım İşi Emirleri" @@ -658,13 +670,13 @@ msgstr "Yapım İşi Emirleri" msgid "Build Order Reference" msgstr "Yapım İşi Emri Referansı" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referans" @@ -683,7 +695,7 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Parça" @@ -721,7 +735,8 @@ msgstr "Satış Emri Referansı" msgid "SalesOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği satış emri" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Kaynak Konum" @@ -761,7 +776,7 @@ msgstr "Yapım İşi Durumu" msgid "Build status code" msgstr "Yapım işi durum kodu" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "Sıra numarası" @@ -769,12 +784,12 @@ msgstr "Sıra numarası" msgid "Batch code for this build output" msgstr "Yapım işi çıktısı için sıra numarası" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" @@ -782,8 +797,8 @@ msgstr "Hedef tamamlama tarihi" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak." -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "Tamamlama tarihi" @@ -791,7 +806,7 @@ msgstr "Tamamlama tarihi" msgid "completed by" msgstr "tamamlayan" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "Veren" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "Bu yapım işi emrini veren kullanıcı" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Sorumlu" @@ -815,7 +830,7 @@ msgstr "Bu yapım işi emrinden sorumlu kullanıcı" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "Harici Bağlantı" @@ -823,18 +838,19 @@ msgstr "Harici Bağlantı" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "Notlar" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "Yapım İşi" @@ -889,14 +905,17 @@ msgstr "Yapım İşi" msgid "Build to allocate parts" msgstr "Yapım işi için tahsis edilen parçalar" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "Stok Kalemi" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "Konum" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "Durum" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "Stok, yapım işi emri için tamamen tahsis edilemedi" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "Hedeflenen tarih" @@ -1096,28 +1116,28 @@ msgstr "Bu yapım işinin %(target)s tarihinde süresi doluyor" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "Vadesi geçmiş" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "Tamamlandı" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "Sipariş Emri" @@ -1191,8 +1211,8 @@ msgstr "Stok Kaynağı" msgid "Stock can be taken from any available location." msgstr "Stok herhangi bir konumdan alınabilir." -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Hedef" @@ -1200,22 +1220,22 @@ msgstr "Hedef" msgid "Destination location not specified" msgstr "Hedef konumu belirtilmedi" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "Toplu" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "Oluşturuldu" @@ -1235,7 +1255,7 @@ msgstr "Alt Yapım İşi Emrileri" msgid "Allocate Stock to Build" msgstr "Yapım İşi için Stok Tahsis Et" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "Stok tahsisini kaldır" @@ -1257,7 +1277,7 @@ msgstr "Gerekli parçaları sipariş edin" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "Parça Siparişi" @@ -1309,8 +1329,8 @@ msgstr "Tamamlanmış Yapım İşi Çıktıları" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "Yapım İşi Notları" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "Yapım İşi Çıktısı Oluştur" msgid "Maximum output quantity is " msgstr "Maksimum çıktı miktarı " -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" @@ -1400,7 +1420,7 @@ msgstr "Yapım İşi Çıktısı Sil" msgid "Confirm unallocation of build stock" msgstr "Yapım işi stoku tahsisinin iptalini onayla" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "Onay kutusunu işaretleyin" @@ -1469,7 +1489,7 @@ msgstr "{name.title()} Dosya" msgid "Select {name} file to upload" msgstr "{name} dosyasını yüklemek için seçin" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "URL'den indir" msgid "Allow download of remote images and files from external URL" msgstr "Harici URL'den resim ve dosyaların indirilmesine izin ver" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Barkod Desteği" @@ -1623,7 +1643,7 @@ msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "Şablon" @@ -1633,7 +1653,7 @@ msgstr "Parçaları varsayılan olan şablondur" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "Montaj" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "Bileşen" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "Satılabilir" @@ -1670,7 +1690,7 @@ msgstr "Parçalar varsayılan olarak satılabilir" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "Takip Edilebilir" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "Formlarda Miktarı Göster" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "Fiyat" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "Dosya Yükle" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "Bu şirket üretim yapıyor mu?" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "Para birimi" @@ -2293,12 +2347,12 @@ msgstr "Para birimi" msgid "Default currency used for this company" msgstr "Bu şirket için varsayılan para birimi" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "Temel Parça" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "Parça seçin" @@ -2319,7 +2373,7 @@ msgstr "Üretici seçin" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "ÜPN" @@ -2349,8 +2403,8 @@ msgstr "Parametre adı" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "Değer" @@ -2360,7 +2414,7 @@ msgstr "Parametre değeri" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "Tedarikçi" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "Tedarikçi seçin" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "SKU" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "Paketleme" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "Satın Alma Emri Oluştur" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "Müşteri" @@ -2580,7 +2635,7 @@ msgstr "Tedarikçi Stoku" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "Satın Alma Emirleri" @@ -2602,7 +2657,7 @@ msgstr "Yeni Satın Alma Emri" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "Satış Emirleri" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "Yeni Satış Emri" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "Atanan Stok" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "Üreticiler" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "Tedarikçi parçalarını sil" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "Tedarikçi Parçası" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "Stok" @@ -2844,7 +2899,7 @@ msgstr "Fiyatlandırma" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "Stok Kalemleri" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "Yeni Üretici" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "Müşteriler" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "Sipariş ver" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "Siparişi tamamlandı olarak işaretle" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "Siparişi iptal et" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "Stok kalemi seri numaları girin" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "Sipariş açıklaması" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "Oluşturan" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "Sipariş notları" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar bir olmalı" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "Ürünler" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "Sipariş Notları" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." -msgstr "Emri göndermeden önce emir tahsisinin doğru olduğundan emin olun." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" +msgstr "İşlemler" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "Seri numarası ile stok kalemlerini tahsis et" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "Siparişi İptal Et" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "Fiyatları güncelle" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "Seri Numaralarını Tahsis Et" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "{serial} seri numarası için eşleşen öge bulunamadı" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "{serial} stokta yok" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "{serial} zaten bir emirde tahsis edilmiş" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "Parça Kategorileri" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "Parçalar" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "DPN" @@ -3975,10 +4093,11 @@ msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "Aktif" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "Test Adı" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Gerekli" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "Parametre Şablonu" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "Çeşide İzin Ver" msgid "Stock items for variant parts can be used for this BOM item" msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "Bu parça %(link)s parçasının bir çeşididir" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "Seri Numara" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "Seri No" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "Bu stok kalemi için son kullanma tarihi" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "Benzersiz seri numaraları giriniz (veya boş bırakınız)" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "Seri numaralandırılmış stok için hedef konum(varsayılan olarak, geçerli konumda kalacaktır)" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "Seri numaraları" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "Benzersiz seri numaraları (miktar ile eşleşmeli)" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "Kurulacak stok kalemi" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "Sökülen ögeler için hedef konum" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "Kurulu stok kalemlerinin kaldırılmasını onayla" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "Bu seri numarasına sahip stok kalemi zaten var" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "Bu stok kalemi için tedarikçi parçası seçin" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "Seri numaraları tam sayı listesi olmalı" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Seri numaraları zaten mevcut: {exists}" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "Stoku seri numarala" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erdi" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erecek" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "Stok kalemi tüm gerekli testleri geçmedi" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "Konum ayarlanmadı" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "Stok Kalemine Dönüştür" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "Stok konumunu düzenle" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "Sahip gerekli (sahip kontrolü etkinleştirildi)" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "Stok Konumu QR Kodu" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "Geçerli bir konum belirtiniz" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "Stok ayarlamasını onayla" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "Yeni Stok konumu oluştur" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "Stok Konumunu Sil" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "Parça Parametre Şablonu" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "Commit Tarihi" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "Commit Hash Değeri" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "Kategori parametre şablonu bulunamadı" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "Şablonu Düzenle" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "Şablonu Sil" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "Parça parametre şablonu bulunamadı" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "Arama Ayarları" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "InvenTree Sürüm Bilgisi" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Kapat" @@ -6513,14 +6853,6 @@ msgstr "Güncel" msgid "Update Available" msgstr "Güncelleme Mevcut" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "Commit Hash Değeri" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "Commit Tarihi" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "Mevcut" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "Cevap Yok" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "Bu fonksiyona erişmek için gerekli izinlere sahip değilsiniz" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "İşlemler" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "Gerekli Parça" @@ -7041,165 +7369,165 @@ msgstr "Gerekli Parça" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "Stok tahsisini düzenle" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "Stok tahsisini sil" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "Parçaları Seçin" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "Stok tahsisini onayla" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "Etiket Seç" msgid "Select Label Template" msgstr "Etiket Şablonu Seç" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "Silme İşlemini Onayla" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "Seri numaralarını tahsis et" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "Seri Numaralarını Tahsis Et" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "Sorgu ile eşleşen test şablonu bulunamadı" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "Stok konumu ayarlanmadı" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "konumlar" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "Tanımsız konum" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "Detaylar" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "Konum artık yok" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "Çeşit Stokuna İzin Ver" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "Alt konumları dahil et" @@ -8288,54 +8705,54 @@ msgstr "Konumları dahil et" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "Seri Numaralı" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "Seri numarası BvE" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "Seri numarası büyük veya eşit" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "Seri numarası KvE" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "Seri numarası küçük veya eşit" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "Seri numarası" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:184 msgid "Include stock in sublocations" msgstr "Alt konumlardaki stoku dahil et" -#: templates/js/translated/table_filters.js:184 +#: templates/js/translated/table_filters.js:189 msgid "Show stock items which are depleted" msgstr "" -#: templates/js/translated/table_filters.js:189 +#: templates/js/translated/table_filters.js:194 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:193 +#: templates/js/translated/table_filters.js:198 msgid "In Production" msgstr "" -#: templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:199 msgid "Show items which are in production" msgstr "" -#: templates/js/translated/table_filters.js:198 +#: templates/js/translated/table_filters.js:203 msgid "Include Variants" msgstr "Çeşitleri Dahil Et" -#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:204 msgid "Include stock items for variant parts" msgstr "Çeşit parçaların stok kalemlerini dahil et" -#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:208 msgid "Installed" msgstr "" -#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:209 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:209 +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "Alt kategorilerdeki parçaları dahil et" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "DPN Var" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/vi/LC_MESSAGES/django.po b/InvenTree/locale/vi/LC_MESSAGES/django.po index 8f72d43f63..1f893cff2e 100644 --- a/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:25\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "" @@ -85,8 +86,8 @@ msgstr "" msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" @@ -122,7 +123,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "" @@ -152,10 +153,10 @@ msgstr "Bình luận" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "Người dùng" @@ -194,10 +195,15 @@ msgstr "" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "" @@ -206,22 +212,23 @@ msgstr "" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "Mô tả" @@ -241,83 +248,83 @@ msgstr "" msgid "Filename" msgstr "Tên tập tin" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "" @@ -361,8 +370,8 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -442,7 +451,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "" @@ -522,55 +531,55 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "Thông tin hệ thống" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "" @@ -603,9 +615,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "" @@ -640,17 +652,17 @@ msgstr "" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "Tạo đơn hàng" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "Tạo đơn hàng" @@ -658,13 +670,13 @@ msgstr "Tạo đơn hàng" msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" @@ -683,7 +695,7 @@ msgstr "" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "Nguyên liệu" @@ -721,7 +735,8 @@ msgstr "" msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" @@ -761,7 +776,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "" @@ -769,12 +784,12 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "" @@ -782,8 +797,8 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "Ngày hoàn thành" @@ -791,7 +806,7 @@ msgstr "Ngày hoàn thành" msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" @@ -815,7 +830,7 @@ msgstr "" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "" @@ -823,18 +838,19 @@ msgstr "" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "" @@ -889,14 +905,17 @@ msgstr "" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "Trạng thái" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "" @@ -1096,28 +1116,28 @@ msgstr "" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "Đã hoàn thành" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "" @@ -1235,7 +1255,7 @@ msgstr "" msgid "Allocate Stock to Build" msgstr "" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "" @@ -1257,7 +1277,7 @@ msgstr "" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "" msgid "Maximum output quantity is " msgstr "" -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "" @@ -1400,7 +1420,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "" @@ -1670,7 +1690,7 @@ msgstr "" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "Hiển thị nguyên liệu mới nhất" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "" @@ -2293,12 +2347,12 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "" @@ -2319,7 +2373,7 @@ msgstr "" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "" @@ -2349,8 +2403,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "" @@ -2360,7 +2414,7 @@ msgstr "" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "Nhà cung cấp" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "" @@ -2493,11 +2547,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "" @@ -2580,7 +2635,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "" @@ -2602,7 +2657,7 @@ msgstr "" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "" @@ -2673,7 +2728,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "" @@ -2687,7 +2742,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "Kiện hàng" @@ -2844,7 +2899,7 @@ msgstr "" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "" @@ -2960,284 +3015,374 @@ msgstr "" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "" @@ -3828,8 +3946,8 @@ msgstr "" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "Nguyên liệu" @@ -3895,7 +4013,7 @@ msgstr "" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "" @@ -3906,7 +4024,7 @@ msgstr "" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "Cài đặt" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "" @@ -6177,6 +6401,126 @@ msgstr "" msgid "Part Parameter Templates" msgstr "" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "Quản trị" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "" @@ -6194,86 +6538,82 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "Cài đặt" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "Chỉnh sửa cài đặt toàn cục" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "Chỉnh sửa cài đặt người dùng" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "Cài đặt người dùng" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "Cài đặt tài khoản" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "Thiết đặt hiển thị" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "Cài đặt tìm kiếm" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "Cài đặt toàn cục" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "" msgid "Delete Manufacturer Part" msgstr "" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "" @@ -7429,62 +7757,62 @@ msgstr "" msgid "Select Label Template" msgstr "" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "Số seri mới nhất" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/translated/table_filters.js:193 -msgid "In Production" +msgid "Show stock items which are depleted" msgstr "" #: templates/js/translated/table_filters.js:194 -msgid "Show items which are in production" +msgid "Show items which are in stock" msgstr "" #: templates/js/translated/table_filters.js:198 -msgid "Include Variants" +msgid "In Production" msgstr "" #: templates/js/translated/table_filters.js:199 -msgid "Include stock items for variant parts" +msgid "Show items which are in production" msgstr "" #: templates/js/translated/table_filters.js:203 -msgid "Installed" +msgid "Include Variants" msgstr "" #: templates/js/translated/table_filters.js:204 -msgid "Show stock items which are installed in another item" +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:208 +msgid "Installed" msgstr "" #: templates/js/translated/table_filters.js:209 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "Mua" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "Bán" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "Quản trị" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "Đăng xuất" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "Giới thiệu" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po index c482dd3fb5..08a330c36f 100644 --- a/InvenTree/locale/zh/LC_MESSAGES/django.po +++ b/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -1,9 +1,10 @@ +#: templates/js/translated/order.js:1973 msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-12-03 10:37+0000\n" -"PO-Revision-Date: 2021-12-03 11:26\n" +"POT-Creation-Date: 2021-12-08 23:43+0000\n" +"PO-Revision-Date: 2021-12-08 23:47\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -34,8 +35,8 @@ msgid "Enter date" msgstr "输入日期" #: InvenTree/forms.py:120 build/forms.py:48 build/forms.py:69 build/forms.py:93 -#: order/forms.py:26 order/forms.py:37 order/forms.py:48 order/forms.py:59 -#: order/forms.py:70 part/forms.py:108 templates/account/email_confirm.html:20 +#: order/forms.py:24 order/forms.py:35 order/forms.py:46 order/forms.py:57 +#: part/forms.py:108 templates/account/email_confirm.html:20 #: templates/js/translated/forms.js:595 msgid "Confirm" msgstr "确认" @@ -85,8 +86,8 @@ msgstr "您必须输入相同的 Email 。" msgid "Duplicate serial: {n}" msgstr "重复的序列号: {n}" -#: InvenTree/helpers.py:437 order/models.py:318 order/models.py:440 -#: stock/views.py:1264 +#: InvenTree/helpers.py:437 order/models.py:279 order/models.py:420 +#: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "提供的数量无效" @@ -122,7 +123,7 @@ msgstr "缺少文件" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1864 +#: InvenTree/models.py:132 stock/models.py:1852 #: templates/js/translated/attachment.js:117 msgid "Attachment" msgstr "附件" @@ -132,7 +133,7 @@ msgid "Select file to attach" msgstr "选择附件" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:163 part/models.py:797 +#: company/models.py:564 order/models.py:124 part/models.py:797 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:537 #: templates/js/translated/company.js:826 templates/js/translated/part.js:1258 @@ -140,7 +141,7 @@ msgid "Link" msgstr "链接" #: InvenTree/models.py:140 build/models.py:330 part/models.py:798 -#: stock/models.py:530 +#: stock/models.py:524 msgid "Link to external URL" msgstr "链接到外部 URL" @@ -152,10 +153,10 @@ msgstr "注释" msgid "File comment" msgstr "文件注释" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1185 -#: common/models.py:1186 part/models.py:2205 part/models.py:2225 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 +#: common/models.py:1214 part/models.py:2205 part/models.py:2225 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2166 +#: templates/js/translated/stock.js:2341 msgid "User" msgstr "用户" @@ -194,10 +195,15 @@ msgstr "选择无效" #: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 #: label/models.py:112 part/models.py:741 part/models.py:2389 -#: report/models.py:181 templates/InvenTree/settings/settings.html:259 +#: plugin/models.py:39 report/models.py:181 +#: templates/InvenTree/settings/mixins/urls.html:11 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin_settings.html:23 +#: templates/InvenTree/settings/settings.html:268 #: templates/js/translated/company.js:638 templates/js/translated/part.js:506 #: templates/js/translated/part.js:643 templates/js/translated/part.js:1565 -#: templates/js/translated/stock.js:1959 +#: templates/js/translated/stock.js:2134 msgid "Name" msgstr "名称" @@ -206,22 +212,23 @@ msgstr "名称" #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:161 part/models.py:764 part/templates/part/category.html:70 +#: order/models.py:122 part/models.py:764 part/templates/part/category.html:70 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 -#: stock/templates/stock/location.html:89 templates/js/translated/bom.js:215 -#: templates/js/translated/bom.js:428 templates/js/translated/build.js:1621 -#: templates/js/translated/company.js:345 +#: stock/templates/stock/location.html:89 +#: templates/InvenTree/settings/plugin_settings.html:33 +#: templates/js/translated/bom.js:215 templates/js/translated/bom.js:428 +#: templates/js/translated/build.js:1627 templates/js/translated/company.js:345 #: templates/js/translated/company.js:548 -#: templates/js/translated/company.js:837 templates/js/translated/order.js:680 -#: templates/js/translated/order.js:854 templates/js/translated/order.js:1090 +#: templates/js/translated/company.js:837 templates/js/translated/order.js:836 +#: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 #: templates/js/translated/part.js:565 templates/js/translated/part.js:933 #: templates/js/translated/part.js:1018 templates/js/translated/part.js:1188 #: templates/js/translated/part.js:1584 templates/js/translated/part.js:1653 -#: templates/js/translated/stock.js:1233 templates/js/translated/stock.js:1971 -#: templates/js/translated/stock.js:2016 +#: templates/js/translated/stock.js:1390 templates/js/translated/stock.js:2146 +#: templates/js/translated/stock.js:2191 msgid "Description" msgstr "描述信息" @@ -241,83 +248,83 @@ msgstr "必须是有效数字" msgid "Filename" msgstr "文件名" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:689 msgid "German" msgstr "德语" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:690 msgid "Greek" msgstr "希腊语" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:691 msgid "English" msgstr "英语" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:692 msgid "Spanish" msgstr "西班牙语" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:693 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:694 msgid "French" msgstr "法语" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:695 msgid "Hebrew" msgstr "希伯来语" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:696 msgid "Italian" msgstr "意大利语" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:697 msgid "Japanese" msgstr "日语" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:698 msgid "Korean" msgstr "韩语" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:699 msgid "Dutch" msgstr "荷兰语" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:700 msgid "Norwegian" msgstr "挪威语" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:701 msgid "Polish" msgstr "波兰语" -#: InvenTree/settings.py:683 +#: InvenTree/settings.py:702 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:684 +#: InvenTree/settings.py:703 msgid "Russian" msgstr "俄语" -#: InvenTree/settings.py:685 +#: InvenTree/settings.py:704 msgid "Swedish" msgstr "瑞典语" -#: InvenTree/settings.py:686 +#: InvenTree/settings.py:705 msgid "Thai" msgstr "泰语" -#: InvenTree/settings.py:687 +#: InvenTree/settings.py:706 msgid "Turkish" msgstr "土耳其语" -#: InvenTree/settings.py:688 +#: InvenTree/settings.py:707 msgid "Vietnamese" msgstr "越南语" -#: InvenTree/settings.py:689 +#: InvenTree/settings.py:708 msgid "Chinese" msgstr "中文(简体)" @@ -334,7 +341,7 @@ msgid "InvenTree system health checks failed" msgstr "InventTree系统健康检查失败" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 -#: InvenTree/status_codes.py:311 +#: InvenTree/status_codes.py:311 templates/js/translated/table_filters.js:313 msgid "Pending" msgstr "待定" @@ -343,6 +350,8 @@ msgid "Placed" msgstr "已添加" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:314 +#: order/templates/order/order_base.html:128 +#: order/templates/order/sales_order_base.html:132 msgid "Complete" msgstr "完成" @@ -361,8 +370,8 @@ msgstr "丢失" msgid "Returned" msgstr "已退回" -#: InvenTree/status_codes.py:143 -#: order/templates/order/sales_order_base.html:148 +#: InvenTree/status_codes.py:143 order/models.py:939 +#: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "已发货" @@ -442,7 +451,7 @@ msgstr "从父项拆分" msgid "Split child item" msgstr "拆分子项" -#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:208 +#: InvenTree/status_codes.py:291 templates/js/translated/table_filters.js:213 msgid "Sent to customer" msgstr "发送给客户" @@ -522,55 +531,55 @@ msgstr "设置密码" msgid "Password fields must match" msgstr "密码字段必须相匹配。" -#: InvenTree/views.py:883 templates/navbar.html:101 +#: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" msgstr "系统信息" -#: barcodes/api.py:53 barcodes/api.py:150 +#: barcodes/api.py:54 barcodes/api.py:151 msgid "Must provide barcode_data parameter" msgstr "必须提供条码数据参数" -#: barcodes/api.py:126 +#: barcodes/api.py:127 msgid "No match found for barcode data" msgstr "未找到匹配条形码数据" -#: barcodes/api.py:128 +#: barcodes/api.py:129 msgid "Match found for barcode data" msgstr "找到匹配条形码数据" -#: barcodes/api.py:153 +#: barcodes/api.py:154 msgid "Must provide stockitem parameter" msgstr "必须提供库存项参数" -#: barcodes/api.py:160 +#: barcodes/api.py:161 msgid "No matching stock item found" msgstr "未找到匹配的库存项" -#: barcodes/api.py:190 -msgid "Barcode already matches StockItem object" -msgstr "条形码已经匹配库存项" +#: barcodes/api.py:191 +msgid "Barcode already matches Stock Item" +msgstr "" -#: barcodes/api.py:194 -msgid "Barcode already matches StockLocation object" -msgstr "条形码已经匹配仓储地对象" +#: barcodes/api.py:195 +msgid "Barcode already matches Stock Location" +msgstr "" -#: barcodes/api.py:198 -msgid "Barcode already matches Part object" -msgstr "条形码已经匹配商品对象" +#: barcodes/api.py:199 +msgid "Barcode already matches Part" +msgstr "" -#: barcodes/api.py:204 barcodes/api.py:216 -msgid "Barcode hash already matches StockItem object" -msgstr "条码哈希值已经匹配库存项目" +#: barcodes/api.py:205 barcodes/api.py:217 +msgid "Barcode hash already matches Stock Item" +msgstr "" -#: barcodes/api.py:222 -msgid "Barcode associated with StockItem" -msgstr "与库存项关联的条形码" +#: barcodes/api.py:223 +msgid "Barcode associated with Stock Item" +msgstr "" #: build/forms.py:36 build/models.py:1283 #: build/templates/build/build_base.html:132 -#: build/templates/build/detail.html:35 common/models.py:1225 +#: build/templates/build/detail.html:35 common/models.py:1253 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/forms.py:102 order/models.py:729 order/models.py:991 +#: order/models.py:794 order/models.py:1205 order/serializers.py:810 #: order/templates/order/order_wizard/match_parts.html:30 #: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:223 #: part/forms.py:239 part/forms.py:255 part/models.py:2576 @@ -582,20 +591,23 @@ msgstr "与库存项关联的条形码" #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:81 #: report/templates/report/inventree_test_report_base.html:139 -#: stock/forms.py:156 stock/serializers.py:291 +#: stock/forms.py:142 stock/serializers.py:293 #: stock/templates/stock/item_base.html:174 +#: stock/templates/stock/item_base.html:255 +#: stock/templates/stock/item_base.html:263 #: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:443 -#: templates/js/translated/build.js:235 templates/js/translated/build.js:435 -#: templates/js/translated/build.js:629 templates/js/translated/build.js:639 -#: templates/js/translated/build.js:1015 templates/js/translated/build.js:1362 +#: templates/js/translated/build.js:240 templates/js/translated/build.js:440 +#: templates/js/translated/build.js:634 templates/js/translated/build.js:644 +#: templates/js/translated/build.js:1020 templates/js/translated/build.js:1367 #: templates/js/translated/model_renderers.js:99 -#: templates/js/translated/order.js:891 templates/js/translated/order.js:1204 -#: templates/js/translated/order.js:1282 templates/js/translated/order.js:1289 -#: templates/js/translated/order.js:1378 templates/js/translated/order.js:1478 -#: templates/js/translated/part.js:843 templates/js/translated/part.js:1796 -#: templates/js/translated/part.js:1919 templates/js/translated/part.js:1997 -#: templates/js/translated/stock.js:378 templates/js/translated/stock.js:2151 -#: templates/js/translated/stock.js:2253 +#: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 +#: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 +#: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:843 +#: templates/js/translated/part.js:1796 templates/js/translated/part.js:1919 +#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:579 templates/js/translated/stock.js:2326 +#: templates/js/translated/stock.js:2428 msgid "Quantity" msgstr "数量" @@ -603,9 +615,9 @@ msgstr "数量" msgid "Enter quantity for build output" msgstr "输入生产产出数量" -#: build/forms.py:41 order/forms.py:96 stock/forms.py:95 -#: stock/serializers.py:312 templates/js/translated/stock.js:225 -#: templates/js/translated/stock.js:379 +#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:229 +#: templates/js/translated/stock.js:383 msgid "Serial Numbers" msgstr "序列号" @@ -640,17 +652,17 @@ msgstr "上级生产选项无效" #: build/models.py:137 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:397 +#: templates/js/translated/build.js:402 msgid "Build Order" msgstr "生产订单" #: build/models.py:138 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 -#: order/templates/order/sales_order_detail.html:42 -#: order/templates/order/so_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:92 +#: order/templates/order/so_sidebar.html:13 #: part/templates/part/part_sidebar.html:20 templates/InvenTree/index.html:221 #: templates/InvenTree/search.html:145 -#: templates/InvenTree/settings/sidebar.html:42 users/models.py:44 +#: templates/InvenTree/settings/sidebar.html:43 users/models.py:44 msgid "Build Orders" msgstr "生产订单" @@ -658,13 +670,13 @@ msgstr "生产订单" msgid "Build Order Reference" msgstr "相关生产订单" -#: build/models.py:199 order/models.py:249 order/models.py:556 -#: order/models.py:736 part/models.py:2585 +#: build/models.py:199 order/models.py:210 order/models.py:536 +#: order/models.py:801 part/models.py:2585 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1119 -#: templates/js/translated/order.js:885 templates/js/translated/order.js:1472 +#: templates/js/translated/bom.js:435 templates/js/translated/build.js:1124 +#: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "引用" @@ -683,7 +695,7 @@ msgstr "此次生产匹配的订单" #: build/models.py:225 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:789 order/models.py:860 +#: order/models.py:854 order/models.py:928 #: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 #: part/models.py:2151 part/models.py:2167 part/models.py:2186 #: part/models.py:2203 part/models.py:2305 part/models.py:2427 @@ -698,14 +710,16 @@ msgstr "此次生产匹配的订单" #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 #: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:214 -#: templates/js/translated/bom.js:393 templates/js/translated/build.js:620 -#: templates/js/translated/build.js:988 templates/js/translated/build.js:1359 -#: templates/js/translated/build.js:1626 templates/js/translated/company.js:489 -#: templates/js/translated/company.js:746 templates/js/translated/order.js:426 -#: templates/js/translated/order.js:839 templates/js/translated/order.js:1456 -#: templates/js/translated/part.js:918 templates/js/translated/part.js:999 -#: templates/js/translated/part.js:1166 templates/js/translated/stock.js:590 -#: templates/js/translated/stock.js:1190 templates/js/translated/stock.js:2241 +#: templates/js/translated/bom.js:393 templates/js/translated/build.js:625 +#: templates/js/translated/build.js:993 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:1632 templates/js/translated/company.js:489 +#: templates/js/translated/company.js:746 templates/js/translated/order.js:84 +#: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 +#: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:918 +#: templates/js/translated/part.js:999 templates/js/translated/part.js:1166 +#: templates/js/translated/stock.js:553 templates/js/translated/stock.js:747 +#: templates/js/translated/stock.js:1347 templates/js/translated/stock.js:2416 msgid "Part" msgstr "商品" @@ -721,7 +735,8 @@ msgstr "相关销售订单" msgid "SalesOrder to which this build is allocated" msgstr "此次生产匹配的销售订单" -#: build/models.py:247 templates/js/translated/build.js:1347 +#: build/models.py:247 templates/js/translated/build.js:1352 +#: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "来源地点" @@ -761,7 +776,7 @@ msgstr "生产状态" msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:285 stock/models.py:534 +#: build/models.py:285 stock/models.py:528 msgid "Batch Code" msgstr "批量代码" @@ -769,12 +784,12 @@ msgstr "批量代码" msgid "Batch code for this build output" msgstr "此生产产出的批量代码" -#: build/models.py:292 order/models.py:165 part/models.py:936 -#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1103 +#: build/models.py:292 order/models.py:126 part/models.py:936 +#: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "创建日期" -#: build/models.py:296 order/models.py:578 +#: build/models.py:296 order/models.py:558 msgid "Target completion date" msgstr "预计完成日期" @@ -782,8 +797,8 @@ msgstr "预计完成日期" msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产完成的目标日期。生产将在此日期之后逾期。" -#: build/models.py:300 order/models.py:291 -#: templates/js/translated/build.js:1697 +#: build/models.py:300 order/models.py:252 +#: templates/js/translated/build.js:1703 msgid "Completion Date" msgstr "完成日期:" @@ -791,7 +806,7 @@ msgstr "完成日期:" msgid "completed by" msgstr "完成人" -#: build/models.py:314 templates/js/translated/build.js:1668 +#: build/models.py:314 templates/js/translated/build.js:1674 msgid "Issued by" msgstr "发布者" @@ -800,11 +815,11 @@ msgid "User who issued this build order" msgstr "发布此生产订单的用户" #: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:179 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:162 part/models.py:940 +#: build/templates/build/detail.html:116 order/models.py:140 +#: order/templates/order/order_base.html:170 +#: order/templates/order/sales_order_base.html:182 part/models.py:940 #: report/templates/report/inventree_build_order_base.html:159 -#: templates/js/translated/build.js:1680 templates/js/translated/order.js:699 +#: templates/js/translated/build.js:1686 templates/js/translated/order.js:864 msgid "Responsible" msgstr "责任人" @@ -815,7 +830,7 @@ msgstr "负责此生产订单的用户" #: build/models.py:329 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:528 +#: part/templates/part/part_base.html:354 stock/models.py:522 #: stock/templates/stock/item_base.html:374 msgid "External Link" msgstr "外部链接" @@ -823,18 +838,19 @@ msgstr "外部链接" #: build/models.py:334 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:183 order/models.py:738 +#: order/models.py:144 order/models.py:803 order/models.py:1049 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:11 part/models.py:925 +#: order/templates/order/so_sidebar.html:17 part/models.py:925 #: part/templates/part/detail.html:116 part/templates/part/part_sidebar.html:50 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:154 stock/forms.py:204 stock/forms.py:238 stock/models.py:600 -#: stock/models.py:1764 stock/models.py:1870 stock/serializers.py:330 -#: stock/serializers.py:588 stock/templates/stock/stock_sidebar.html:21 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:594 +#: stock/models.py:1752 stock/models.py:1858 stock/serializers.py:332 +#: stock/serializers.py:624 stock/serializers.py:711 +#: stock/templates/stock/stock_sidebar.html:21 #: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:599 -#: templates/js/translated/company.js:842 templates/js/translated/order.js:984 -#: templates/js/translated/order.js:1582 templates/js/translated/stock.js:973 -#: templates/js/translated/stock.js:1452 +#: templates/js/translated/company.js:842 templates/js/translated/order.js:1149 +#: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:1616 msgid "Notes" msgstr "备注" @@ -867,7 +883,7 @@ msgstr "" msgid "Stock item is over-allocated" msgstr "库存物品分配过度!" -#: build/models.py:1133 order/models.py:964 +#: build/models.py:1133 order/models.py:1165 msgid "Allocation quantity must be greater than zero" msgstr "分配数量必须大于0" @@ -880,8 +896,8 @@ msgid "Selected stock item not found in BOM" msgstr "" #: build/models.py:1253 stock/templates/stock/item_base.html:346 -#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1599 -#: templates/navbar.html:33 +#: templates/InvenTree/search.html:143 templates/js/translated/build.js:1605 +#: templates/navbar.html:35 msgid "Build" msgstr "生产" @@ -889,14 +905,17 @@ msgstr "生产" msgid "Build to allocate parts" msgstr "" -#: build/models.py:1270 build/serializers.py:328 +#: build/models.py:1270 build/serializers.py:328 order/serializers.py:690 +#: order/serializers.py:708 stock/serializers.py:562 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:16 #: stock/templates/stock/item_base.html:368 -#: templates/js/translated/build.js:408 templates/js/translated/build.js:413 -#: templates/js/translated/build.js:1361 templates/js/translated/build.js:1742 -#: templates/js/translated/order.js:1177 templates/js/translated/order.js:1182 -#: templates/js/translated/stock.js:2102 +#: templates/js/translated/build.js:413 templates/js/translated/build.js:418 +#: templates/js/translated/build.js:1366 templates/js/translated/build.js:1748 +#: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 +#: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 +#: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 +#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:2277 msgid "Stock Item" msgstr "库存项" @@ -936,16 +955,17 @@ msgstr "" msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:190 order/serializers.py:228 order/serializers.py:296 -#: stock/forms.py:236 stock/serializers.py:323 stock/serializers.py:690 +#: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:813 #: stock/templates/stock/item_base.html:314 #: templates/js/translated/barcode.js:384 -#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:420 -#: templates/js/translated/build.js:1027 templates/js/translated/order.js:348 -#: templates/js/translated/order.js:1189 templates/js/translated/order.js:1297 -#: templates/js/translated/order.js:1303 templates/js/translated/part.js:177 -#: templates/js/translated/stock.js:592 templates/js/translated/stock.js:1333 -#: templates/js/translated/stock.js:2043 +#: templates/js/translated/barcode.js:557 templates/js/translated/build.js:425 +#: templates/js/translated/build.js:1032 templates/js/translated/order.js:508 +#: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 +#: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 +#: templates/js/translated/part.js:177 templates/js/translated/stock.js:555 +#: templates/js/translated/stock.js:749 templates/js/translated/stock.js:1497 +#: templates/js/translated/stock.js:2218 msgid "Location" msgstr "地点" @@ -954,12 +974,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:572 -#: order/serializers.py:249 stock/templates/stock/item_base.html:180 -#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1655 -#: templates/js/translated/order.js:431 templates/js/translated/order.js:1095 -#: templates/js/translated/stock.js:1308 templates/js/translated/stock.js:2120 -#: templates/js/translated/stock.js:2269 +#: build/templates/build/detail.html:63 order/models.py:552 +#: order/serializers.py:247 stock/templates/stock/item_base.html:180 +#: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1661 +#: templates/js/translated/order.js:591 templates/js/translated/order.js:840 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1472 +#: templates/js/translated/stock.js:2295 templates/js/translated/stock.js:2444 msgid "Status" msgstr "状态" @@ -984,16 +1004,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:334 +#: build/serializers.py:334 stock/serializers.py:569 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:348 order/models.py:316 order/serializers.py:242 -#: stock/models.py:371 stock/models.py:1093 stock/serializers.py:303 +#: build/serializers.py:348 order/models.py:277 order/serializers.py:240 +#: stock/models.py:365 stock/models.py:1081 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:390 +#: build/serializers.py:390 order/serializers.py:741 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1006,7 +1026,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:431 +#: build/serializers.py:431 order/serializers.py:984 msgid "Allocation items must be provided" msgstr "" @@ -1079,11 +1099,11 @@ msgstr "" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 -#: order/templates/order/order_base.html:144 -#: order/templates/order/sales_order_base.html:141 +#: order/templates/order/order_base.html:156 +#: order/templates/order/sales_order_base.html:163 #: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/translated/build.js:1692 templates/js/translated/order.js:689 -#: templates/js/translated/order.js:1108 +#: templates/js/translated/build.js:1698 templates/js/translated/order.js:854 +#: templates/js/translated/order.js:1276 msgid "Target Date" msgstr "预计日期" @@ -1096,28 +1116,28 @@ msgstr "此次生产的截止日期为 %(target)s" #: build/templates/build/build_base.html:196 #: order/templates/order/order_base.html:98 #: order/templates/order/sales_order_base.html:93 -#: templates/js/translated/table_filters.js:294 -#: templates/js/translated/table_filters.js:322 -#: templates/js/translated/table_filters.js:339 +#: templates/js/translated/table_filters.js:299 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:361 msgid "Overdue" msgstr "逾期" #: build/templates/build/build_base.html:158 #: build/templates/build/detail.html:68 build/templates/build/detail.html:143 -#: templates/js/translated/build.js:1641 -#: templates/js/translated/table_filters.js:304 +#: order/templates/order/sales_order_base.html:170 +#: templates/js/translated/build.js:1647 +#: templates/js/translated/table_filters.js:370 msgid "Completed" msgstr "已完成" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:857 -#: order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:925 +#: order/models.py:1021 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: order/templates/order/sales_order_ship.html:25 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:308 -#: templates/js/translated/order.js:1050 +#: templates/js/translated/order.js:1218 msgid "Sales Order" msgstr "销售订单" @@ -1191,8 +1211,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:811 stock/forms.py:150 -#: templates/js/translated/order.js:432 templates/js/translated/order.js:973 +#: build/templates/build/detail.html:50 order/models.py:876 stock/forms.py:136 +#: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1200,22 +1220,22 @@ msgstr "" msgid "Destination location not specified" msgstr "" -#: build/templates/build/detail.html:74 templates/js/translated/build.js:647 +#: build/templates/build/detail.html:74 templates/js/translated/build.js:652 msgid "Allocated Parts" msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:332 -#: templates/js/translated/stock.js:1322 templates/js/translated/stock.js:2276 +#: templates/js/translated/stock.js:1486 templates/js/translated/stock.js:2451 #: templates/js/translated/table_filters.js:151 -#: templates/js/translated/table_filters.js:233 +#: templates/js/translated/table_filters.js:238 msgid "Batch" msgstr "" #: build/templates/build/detail.html:127 -#: order/templates/order/order_base.html:131 -#: order/templates/order/sales_order_base.html:135 -#: templates/js/translated/build.js:1663 +#: order/templates/order/order_base.html:143 +#: order/templates/order/sales_order_base.html:157 +#: templates/js/translated/build.js:1669 msgid "Created" msgstr "已创建" @@ -1235,7 +1255,7 @@ msgstr "子生产订单" msgid "Allocate Stock to Build" msgstr "为生产分配库存" -#: build/templates/build/detail.html:177 templates/js/translated/build.js:1202 +#: build/templates/build/detail.html:177 templates/js/translated/build.js:1207 msgid "Unallocate stock" msgstr "未分配库存" @@ -1257,7 +1277,7 @@ msgstr "订单所需部件" #: build/templates/build/detail.html:185 #: company/templates/company/detail.html:38 -#: company/templates/company/detail.html:85 order/views.py:509 +#: company/templates/company/detail.html:85 order/views.py:463 #: part/templates/part/category.html:173 msgid "Order Parts" msgstr "订购商品" @@ -1309,8 +1329,8 @@ msgstr "" #: build/templates/build/detail.html:278 build/templates/build/sidebar.html:19 #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 -#: order/templates/order/sales_order_detail.html:52 -#: order/templates/order/so_sidebar.html:9 part/templates/part/detail.html:193 +#: order/templates/order/sales_order_detail.html:107 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:193 #: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 #: stock/templates/stock/stock_sidebar.html:19 msgid "Attachments" @@ -1325,8 +1345,8 @@ msgstr "生产备注" #: company/templates/company/detail.html:215 #: order/templates/order/purchase_order_detail.html:80 #: order/templates/order/purchase_order_detail.html:108 -#: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/sales_order_detail.html:127 +#: order/templates/order/sales_order_detail.html:186 #: part/templates/part/detail.html:120 stock/templates/stock/item.html:115 #: stock/templates/stock/item.html:205 msgid "Edit Notes" @@ -1384,7 +1404,7 @@ msgstr "创建创建生产产出" msgid "Maximum output quantity is " msgstr "最大产出量是 " -#: build/views.py:122 stock/serializers.py:361 stock/views.py:1290 +#: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" msgstr "序列号已存在" @@ -1400,7 +1420,7 @@ msgstr "删除生产产出" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:219 stock/views.py:385 +#: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" msgstr "选中确认框" @@ -1469,7 +1489,7 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:340 common/models.py:970 common/models.py:1178 +#: common/models.py:340 common/models.py:998 common/models.py:1206 msgid "Settings key (must be unique - case insensitive" msgstr "" @@ -1557,7 +1577,7 @@ msgstr "" msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:649 templates/InvenTree/settings/sidebar.html:30 +#: common/models.py:649 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" @@ -1623,7 +1643,7 @@ msgstr "" #: common/models.py:703 part/models.py:2429 report/models.py:187 #: templates/js/translated/table_filters.js:38 -#: templates/js/translated/table_filters.js:373 +#: templates/js/translated/table_filters.js:404 msgid "Template" msgstr "模板" @@ -1633,7 +1653,7 @@ msgstr "" #: common/models.py:710 part/models.py:888 templates/js/translated/bom.js:956 #: templates/js/translated/table_filters.js:168 -#: templates/js/translated/table_filters.js:385 +#: templates/js/translated/table_filters.js:416 msgid "Assembly" msgstr "组装" @@ -1642,7 +1662,7 @@ msgid "Parts can be assembled from other components by default" msgstr "" #: common/models.py:717 part/models.py:894 -#: templates/js/translated/table_filters.js:389 +#: templates/js/translated/table_filters.js:420 msgid "Component" msgstr "组件" @@ -1659,7 +1679,7 @@ msgid "Parts are purchaseable by default" msgstr "商品默认可购买" #: common/models.py:731 part/models.py:910 -#: templates/js/translated/table_filters.js:397 +#: templates/js/translated/table_filters.js:428 msgid "Salable" msgstr "可销售" @@ -1670,7 +1690,7 @@ msgstr "商品默认可销售" #: common/models.py:738 part/models.py:900 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 -#: templates/js/translated/table_filters.js:401 +#: templates/js/translated/table_filters.js:432 msgid "Trackable" msgstr "可追踪" @@ -1932,230 +1952,262 @@ msgstr "" msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1001 +#: common/models.py:961 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:962 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:968 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:969 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:975 +msgid "Enable global setting integration" +msgstr "" + +#: common/models.py:976 +msgid "Enable plugins to integrate into inventree global settings" +msgstr "" + +#: common/models.py:982 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:983 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1029 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1002 +#: common/models.py:1030 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1007 +#: common/models.py:1035 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1008 +#: common/models.py:1036 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1013 +#: common/models.py:1041 msgid "Show latest parts" msgstr "显示最近商品" -#: common/models.py:1014 +#: common/models.py:1042 msgid "Show latest parts on the homepage" msgstr "在主页上显示最近商品" -#: common/models.py:1019 +#: common/models.py:1047 msgid "Recent Part Count" msgstr "" -#: common/models.py:1020 +#: common/models.py:1048 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1026 +#: common/models.py:1054 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1027 +#: common/models.py:1055 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1032 +#: common/models.py:1060 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1033 +#: common/models.py:1061 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1038 +#: common/models.py:1066 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1039 +#: common/models.py:1067 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1044 +#: common/models.py:1072 msgid "Show low stock" msgstr "" -#: common/models.py:1045 +#: common/models.py:1073 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1050 +#: common/models.py:1078 msgid "Show depleted stock" msgstr "" -#: common/models.py:1051 +#: common/models.py:1079 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1056 +#: common/models.py:1084 msgid "Show needed stock" msgstr "" -#: common/models.py:1057 +#: common/models.py:1085 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1062 +#: common/models.py:1090 msgid "Show expired stock" msgstr "" -#: common/models.py:1063 +#: common/models.py:1091 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1068 +#: common/models.py:1096 msgid "Show stale stock" msgstr "" -#: common/models.py:1069 +#: common/models.py:1097 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1074 +#: common/models.py:1102 msgid "Show pending builds" msgstr "" -#: common/models.py:1075 +#: common/models.py:1103 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1080 +#: common/models.py:1108 msgid "Show overdue builds" msgstr "显示逾期生产" -#: common/models.py:1081 +#: common/models.py:1109 msgid "Show overdue builds on the homepage" msgstr "在主页上显示逾期的生产" -#: common/models.py:1086 +#: common/models.py:1114 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1087 +#: common/models.py:1115 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1092 +#: common/models.py:1120 msgid "Show overdue POs" msgstr "" -#: common/models.py:1093 +#: common/models.py:1121 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1098 +#: common/models.py:1126 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1099 +#: common/models.py:1127 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1104 +#: common/models.py:1132 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1105 +#: common/models.py:1133 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1111 +#: common/models.py:1139 msgid "Inline label display" msgstr "内嵌标签显示" -#: common/models.py:1112 +#: common/models.py:1140 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" -#: common/models.py:1118 +#: common/models.py:1146 msgid "Inline report display" msgstr "" -#: common/models.py:1119 +#: common/models.py:1147 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" -#: common/models.py:1125 +#: common/models.py:1153 msgid "Search Preview Results" msgstr "搜索预览结果" -#: common/models.py:1126 +#: common/models.py:1154 msgid "Number of results to show in search preview window" msgstr "搜索预览窗口中显示的结果数" -#: common/models.py:1132 +#: common/models.py:1160 msgid "Search Show Stock" msgstr "" -#: common/models.py:1133 +#: common/models.py:1161 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1139 +#: common/models.py:1167 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1140 +#: common/models.py:1168 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1146 +#: common/models.py:1174 msgid "Show Quantity in Forms" msgstr "在表格中显示数量" -#: common/models.py:1147 +#: common/models.py:1175 msgid "Display available part quantity in some forms" msgstr "在某些表格中显示可用的商品数量" -#: common/models.py:1153 +#: common/models.py:1181 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1154 +#: common/models.py:1182 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1160 +#: common/models.py:1188 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1161 +#: common/models.py:1189 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1226 company/forms.py:43 +#: common/models.py:1254 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1233 company/serializers.py:264 +#: common/models.py:1261 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 #: templates/js/translated/part.js:852 templates/js/translated/part.js:1801 msgid "Price" msgstr "价格" -#: common/models.py:1234 +#: common/models.py:1262 msgid "Unit price at specified quantity" msgstr "" #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 -#: order/templates/order/purchase_order_detail.html:24 order/views.py:289 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 #: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 #: part/views.py:858 @@ -2163,7 +2215,7 @@ msgid "Upload File" msgstr "上传文件" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 -#: order/views.py:290 part/templates/part/bom_upload/match_fields.html:52 +#: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 #: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 #: part/views.py:859 @@ -2195,6 +2247,7 @@ msgid "Previous Step" msgstr "" #: company/forms.py:24 part/forms.py:46 +#: templates/InvenTree/settings/mixins/urls.html:12 msgid "URL" msgstr "URL" @@ -2211,6 +2264,7 @@ msgid "Description of the company" msgstr "公司简介" #: company/models.py:112 company/templates/company/company_base.html:97 +#: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" msgstr "网站" @@ -2285,7 +2339,7 @@ msgid "Does this company manufacture parts?" msgstr "该公司制造商品吗?" #: company/models.py:152 company/serializers.py:270 -#: company/templates/company/company_base.html:103 stock/serializers.py:177 +#: company/templates/company/company_base.html:103 stock/serializers.py:179 msgid "Currency" msgstr "货币" @@ -2293,12 +2347,12 @@ msgstr "货币" msgid "Default currency used for this company" msgstr "该公司使用的默认货币" -#: company/models.py:320 company/models.py:535 stock/models.py:474 +#: company/models.py:320 company/models.py:535 stock/models.py:468 #: stock/templates/stock/item_base.html:135 msgid "Base Part" msgstr "" -#: company/models.py:324 company/models.py:539 order/views.py:912 +#: company/models.py:324 company/models.py:539 msgid "Select part" msgstr "选择商品" @@ -2319,7 +2373,7 @@ msgstr "选择制造商" #: company/models.py:342 company/templates/company/manufacturer_part.html:96 #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:530 -#: templates/js/translated/company.js:815 templates/js/translated/order.js:873 +#: templates/js/translated/company.js:815 templates/js/translated/order.js:1038 #: templates/js/translated/part.js:243 templates/js/translated/part.js:832 msgid "MPN" msgstr "MPN" @@ -2349,8 +2403,8 @@ msgstr "参数名称" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1857 templates/js/translated/company.js:644 -#: templates/js/translated/part.js:652 templates/js/translated/stock.js:960 +#: stock/models.py:1845 templates/js/translated/company.js:644 +#: templates/js/translated/part.js:652 templates/js/translated/stock.js:1117 msgid "Value" msgstr "数值" @@ -2360,7 +2414,7 @@ msgstr "参数值" #: company/models.py:429 part/models.py:882 part/models.py:2397 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:264 +#: templates/InvenTree/settings/settings.html:273 #: templates/js/translated/company.js:650 templates/js/translated/part.js:658 msgid "Units" msgstr "单位" @@ -2374,12 +2428,12 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:263 +#: company/templates/company/supplier_part.html:87 order/models.py:224 #: order/templates/order/order_base.html:112 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 #: part/bom.py:247 stock/templates/stock/item_base.html:398 #: templates/js/translated/company.js:337 -#: templates/js/translated/company.js:771 templates/js/translated/order.js:667 +#: templates/js/translated/company.js:771 templates/js/translated/order.js:823 #: templates/js/translated/part.js:213 templates/js/translated/part.js:800 msgid "Supplier" msgstr "供应商" @@ -2389,7 +2443,7 @@ msgid "Select supplier" msgstr "选择供应商" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:860 +#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 #: templates/js/translated/part.js:224 templates/js/translated/part.js:818 msgid "SKU" msgstr "SKU" @@ -2425,8 +2479,8 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "最低收费(例如库存费)" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:497 stock/templates/stock/item_base.html:339 -#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1448 +#: stock/models.py:491 stock/templates/stock/item_base.html:339 +#: templates/js/translated/company.js:847 templates/js/translated/stock.js:1612 msgid "Packaging" msgstr "打包" @@ -2457,7 +2511,7 @@ msgid "Company" msgstr "公司" #: company/templates/company/company_base.html:22 -#: templates/js/translated/order.js:121 +#: templates/js/translated/order.js:279 msgid "Create Purchase Order" msgstr "创建采购订单" @@ -2493,11 +2547,12 @@ msgstr "上传新图片" msgid "Download image from URL" msgstr "从 URL 下载图片" -#: company/templates/company/company_base.html:83 order/models.py:567 -#: order/templates/order/sales_order_base.html:115 stock/models.py:515 -#: stock/models.py:516 stock/templates/stock/item_base.html:291 -#: templates/js/translated/company.js:329 templates/js/translated/order.js:1072 -#: templates/js/translated/stock.js:2084 +#: company/templates/company/company_base.html:83 order/models.py:547 +#: order/templates/order/sales_order_base.html:115 stock/models.py:509 +#: stock/models.py:510 stock/serializers.py:610 +#: stock/templates/stock/item_base.html:291 +#: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 +#: templates/js/translated/stock.js:2259 msgid "Customer" msgstr "客户" @@ -2580,7 +2635,7 @@ msgstr "供货商库存" #: order/templates/order/purchase_orders.html:12 #: part/templates/part/detail.html:64 part/templates/part/part_sidebar.html:33 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:203 -#: templates/InvenTree/settings/sidebar.html:44 templates/navbar.html:45 +#: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 msgid "Purchase Orders" msgstr "采购订单" @@ -2602,7 +2657,7 @@ msgstr "新建采购订单" #: order/templates/order/sales_orders.html:15 #: part/templates/part/detail.html:87 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:223 -#: templates/InvenTree/settings/sidebar.html:46 templates/navbar.html:56 +#: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 msgid "Sales Orders" msgstr "销售订单" @@ -2618,7 +2673,7 @@ msgid "New Sales Order" msgstr "新建销售订单" #: company/templates/company/detail.html:168 -#: templates/js/translated/build.js:999 +#: templates/js/translated/build.js:1004 msgid "Assigned Stock" msgstr "" @@ -2644,7 +2699,7 @@ msgstr "供应商列表" #: company/templates/company/manufacturer_part.html:14 company/views.py:55 #: part/templates/part/prices.html:167 templates/InvenTree/search.html:184 -#: templates/navbar.html:44 +#: templates/navbar.html:46 msgid "Manufacturers" msgstr "制造商" @@ -2673,7 +2728,7 @@ msgstr "内部商品" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 #: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 -#: templates/InvenTree/search.html:194 templates/navbar.html:43 +#: templates/InvenTree/search.html:194 templates/navbar.html:45 msgid "Suppliers" msgstr "供应商" @@ -2687,7 +2742,7 @@ msgstr "删除供应商商品" #: company/templates/company/manufacturer_part.html:254 #: part/templates/part/detail.html:344 part/templates/part/detail.html:372 #: templates/js/translated/company.js:425 templates/js/translated/helpers.js:31 -#: users/models.py:204 +#: users/models.py:206 msgid "Delete" msgstr "删除" @@ -2739,9 +2794,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:482 +#: company/templates/company/supplier_part.html:24 stock/models.py:476 #: stock/templates/stock/item_base.html:403 -#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1405 +#: templates/js/translated/company.js:787 templates/js/translated/stock.js:1569 msgid "Supplier Part" msgstr "供应商商品" @@ -2767,7 +2822,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:21 stock/templates/stock/location.html:163 -#: templates/js/translated/stock.js:355 +#: templates/js/translated/stock.js:359 msgid "New Stock Item" msgstr "" @@ -2817,11 +2872,11 @@ msgstr "" #: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:14 #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:156 -#: templates/InvenTree/settings/sidebar.html:40 +#: templates/InvenTree/settings/sidebar.html:41 #: templates/js/translated/bom.js:216 templates/js/translated/part.js:434 #: templates/js/translated/part.js:569 templates/js/translated/part.js:1059 -#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:591 -#: templates/js/translated/stock.js:1244 templates/navbar.html:26 +#: templates/js/translated/part.js:1220 templates/js/translated/stock.js:748 +#: templates/js/translated/stock.js:1401 templates/navbar.html:28 msgid "Stock" msgstr "库存" @@ -2844,7 +2899,7 @@ msgstr "定价" #: stock/templates/stock/location.html:147 #: stock/templates/stock/location.html:159 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:1983 +#: templates/InvenTree/search.html:158 templates/js/translated/stock.js:2158 #: templates/stats.html:93 templates/stats.html:102 users/models.py:43 msgid "Stock Items" msgstr "库存项" @@ -2858,7 +2913,7 @@ msgid "New Manufacturer" msgstr "新建制造商" #: company/views.py:61 templates/InvenTree/search.html:214 -#: templates/navbar.html:55 +#: templates/navbar.html:57 msgid "Customers" msgstr "客户信息" @@ -2960,284 +3015,374 @@ msgstr "查询筛选器 (逗号分隔的键值对列表" msgid "Part query filters (comma-separated value of key=value pairs)" msgstr "商品查询筛选器 (逗号分隔的键值对列表)" -#: order/forms.py:26 order/templates/order/order_base.html:52 +#: order/forms.py:24 order/templates/order/order_base.html:52 msgid "Place order" msgstr "" -#: order/forms.py:37 order/templates/order/order_base.html:60 +#: order/forms.py:35 order/templates/order/order_base.html:60 msgid "Mark order as complete" msgstr "" -#: order/forms.py:48 order/forms.py:59 order/templates/order/order_base.html:47 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:47 #: order/templates/order/sales_order_base.html:60 msgid "Cancel order" msgstr "取消订单" -#: order/forms.py:70 -msgid "Ship order" -msgstr "" - -#: order/forms.py:98 -msgid "Enter stock item serial numbers" -msgstr "" - -#: order/forms.py:104 -msgid "Enter quantity of stock items" -msgstr "" - -#: order/models.py:161 +#: order/models.py:122 msgid "Order description" msgstr "" -#: order/models.py:163 +#: order/models.py:124 msgid "Link to external page" msgstr "" -#: order/models.py:171 +#: order/models.py:132 msgid "Created By" msgstr "" -#: order/models.py:178 +#: order/models.py:139 msgid "User or group responsible for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:183 +#: order/models.py:144 msgid "Order notes" msgstr "" -#: order/models.py:250 order/models.py:557 +#: order/models.py:211 order/models.py:537 msgid "Order reference" msgstr "" -#: order/models.py:255 order/models.py:572 +#: order/models.py:216 order/models.py:552 msgid "Purchase order status" msgstr "" -#: order/models.py:264 +#: order/models.py:225 msgid "Company from which the items are being ordered" msgstr "订购该商品的公司" -#: order/models.py:267 order/templates/order/order_base.html:118 -#: templates/js/translated/order.js:676 +#: order/models.py:228 order/templates/order/order_base.html:118 +#: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:267 +#: order/models.py:228 msgid "Supplier order reference code" msgstr "" -#: order/models.py:274 +#: order/models.py:235 msgid "received by" msgstr "" -#: order/models.py:279 +#: order/models.py:240 msgid "Issue Date" msgstr "" -#: order/models.py:280 +#: order/models.py:241 msgid "Date order was issued" msgstr "" -#: order/models.py:285 +#: order/models.py:246 msgid "Target Delivery Date" msgstr "" -#: order/models.py:286 +#: order/models.py:247 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:292 +#: order/models.py:253 msgid "Date order was completed" msgstr "" -#: order/models.py:321 +#: order/models.py:282 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:431 +#: order/models.py:411 msgid "Quantity must be an integer" msgstr "数量必须是整数" -#: order/models.py:435 +#: order/models.py:415 msgid "Quantity must be a positive number" msgstr "数量必须大于0" -#: order/models.py:568 +#: order/models.py:548 msgid "Company to which the items are being sold" msgstr "向其出售该商品的公司" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer Reference " msgstr "" -#: order/models.py:574 +#: order/models.py:554 msgid "Customer order reference code" msgstr "" -#: order/models.py:579 +#: order/models.py:559 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:582 templates/js/translated/order.js:1113 +#: order/models.py:562 order/models.py:1026 +#: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:589 +#: order/models.py:569 msgid "shipped by" msgstr "" -#: order/models.py:633 -msgid "SalesOrder cannot be shipped as it is not currently pending" +#: order/models.py:634 +msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:730 +#: order/models.py:639 +msgid "Only a pending order can be marked as complete" +msgstr "" + +#: order/models.py:643 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:647 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:795 msgid "Item quantity" msgstr "" -#: order/models.py:736 +#: order/models.py:801 msgid "Line item reference" msgstr "" -#: order/models.py:738 +#: order/models.py:803 msgid "Line item notes" msgstr "" -#: order/models.py:768 order/models.py:856 -#: templates/js/translated/order.js:1165 +#: order/models.py:833 order/models.py:924 order/models.py:1020 +#: templates/js/translated/order.js:1820 msgid "Order" msgstr "" -#: order/models.py:769 order/templates/order/order_base.html:9 +#: order/models.py:834 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:353 -#: templates/js/translated/order.js:638 templates/js/translated/part.js:775 -#: templates/js/translated/stock.js:1382 templates/js/translated/stock.js:2065 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:775 +#: templates/js/translated/stock.js:1546 templates/js/translated/stock.js:2240 msgid "Purchase Order" msgstr "" -#: order/models.py:790 +#: order/models.py:855 msgid "Supplier part" msgstr "供应商商品" -#: order/models.py:797 order/templates/order/order_base.html:151 -#: order/templates/order/sales_order_base.html:155 -#: templates/js/translated/order.js:429 templates/js/translated/order.js:953 +#: order/models.py:862 order/templates/order/order_base.html:163 +#: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 #: templates/js/translated/part.js:847 templates/js/translated/part.js:873 +#: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:798 +#: order/models.py:863 msgid "Number of items received" msgstr "" -#: order/models.py:805 part/templates/part/prices.html:176 stock/models.py:609 -#: stock/serializers.py:168 stock/templates/stock/item_base.html:360 -#: templates/js/translated/stock.js:1436 +#: order/models.py:870 part/templates/part/prices.html:176 stock/models.py:603 +#: stock/serializers.py:170 stock/templates/stock/item_base.html:360 +#: templates/js/translated/stock.js:1600 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:806 +#: order/models.py:871 msgid "Unit purchase price" msgstr "" -#: order/models.py:814 +#: order/models.py:879 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:866 part/templates/part/part_pricing.html:112 +#: order/models.py:934 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "销售价格" -#: order/models.py:867 +#: order/models.py:935 msgid "Unit sale price" msgstr "" -#: order/models.py:946 order/models.py:948 +#: order/models.py:940 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1027 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1034 +msgid "Checked By" +msgstr "" + +#: order/models.py:1035 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1043 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1050 +msgid "Shipment notes" +msgstr "" + +#: order/models.py:1057 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1058 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1068 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1071 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1147 order/models.py:1149 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:952 +#: order/models.py:1153 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:954 +#: order/models.py:1155 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:957 +#: order/models.py:1158 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:961 +#: order/models.py:1162 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:967 +#: order/models.py:1168 order/serializers.py:734 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:975 +#: order/models.py:1171 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1172 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1180 msgid "Line" msgstr "" -#: order/models.py:987 +#: order/models.py:1188 order/serializers.py:825 order/serializers.py:953 +#: templates/js/translated/model_renderers.js:251 +msgid "Shipment" +msgstr "" + +#: order/models.py:1189 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1201 msgid "Item" msgstr "" -#: order/models.py:988 +#: order/models.py:1202 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:991 +#: order/models.py:1205 msgid "Enter stock allocation quantity" msgstr "" -#: order/serializers.py:175 +#: order/serializers.py:173 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:213 +#: order/serializers.py:211 order/serializers.py:790 msgid "Line Item" msgstr "" -#: order/serializers.py:219 +#: order/serializers.py:217 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:229 order/serializers.py:297 +#: order/serializers.py:227 order/serializers.py:295 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:253 +#: order/serializers.py:251 msgid "Barcode Hash" msgstr "" -#: order/serializers.py:254 +#: order/serializers.py:252 msgid "Unique identifier field" msgstr "" -#: order/serializers.py:271 +#: order/serializers.py:269 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:309 +#: order/serializers.py:307 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:326 +#: order/serializers.py:324 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:337 +#: order/serializers.py:335 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:578 +#: order/serializers.py:581 msgid "Sale price currency" msgstr "" +#: order/serializers.py:649 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:699 order/serializers.py:802 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:721 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:815 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:839 order/serializers.py:964 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:842 order/serializers.py:967 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:894 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:904 +msgid "The following serial numbers are already allocated" +msgstr "" + #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" @@ -3271,7 +3416,8 @@ msgstr "" msgid "Receive Items" msgstr "" -#: order/templates/order/order_base.html:62 order/views.py:185 +#: order/templates/order/order_base.html:62 +#: order/templates/order/sales_order_base.html:67 order/views.py:181 msgid "Complete Order" msgstr "" @@ -3290,12 +3436,23 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:137 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:128 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:130 +#: order/templates/order/sales_order_base.html:134 +#: order/templates/order/sales_order_base.html:144 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:149 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:207 +#: order/templates/order/order_base.html:219 msgid "Edit Purchase Order" msgstr "" @@ -3371,8 +3528,9 @@ msgstr "" #: part/templates/part/import_wizard/ajax_match_references.html:42 #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 -#: templates/js/translated/build.js:240 templates/js/translated/build.js:1251 -#: templates/js/translated/order.js:377 +#: templates/js/translated/build.js:245 templates/js/translated/build.js:1256 +#: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 +#: templates/js/translated/stock.js:592 msgid "Remove row" msgstr "移除行" @@ -3453,7 +3611,8 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/translated/order.js:694 templates/js/translated/order.js:1118 +#: templates/js/translated/order.js:859 templates/js/translated/order.js:1286 +#: templates/js/translated/order.js:1416 msgid "Items" msgstr "" @@ -3489,7 +3648,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:27 #: order/templates/order/purchase_order_detail.html:181 #: order/templates/order/sales_order_detail.html:23 -#: order/templates/order/sales_order_detail.html:157 +#: order/templates/order/sales_order_detail.html:244 msgid "Add Line Item" msgstr "" @@ -3502,7 +3661,7 @@ msgid "Received Items" msgstr "" #: order/templates/order/purchase_order_detail.html:76 -#: order/templates/order/sales_order_detail.html:68 +#: order/templates/order/sales_order_detail.html:123 msgid "Order Notes" msgstr "" @@ -3520,8 +3679,8 @@ msgid "Print packing list" msgstr "" #: order/templates/order/sales_order_base.html:66 -#: order/templates/order/sales_order_base.html:67 order/views.py:222 -msgid "Ship Order" +#: order/templates/order/sales_order_base.html:229 +msgid "Complete Sales Order" msgstr "" #: order/templates/order/sales_order_base.html:102 @@ -3529,16 +3688,21 @@ msgid "This Sales Order has not been fully allocated" msgstr "" #: order/templates/order/sales_order_base.html:122 -#: templates/js/translated/order.js:1085 +#: templates/js/translated/order.js:1253 msgid "Customer Reference" msgstr "" -#: order/templates/order/sales_order_base.html:195 +#: order/templates/order/sales_order_base.html:140 +#: order/templates/order/sales_order_detail.html:78 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:215 msgid "Edit Sales Order" msgstr "" #: order/templates/order/sales_order_cancel.html:8 -#: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" @@ -3552,146 +3716,100 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_ship.html:10 -msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted." +#: order/templates/order/sales_order_detail.html:44 +#: order/templates/order/so_sidebar.html:8 +msgid "Pending Shipments" msgstr "" -#: order/templates/order/sales_order_ship.html:12 -msgid "Ensure that the order allocation is correct before shipping the order." +#: order/templates/order/sales_order_detail.html:48 +#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1188 +msgid "Actions" msgstr "" -#: order/templates/order/sales_order_ship.html:18 -msgid "Some line items in this order have been over-allocated" +#: order/templates/order/sales_order_detail.html:57 +msgid "New Shipment" msgstr "" -#: order/templates/order/sales_order_ship.html:20 -msgid "Ensure that this is correct before shipping the order." -msgstr "" - -#: order/templates/order/sales_order_ship.html:27 -msgid "Shipping this order means that the order will no longer be editable." -msgstr "" - -#: order/templates/order/so_allocate_by_serial.html:9 -msgid "Allocate stock items by serial number" -msgstr "" - -#: order/views.py:103 +#: order/views.py:99 msgid "Cancel Order" msgstr "取消订单" -#: order/views.py:112 order/views.py:138 +#: order/views.py:108 order/views.py:134 msgid "Confirm order cancellation" msgstr "确认取消订单" -#: order/views.py:115 order/views.py:141 +#: order/views.py:111 order/views.py:137 msgid "Order cannot be cancelled" msgstr "无法取消订单" -#: order/views.py:129 +#: order/views.py:125 msgid "Cancel sales order" msgstr "取消销售订单" -#: order/views.py:155 +#: order/views.py:151 msgid "Issue Order" msgstr "" -#: order/views.py:164 +#: order/views.py:160 msgid "Confirm order placement" msgstr "" -#: order/views.py:174 +#: order/views.py:170 msgid "Purchase order issued" msgstr "" -#: order/views.py:201 +#: order/views.py:197 msgid "Confirm order completion" msgstr "" -#: order/views.py:212 +#: order/views.py:208 msgid "Purchase order completed" msgstr "" -#: order/views.py:238 -msgid "Confirm order shipment" -msgstr "" - -#: order/views.py:244 -msgid "Could not ship order" -msgstr "" - -#: order/views.py:291 +#: order/views.py:245 msgid "Match Supplier Parts" msgstr "" -#: order/views.py:535 +#: order/views.py:489 msgid "Update prices" msgstr "" -#: order/views.py:793 +#: order/views.py:747 #, python-brace-format msgid "Ordered {n} parts" msgstr "" -#: order/views.py:846 -msgid "Allocate Serial Numbers" -msgstr "" - -#: order/views.py:891 -#, python-brace-format -msgid "Allocated {n} items" -msgstr "" - -#: order/views.py:907 -msgid "Select line item" -msgstr "" - -#: order/views.py:938 -#, python-brace-format -msgid "No matching item for serial {serial}" -msgstr "" - -#: order/views.py:948 -#, python-brace-format -msgid "{serial} is not in stock" -msgstr "" - -#: order/views.py:956 -#, python-brace-format -msgid "{serial} already allocated to an order" -msgstr "" - -#: order/views.py:1072 +#: order/views.py:858 msgid "Sales order not found" msgstr "" -#: order/views.py:1078 +#: order/views.py:864 msgid "Price not found" msgstr "" -#: order/views.py:1081 +#: order/views.py:867 #, python-brace-format msgid "Updated {part} unit-price to {price}" msgstr "" -#: order/views.py:1086 +#: order/views.py:872 #, python-brace-format msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/api.py:758 +#: part/api.py:760 msgid "Must be greater than zero" msgstr "必须大于0" -#: part/api.py:762 +#: part/api.py:764 msgid "Must be a valid quantity" msgstr "必须是有效的数量" -#: part/api.py:777 +#: part/api.py:779 msgid "Specify location for initial part stock" msgstr "指定初始初始商品仓储地点" -#: part/api.py:808 part/api.py:812 part/api.py:827 part/api.py:831 +#: part/api.py:810 part/api.py:814 part/api.py:829 part/api.py:833 msgid "This field is required" msgstr "此字段为必填" @@ -3828,8 +3946,8 @@ msgstr "商品类别" #: part/templates/part/category.html:149 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:88 -#: templates/InvenTree/settings/sidebar.html:36 -#: templates/js/translated/part.js:1597 templates/navbar.html:19 +#: templates/InvenTree/settings/sidebar.html:37 +#: templates/js/translated/part.js:1597 templates/navbar.html:21 #: templates/stats.html:80 templates/stats.html:89 users/models.py:41 msgid "Parts" msgstr "商品" @@ -3895,7 +4013,7 @@ msgstr "提高搜索结果可见性的关键字" #: part/models.py:778 part/models.py:2223 part/models.py:2472 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:163 +#: templates/InvenTree/settings/settings.html:172 #: templates/js/translated/part.js:1202 msgid "Category" msgstr "类别" @@ -3906,7 +4024,7 @@ msgstr "商品类别" #: part/models.py:784 part/templates/part/part_base.html:274 #: templates/js/translated/part.js:557 templates/js/translated/part.js:1155 -#: templates/js/translated/stock.js:1216 +#: templates/js/translated/stock.js:1373 msgid "IPN" msgstr "" @@ -3975,10 +4093,11 @@ msgstr "" msgid "Can this part be sold to customers?" msgstr "此商品可以销售给客户吗?" -#: part/models.py:915 templates/js/translated/table_filters.js:34 +#: part/models.py:915 plugin/models.py:45 +#: templates/js/translated/table_filters.js:34 #: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:290 -#: templates/js/translated/table_filters.js:368 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:399 msgid "Active" msgstr "" @@ -4027,7 +4146,7 @@ msgid "Test with this name already exists for this part" msgstr "" #: part/models.py:2310 templates/js/translated/part.js:1648 -#: templates/js/translated/stock.js:940 +#: templates/js/translated/stock.js:1097 msgid "Test Name" msgstr "" @@ -4044,7 +4163,7 @@ msgid "Enter description for this test" msgstr "" #: part/models.py:2322 templates/js/translated/part.js:1657 -#: templates/js/translated/table_filters.js:276 +#: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" @@ -4086,7 +4205,7 @@ msgid "Parameter Units" msgstr "" #: part/models.py:2429 part/models.py:2478 part/models.py:2479 -#: templates/InvenTree/settings/settings.html:158 +#: templates/InvenTree/settings/settings.html:167 msgid "Parameter Template" msgstr "参数模板" @@ -4098,7 +4217,7 @@ msgstr "" msgid "Parameter Value" msgstr "" -#: part/models.py:2483 templates/InvenTree/settings/settings.html:167 +#: part/models.py:2483 templates/InvenTree/settings/settings.html:176 msgid "Default Value" msgstr "默认值" @@ -4175,7 +4294,7 @@ msgstr "" msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2686 stock/models.py:361 +#: part/models.py:2686 stock/models.py:355 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -4724,8 +4843,8 @@ msgstr "" msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:190 templates/js/translated/order.js:1545 -#: templates/js/translated/table_filters.js:188 +#: part/templates/part/part_base.html:190 templates/js/translated/order.js:2217 +#: templates/js/translated/table_filters.js:193 msgid "In Stock" msgstr "" @@ -5099,6 +5218,78 @@ msgstr "" msgid "Delete Internal Price Break" msgstr "" +#: plugin/integration.py:116 +msgid "No author found" +msgstr "" + +#: plugin/integration.py:128 +msgid "No date found" +msgstr "" + +#: plugin/models.py:25 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:26 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:31 +msgid "Key" +msgstr "" + +#: plugin/models.py:32 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:40 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:46 +msgid "Is the plugin active" +msgstr "" + +#: plugin/samples/integration/sample.py:39 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:40 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/serializers.py:46 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:47 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:52 +msgid "Package Name" +msgstr "" + +#: plugin/serializers.py:53 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:56 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:57 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:72 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:74 +msgid "Either packagenmae of url must be provided" +msgstr "" + #: report/api.py:234 report/api.py:278 #, python-brace-format msgid "Template file '{filename}' is missing or does not exist" @@ -5197,12 +5388,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:520 stock/templates/stock/item_base.html:149 -#: templates/js/translated/build.js:233 templates/js/translated/build.js:637 -#: templates/js/translated/build.js:1013 +#: stock/models.py:514 stock/templates/stock/item_base.html:149 +#: templates/js/translated/build.js:238 templates/js/translated/build.js:642 +#: templates/js/translated/build.js:1018 #: templates/js/translated/model_renderers.js:95 -#: templates/js/translated/order.js:1287 templates/js/translated/order.js:1376 -#: templates/js/translated/stock.js:410 +#: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:414 msgid "Serial Number" msgstr "序列号" @@ -5211,17 +5402,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1845 +#: stock/models.py:1833 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1851 +#: stock/models.py:1839 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/js/translated/order.js:684 templates/js/translated/stock.js:1999 +#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin_settings.html:38 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2174 msgid "Date" msgstr "" @@ -5239,302 +5432,318 @@ msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:2259 +#: templates/js/translated/stock.js:577 templates/js/translated/stock.js:2434 msgid "Serial" msgstr "" -#: stock/api.py:422 +#: stock/api.py:446 msgid "Quantity is required" msgstr "" -#: stock/forms.py:91 stock/forms.py:265 stock/models.py:577 +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:571 #: stock/templates/stock/item_base.html:186 -#: templates/js/translated/stock.js:1358 +#: templates/js/translated/stock.js:1522 msgid "Expiry Date" msgstr "" -#: stock/forms.py:92 stock/forms.py:266 +#: stock/forms.py:78 stock/forms.py:252 msgid "Expiration date for this stock item" msgstr "" -#: stock/forms.py:95 +#: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:150 +#: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Serial numbers" msgstr "" -#: stock/forms.py:152 +#: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:154 stock/forms.py:238 +#: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:194 +#: stock/forms.py:180 msgid "Stock item to install" msgstr "" -#: stock/forms.py:224 +#: stock/forms.py:210 msgid "Must not exceed available quantity" msgstr "" -#: stock/forms.py:236 +#: stock/forms.py:222 msgid "Destination location for uninstalled items" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:240 +#: stock/forms.py:226 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:614 +#: stock/models.py:60 stock/models.py:608 #: stock/templates/stock/item_base.html:417 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:615 +#: stock/models.py:61 stock/models.py:609 msgid "Select Owner" msgstr "" -#: stock/models.py:342 +#: stock/models.py:336 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:378 +#: stock/models.py:372 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "商品类型 ('{pf}') 必须是 {pe}" -#: stock/models.py:388 stock/models.py:397 +#: stock/models.py:382 stock/models.py:391 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:389 +#: stock/models.py:383 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:411 +#: stock/models.py:405 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:417 +#: stock/models.py:411 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:424 +#: stock/models.py:418 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:466 +#: stock/models.py:460 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:475 +#: stock/models.py:469 msgid "Base part" msgstr "" -#: stock/models.py:483 +#: stock/models.py:477 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:488 stock/templates/stock/location.html:12 +#: stock/models.py:482 stock/templates/stock/location.html:12 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "仓储地点" -#: stock/models.py:491 +#: stock/models.py:485 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:498 +#: stock/models.py:492 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:503 stock/templates/stock/item_base.html:299 +#: stock/models.py:497 stock/templates/stock/item_base.html:299 msgid "Installed In" msgstr "" -#: stock/models.py:506 +#: stock/models.py:500 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:522 +#: stock/models.py:516 msgid "Serial number for this item" msgstr "" -#: stock/models.py:536 +#: stock/models.py:530 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:540 +#: stock/models.py:534 msgid "Stock Quantity" msgstr "" -#: stock/models.py:549 +#: stock/models.py:543 msgid "Source Build" msgstr "" -#: stock/models.py:551 +#: stock/models.py:545 msgid "Build for this stock item" msgstr "" -#: stock/models.py:562 +#: stock/models.py:556 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:565 +#: stock/models.py:559 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:571 +#: stock/models.py:565 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:578 +#: stock/models.py:572 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete on deplete" msgstr "" -#: stock/models.py:591 +#: stock/models.py:585 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:601 stock/templates/stock/item.html:111 +#: stock/models.py:595 stock/templates/stock/item.html:111 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:610 +#: stock/models.py:604 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:620 -msgid "Scheduled for deletion" -msgstr "" - -#: stock/models.py:621 -msgid "This StockItem will be deleted by the background worker" -msgstr "" - -#: stock/models.py:1084 +#: stock/models.py:1072 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1090 +#: stock/models.py:1078 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1096 +#: stock/models.py:1084 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1099 +#: stock/models.py:1087 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1102 +#: stock/models.py:1090 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1097 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1267 +#: stock/models.py:1255 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1765 +#: stock/models.py:1753 msgid "Entry notes" msgstr "" -#: stock/models.py:1822 +#: stock/models.py:1810 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1828 +#: stock/models.py:1816 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1846 +#: stock/models.py:1834 msgid "Test name" msgstr "" -#: stock/models.py:1852 templates/js/translated/table_filters.js:266 +#: stock/models.py:1840 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1858 +#: stock/models.py:1846 msgid "Test output value" msgstr "" -#: stock/models.py:1865 +#: stock/models.py:1853 msgid "Test result attachment" msgstr "" -#: stock/models.py:1871 +#: stock/models.py:1859 msgid "Test notes" msgstr "" -#: stock/serializers.py:171 +#: stock/serializers.py:173 msgid "Purchase price of this stock item" msgstr "" -#: stock/serializers.py:178 +#: stock/serializers.py:180 msgid "Purchase currency of this stock item" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:307 +#: stock/serializers.py:309 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:313 +#: stock/serializers.py:315 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:324 stock/serializers.py:691 +#: stock/serializers.py:326 stock/serializers.py:814 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:331 +#: stock/serializers.py:333 msgid "Optional note field" msgstr "" -#: stock/serializers.py:344 +#: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:561 +#: stock/serializers.py:573 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:577 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:581 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:611 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:617 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:625 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:635 stock/serializers.py:722 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:684 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:589 +#: stock/serializers.py:712 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:599 -msgid "A list of stock items must be provided" -msgstr "" - #: stock/templates/stock/item.html:18 msgid "Stock Tracking Information" msgstr "" @@ -5572,7 +5781,7 @@ msgstr "" msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:515 +#: stock/templates/stock/item.html:137 stock/views.py:482 msgid "Install Stock Item" msgstr "" @@ -5632,7 +5841,7 @@ msgstr "" msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:85 +#: stock/templates/stock/item_base.html:85 templates/stock_table.html:53 msgid "Assign to customer" msgstr "" @@ -5694,7 +5903,7 @@ msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:190 -#: templates/js/translated/table_filters.js:247 +#: templates/js/translated/table_filters.js:252 msgid "Expired" msgstr "" @@ -5704,12 +5913,12 @@ msgid "This StockItem expires on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:192 -#: templates/js/translated/table_filters.js:253 +#: templates/js/translated/table_filters.js:258 msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:199 -#: templates/js/translated/stock.js:1371 +#: templates/js/translated/stock.js:1535 msgid "Last Updated" msgstr "" @@ -5738,13 +5947,11 @@ msgid "This stock item has not passed all required tests" msgstr "" #: stock/templates/stock/item_base.html:255 -#, python-format -msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Sales Order" msgstr "" #: stock/templates/stock/item_base.html:263 -#, python-format -msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgid "This stock item is allocated to Build Order" msgstr "" #: stock/templates/stock/item_base.html:269 @@ -5760,7 +5967,7 @@ msgid "This stock item will be automatically deleted when all stock is depleted. msgstr "" #: stock/templates/stock/item_base.html:318 -#: templates/js/translated/build.js:1035 +#: templates/js/translated/build.js:1040 msgid "No location set" msgstr "未设置仓储地点" @@ -5910,7 +6117,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:912 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:879 msgid "Convert Stock Item" msgstr "" @@ -5935,8 +6142,7 @@ msgstr "" msgid "Edit Stock Location" msgstr "编辑仓储地点" -#: stock/views.py:269 stock/views.py:891 stock/views.py:1017 -#: stock/views.py:1299 +#: stock/views.py:269 stock/views.py:858 stock/views.py:984 stock/views.py:1266 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5945,86 +6151,78 @@ msgid "Stock Location QR code" msgstr "仓储地点二维码" #: stock/views.py:303 -msgid "Assign to Customer" -msgstr "" - -#: stock/views.py:312 -msgid "Customer must be specified" -msgstr "" - -#: stock/views.py:336 msgid "Return to Stock" msgstr "" -#: stock/views.py:345 +#: stock/views.py:312 msgid "Specify a valid location" msgstr "指定一个有效仓储地点" -#: stock/views.py:356 +#: stock/views.py:323 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:367 +#: stock/views.py:334 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:384 +#: stock/views.py:351 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:489 +#: stock/views.py:456 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:663 +#: stock/views.py:630 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:730 +#: stock/views.py:727 templates/js/translated/stock.js:887 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:771 +#: stock/views.py:738 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:793 templates/js/translated/stock.js:319 +#: stock/views.py:760 templates/js/translated/stock.js:323 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:943 +#: stock/views.py:910 msgid "Create new Stock Location" msgstr "新建仓储地点" -#: stock/views.py:1044 +#: stock/views.py:1011 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1186 templates/js/translated/stock.js:299 +#: stock/views.py:1153 templates/js/translated/stock.js:303 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1268 +#: stock/views.py:1235 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1368 +#: stock/views.py:1335 msgid "Delete Stock Location" msgstr "删除仓储地点" -#: stock/views.py:1381 +#: stock/views.py:1348 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1392 +#: stock/views.py:1359 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1399 +#: stock/views.py:1366 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1375 msgid "Add Stock Tracking Entry" msgstr "" @@ -6044,6 +6242,14 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/503.html:10 templates/503.html:35 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:41 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + #: templates/InvenTree/index.html:7 msgid "Index" msgstr "" @@ -6153,7 +6359,7 @@ msgid "Server Settings" msgstr "" #: templates/InvenTree/settings/login.html:9 -#: templates/InvenTree/settings/sidebar.html:28 +#: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" msgstr "" @@ -6161,6 +6367,24 @@ msgstr "" msgid "Signup" msgstr "" +#: templates/InvenTree/settings/mixins/settings.html:4 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +msgid "Settings" +msgstr "设置" + +#: templates/InvenTree/settings/mixins/urls.html:4 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:6 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:21 +msgid "open in new tab" +msgstr "" + #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" msgstr "商品设置" @@ -6177,6 +6401,126 @@ msgstr "导入商品" msgid "Part Parameter Templates" msgstr "商品参数模板" +#: templates/InvenTree/settings/plugin.html:10 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:16 +msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:32 +msgid "Plugin list" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:37 +#: templates/js/translated/plugin.js:15 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: users/models.py:39 +msgid "Admin" +msgstr "管理员" + +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin_settings.html:28 +msgid "Author" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin_settings.html:43 +msgid "Version" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +#, python-format +msgid "has %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:91 +msgid "Inactive plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:114 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:123 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:125 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:10 +#, python-format +msgid "Plugin details for %(name)s" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:17 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:48 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:62 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:74 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:80 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:83 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was found in a local InvenTree path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:91 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:97 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +#: templates/about.html:47 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:105 +#: templates/about.html:40 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:109 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:114 +msgid "Sign Status" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:119 +msgid "Sign Key" +msgstr "" + #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" msgstr "采购订单设置" @@ -6194,86 +6538,82 @@ msgstr "未设置值" msgid "Edit setting" msgstr "编辑设置" -#: templates/InvenTree/settings/settings.html:11 templates/navbar.html:93 -msgid "Settings" -msgstr "设置" - -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:65 +#: templates/InvenTree/settings/settings.html:74 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:148 +#: templates/InvenTree/settings/settings.html:157 msgid "No category parameter templates found" msgstr "未找到类别参数模板" -#: templates/InvenTree/settings/settings.html:170 -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:179 +#: templates/InvenTree/settings/settings.html:278 msgid "Edit Template" msgstr "编辑模板" -#: templates/InvenTree/settings/settings.html:171 -#: templates/InvenTree/settings/settings.html:270 +#: templates/InvenTree/settings/settings.html:180 +#: templates/InvenTree/settings/settings.html:279 msgid "Delete Template" msgstr "删除模板" -#: templates/InvenTree/settings/settings.html:249 +#: templates/InvenTree/settings/settings.html:258 msgid "No part parameter templates found" msgstr "未找到商品参数模板" -#: templates/InvenTree/settings/settings.html:253 +#: templates/InvenTree/settings/settings.html:262 msgid "ID" msgstr "" -#: templates/InvenTree/settings/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:6 #: templates/InvenTree/settings/user_settings.html:9 msgid "User Settings" msgstr "用户设置" -#: templates/InvenTree/settings/sidebar.html:8 +#: templates/InvenTree/settings/sidebar.html:9 #: templates/InvenTree/settings/user.html:12 msgid "Account Settings" msgstr "帐户设置" -#: templates/InvenTree/settings/sidebar.html:10 +#: templates/InvenTree/settings/sidebar.html:11 #: templates/InvenTree/settings/user_display.html:9 msgid "Display Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:12 +#: templates/InvenTree/settings/sidebar.html:13 msgid "Home Page" msgstr "" -#: templates/InvenTree/settings/sidebar.html:14 +#: templates/InvenTree/settings/sidebar.html:15 #: templates/InvenTree/settings/user_search.html:9 msgid "Search Settings" msgstr "搜索设置" -#: templates/InvenTree/settings/sidebar.html:16 +#: templates/InvenTree/settings/sidebar.html:17 msgid "Label Printing" msgstr "" -#: templates/InvenTree/settings/sidebar.html:18 -#: templates/InvenTree/settings/sidebar.html:34 +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:35 msgid "Reporting" msgstr "" -#: templates/InvenTree/settings/sidebar.html:23 +#: templates/InvenTree/settings/sidebar.html:24 msgid "Global Settings" msgstr "" -#: templates/InvenTree/settings/sidebar.html:26 +#: templates/InvenTree/settings/sidebar.html:27 msgid "Server Configuration" msgstr "" -#: templates/InvenTree/settings/sidebar.html:32 +#: templates/InvenTree/settings/sidebar.html:33 msgid "Currencies" msgstr "" -#: templates/InvenTree/settings/sidebar.html:38 +#: templates/InvenTree/settings/sidebar.html:39 msgid "Categories" msgstr "" @@ -6491,8 +6831,8 @@ msgstr "" #: templates/about.html:11 templates/about.html:105 #: templates/js/translated/bom.js:283 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:567 templates/js/translated/modals.js:661 -#: templates/js/translated/modals.js:964 templates/modals.html:15 +#: templates/js/translated/modals.js:568 templates/js/translated/modals.js:662 +#: templates/js/translated/modals.js:965 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6513,14 +6853,6 @@ msgstr "" msgid "Update Available" msgstr "" -#: templates/about.html:40 -msgid "Commit Hash" -msgstr "" - -#: templates/about.html:47 -msgid "Commit Date" -msgstr "" - #: templates/about.html:53 msgid "InvenTree Documentation" msgstr "" @@ -6718,8 +7050,9 @@ msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1129 -#: templates/js/translated/build.js:1749 +#: templates/js/translated/bom.js:467 templates/js/translated/build.js:1134 +#: templates/js/translated/build.js:1755 +#: templates/js/translated/table_filters.js:178 msgid "Available" msgstr "空闲" @@ -6765,11 +7098,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1034 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1035 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1035 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1036 msgid "No response from the InvenTree server" msgstr "" @@ -6781,35 +7114,35 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1044 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1045 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1045 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1046 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1049 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1050 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1051 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1054 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1055 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1056 msgid "The requested resource could not be located on the server" msgstr "" -#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1059 +#: templates/js/translated/api.js:212 templates/js/translated/modals.js:1060 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:213 templates/js/translated/modals.js:1061 msgid "Connection timeout while requesting data from server" msgstr "" @@ -6878,7 +7211,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "Invalid server response" msgstr "" @@ -6886,7 +7219,7 @@ msgstr "" msgid "Scan barcode data below" msgstr "" -#: templates/js/translated/barcode.js:280 templates/navbar.html:69 +#: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" msgstr "扫描条形码" @@ -6906,7 +7239,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:682 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:839 msgid "Remove stock item" msgstr "" @@ -6976,7 +7309,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1111 +#: templates/js/translated/bom.js:408 templates/js/translated/build.js:1116 msgid "Variant stock allowed" msgstr "" @@ -7000,11 +7333,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:608 templates/js/translated/build.js:1183 -#: templates/js/translated/order.js:1319 -msgid "Actions" -msgstr "" - #: templates/js/translated/bom.js:616 msgid "Validate BOM Item" msgstr "" @@ -7025,7 +7353,7 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:718 templates/js/translated/build.js:855 +#: templates/js/translated/bom.js:718 templates/js/translated/build.js:860 msgid "No BOM items found" msgstr "" @@ -7033,7 +7361,7 @@ msgstr "" msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1095 +#: templates/js/translated/bom.js:974 templates/js/translated/build.js:1100 msgid "Required Part" msgstr "" @@ -7041,165 +7369,165 @@ msgstr "" msgid "Inherited from parent BOM" msgstr "" -#: templates/js/translated/build.js:78 +#: templates/js/translated/build.js:83 msgid "Edit Build Order" msgstr "" -#: templates/js/translated/build.js:112 +#: templates/js/translated/build.js:117 msgid "Create Build Order" msgstr "" -#: templates/js/translated/build.js:133 +#: templates/js/translated/build.js:138 msgid "Allocate stock items to this build output" msgstr "" -#: templates/js/translated/build.js:144 +#: templates/js/translated/build.js:149 msgid "Unallocate stock from build output" msgstr "" -#: templates/js/translated/build.js:153 +#: templates/js/translated/build.js:158 msgid "Complete build output" msgstr "" -#: templates/js/translated/build.js:161 +#: templates/js/translated/build.js:166 msgid "Delete build output" msgstr "" -#: templates/js/translated/build.js:184 +#: templates/js/translated/build.js:189 msgid "Are you sure you wish to unallocate stock items from this build?" msgstr "" -#: templates/js/translated/build.js:202 +#: templates/js/translated/build.js:207 msgid "Unallocate Stock Items" msgstr "" -#: templates/js/translated/build.js:220 +#: templates/js/translated/build.js:225 msgid "Select Build Outputs" msgstr "" -#: templates/js/translated/build.js:221 +#: templates/js/translated/build.js:226 msgid "At least one build output must be selected" msgstr "" -#: templates/js/translated/build.js:275 +#: templates/js/translated/build.js:280 msgid "Output" msgstr "" -#: templates/js/translated/build.js:291 +#: templates/js/translated/build.js:296 msgid "Complete Build Outputs" msgstr "" -#: templates/js/translated/build.js:386 +#: templates/js/translated/build.js:391 msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:424 templates/js/translated/order.js:1193 +#: templates/js/translated/build.js:429 templates/js/translated/order.js:1848 msgid "Location not specified" msgstr "未指定仓储地点" -#: templates/js/translated/build.js:603 +#: templates/js/translated/build.js:608 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1052 templates/js/translated/build.js:1760 -#: templates/js/translated/order.js:1326 +#: templates/js/translated/build.js:1057 templates/js/translated/build.js:1766 +#: templates/js/translated/order.js:1982 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:1054 templates/js/translated/build.js:1761 -#: templates/js/translated/order.js:1327 +#: templates/js/translated/build.js:1059 templates/js/translated/build.js:1767 +#: templates/js/translated/order.js:1983 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:1072 +#: templates/js/translated/build.js:1077 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:1082 +#: templates/js/translated/build.js:1087 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:1107 +#: templates/js/translated/build.js:1112 msgid "Substitute parts available" msgstr "" -#: templates/js/translated/build.js:1124 +#: templates/js/translated/build.js:1129 msgid "Quantity Per" msgstr "" -#: templates/js/translated/build.js:1134 templates/js/translated/build.js:1360 -#: templates/js/translated/build.js:1756 templates/js/translated/order.js:1556 +#: templates/js/translated/build.js:1139 templates/js/translated/build.js:1365 +#: templates/js/translated/build.js:1762 templates/js/translated/order.js:2227 msgid "Allocated" msgstr "" -#: templates/js/translated/build.js:1190 templates/js/translated/order.js:1610 +#: templates/js/translated/build.js:1195 templates/js/translated/order.js:2307 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:1194 templates/stock_table.html:52 +#: templates/js/translated/build.js:1199 templates/stock_table.html:52 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:1197 templates/js/translated/order.js:1603 +#: templates/js/translated/build.js:1202 templates/js/translated/order.js:2300 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:1262 +#: templates/js/translated/build.js:1267 templates/js/translated/order.js:1499 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1333 templates/js/translated/label.js:134 -#: templates/js/translated/report.js:225 +#: templates/js/translated/build.js:1338 templates/js/translated/label.js:134 +#: templates/js/translated/order.js:1550 templates/js/translated/report.js:225 msgid "Select Parts" msgstr "选择商品" -#: templates/js/translated/build.js:1334 +#: templates/js/translated/build.js:1339 templates/js/translated/order.js:1551 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1348 +#: templates/js/translated/build.js:1353 templates/js/translated/order.js:1565 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1377 +#: templates/js/translated/build.js:1382 templates/js/translated/order.js:1600 msgid "Confirm stock allocation" msgstr "确认库存分配" -#: templates/js/translated/build.js:1378 +#: templates/js/translated/build.js:1383 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1389 +#: templates/js/translated/build.js:1394 templates/js/translated/order.js:1613 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1451 +#: templates/js/translated/build.js:1464 templates/js/translated/order.js:1690 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1576 +#: templates/js/translated/build.js:1582 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1593 templates/js/translated/part.js:1147 -#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1176 -#: templates/js/translated/stock.js:1953 +#: templates/js/translated/build.js:1599 templates/js/translated/part.js:1147 +#: templates/js/translated/part.js:1558 templates/js/translated/stock.js:1333 +#: templates/js/translated/stock.js:2128 msgid "Select" msgstr "" -#: templates/js/translated/build.js:1613 +#: templates/js/translated/build.js:1619 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1674 templates/js/translated/stock.js:2172 +#: templates/js/translated/build.js:1680 templates/js/translated/stock.js:2347 msgid "No user information" msgstr "没有用户信息" -#: templates/js/translated/build.js:1686 +#: templates/js/translated/build.js:1692 msgid "No information" msgstr "" -#: templates/js/translated/build.js:1737 +#: templates/js/translated/build.js:1743 msgid "No parts allocated for" msgstr "" @@ -7219,7 +7547,7 @@ msgstr "编辑制造商商品" msgid "Delete Manufacturer Part" msgstr "删除制造商商品" -#: templates/js/translated/company.js:165 templates/js/translated/order.js:90 +#: templates/js/translated/company.js:165 templates/js/translated/order.js:248 msgid "Add Supplier" msgstr "添加供应商" @@ -7354,20 +7682,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1072 templates/modals.html:19 +#: templates/js/translated/forms.js:1078 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1463 +#: templates/js/translated/forms.js:1469 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1667 +#: templates/js/translated/forms.js:1673 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1884 +#: templates/js/translated/forms.js:1893 msgid "Clear input" msgstr "" @@ -7380,7 +7708,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:863 msgid "Select Stock Items" msgstr "选择库存项" @@ -7429,62 +7757,62 @@ msgstr "选择标签" msgid "Select Label Template" msgstr "选择标签模板" -#: templates/js/translated/modals.js:75 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:593 +#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 +#: templates/js/translated/modals.js:594 msgid "Cancel" msgstr "取消" -#: templates/js/translated/modals.js:76 templates/js/translated/modals.js:118 -#: templates/js/translated/modals.js:660 templates/js/translated/modals.js:963 +#: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 +#: templates/js/translated/modals.js:661 templates/js/translated/modals.js:964 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" -#: templates/js/translated/modals.js:117 +#: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:380 +#: templates/js/translated/modals.js:381 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:539 +#: templates/js/translated/modals.js:540 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:592 +#: templates/js/translated/modals.js:593 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:649 +#: templates/js/translated/modals.js:650 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:915 +#: templates/js/translated/modals.js:916 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:927 +#: templates/js/translated/modals.js:928 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1024 +#: templates/js/translated/modals.js:1025 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1039 +#: templates/js/translated/modals.js:1040 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1040 +#: templates/js/translated/modals.js:1041 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1063 +#: templates/js/translated/modals.js:1064 msgid "Error requesting form data" msgstr "" @@ -7512,176 +7840,245 @@ msgstr "商品ID" msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:256 +#: templates/js/translated/model_renderers.js:253 +msgid "Shipment ID" +msgstr "" + +#: templates/js/translated/model_renderers.js:273 msgid "Category ID" msgstr "类别 ID" -#: templates/js/translated/model_renderers.js:293 +#: templates/js/translated/model_renderers.js:310 msgid "Manufacturer Part ID" msgstr "制造商商品ID" -#: templates/js/translated/model_renderers.js:322 +#: templates/js/translated/model_renderers.js:339 msgid "Supplier Part ID" msgstr "供应商商品ID" -#: templates/js/translated/order.js:48 +#: templates/js/translated/order.js:75 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/order.js:80 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/order.js:120 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/order.js:181 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/order.js:206 msgid "Add Customer" msgstr "" -#: templates/js/translated/order.js:73 +#: templates/js/translated/order.js:231 msgid "Create Sales Order" msgstr "" -#: templates/js/translated/order.js:208 +#: templates/js/translated/order.js:366 msgid "Export Order" msgstr "" -#: templates/js/translated/order.js:211 templates/js/translated/stock.js:505 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:509 msgid "Format" msgstr "" -#: templates/js/translated/order.js:212 templates/js/translated/stock.js:506 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:510 msgid "Select file format" msgstr "" -#: templates/js/translated/order.js:300 +#: templates/js/translated/order.js:460 msgid "Select Line Items" msgstr "" -#: templates/js/translated/order.js:301 +#: templates/js/translated/order.js:461 msgid "At least one line item must be selected" msgstr "" -#: templates/js/translated/order.js:326 +#: templates/js/translated/order.js:486 msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:360 templates/js/translated/stock.js:1755 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:1930 msgid "Stock Status" msgstr "" -#: templates/js/translated/order.js:427 +#: templates/js/translated/order.js:587 msgid "Order Code" msgstr "订单编码" -#: templates/js/translated/order.js:428 +#: templates/js/translated/order.js:588 msgid "Ordered" msgstr "" -#: templates/js/translated/order.js:430 +#: templates/js/translated/order.js:590 msgid "Receive" msgstr "" -#: templates/js/translated/order.js:449 +#: templates/js/translated/order.js:609 msgid "Confirm receipt of items" msgstr "" -#: templates/js/translated/order.js:450 +#: templates/js/translated/order.js:610 msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:627 templates/js/translated/part.js:746 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:746 msgid "No purchase orders found" msgstr "" -#: templates/js/translated/order.js:659 templates/js/translated/order.js:1062 +#: templates/js/translated/order.js:815 templates/js/translated/order.js:1230 msgid "Order is overdue" msgstr "" -#: templates/js/translated/order.js:771 templates/js/translated/order.js:1645 +#: templates/js/translated/order.js:936 templates/js/translated/order.js:2356 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/order.js:783 templates/js/translated/order.js:1656 +#: templates/js/translated/order.js:948 templates/js/translated/order.js:2367 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/order.js:822 +#: templates/js/translated/order.js:987 msgid "No line items found" msgstr "" -#: templates/js/translated/order.js:849 templates/js/translated/order.js:1466 +#: templates/js/translated/order.js:1014 templates/js/translated/order.js:2138 msgid "Total" msgstr "" -#: templates/js/translated/order.js:903 templates/js/translated/order.js:1491 +#: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 #: templates/js/translated/part.js:1775 templates/js/translated/part.js:1986 msgid "Unit Price" msgstr "单价" -#: templates/js/translated/order.js:918 templates/js/translated/order.js:1507 +#: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" msgstr "" -#: templates/js/translated/order.js:996 templates/js/translated/order.js:1616 +#: templates/js/translated/order.js:1161 templates/js/translated/order.js:2313 msgid "Edit line item" msgstr "" -#: templates/js/translated/order.js:997 +#: templates/js/translated/order.js:1162 templates/js/translated/order.js:2317 msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1001 templates/js/translated/part.js:878 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:878 msgid "Receive line item" msgstr "" -#: templates/js/translated/order.js:1038 +#: templates/js/translated/order.js:1206 msgid "No sales orders found" msgstr "" -#: templates/js/translated/order.js:1076 +#: templates/js/translated/order.js:1244 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/order.js:1154 +#: templates/js/translated/order.js:1322 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/order.js:1325 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/order.js:1330 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/order.js:1350 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/order.js:1367 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/order.js:1401 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/order.js:1411 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/order.js:1435 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/order.js:1441 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/order.js:1601 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/order.js:1809 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/order.js:1247 +#: templates/js/translated/order.js:1898 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1264 +#: templates/js/translated/order.js:1915 msgid "Confirm Delete Operation" msgstr "确认删除操作" -#: templates/js/translated/order.js:1265 +#: templates/js/translated/order.js:1916 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/order.js:1307 +#: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 +#: templates/js/translated/stock.js:1249 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/order.js:1556 -msgid "Fulfilled" -msgstr "" - -#: templates/js/translated/order.js:1600 +#: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/order.js:1606 +#: templates/js/translated/order.js:2303 msgid "Purchase stock" msgstr "" -#: templates/js/translated/order.js:1613 templates/js/translated/order.js:1792 +#: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" msgstr "" -#: templates/js/translated/order.js:1617 -msgid "Delete line item " +#: templates/js/translated/order.js:2321 +msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/order.js:1740 -msgid "Allocate Stock Item" +#: templates/js/translated/order.js:2324 +msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/order.js:1800 +#: templates/js/translated/order.js:2382 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/order.js:2484 msgid "Update Unit Price" msgstr "" -#: templates/js/translated/order.js:1814 +#: templates/js/translated/order.js:2498 msgid "No matching line items" msgstr "" @@ -7826,12 +8223,12 @@ msgid "No category" msgstr "没有分类" #: templates/js/translated/part.js:1230 -#: templates/js/translated/table_filters.js:381 +#: templates/js/translated/table_filters.js:412 msgid "Low stock" msgstr "" #: templates/js/translated/part.js:1321 templates/js/translated/part.js:1493 -#: templates/js/translated/stock.js:1914 +#: templates/js/translated/stock.js:2089 msgid "Display as list" msgstr "" @@ -7839,7 +8236,7 @@ msgstr "" msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:1933 +#: templates/js/translated/part.js:1512 templates/js/translated/stock.js:2108 msgid "Display as tree" msgstr "" @@ -7847,7 +8244,7 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:1977 +#: templates/js/translated/part.js:1590 templates/js/translated/stock.js:2152 msgid "Path" msgstr "" @@ -7855,11 +8252,11 @@ msgstr "" msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:898 +#: templates/js/translated/part.js:1685 templates/js/translated/stock.js:1055 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:899 +#: templates/js/translated/part.js:1686 templates/js/translated/stock.js:1056 msgid "Delete test result" msgstr "" @@ -7898,6 +8295,10 @@ msgstr "" msgid "Single Price Difference" msgstr "" +#: templates/js/translated/plugin.js:22 +msgid "The Plugin was installed" +msgstr "" + #: templates/js/translated/report.js:67 msgid "items selected" msgstr "" @@ -7964,300 +8365,316 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:71 +#: templates/js/translated/stock.js:72 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:89 templates/js/translated/stock.js:168 +#: templates/js/translated/stock.js:90 templates/js/translated/stock.js:172 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:170 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:174 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:105 +#: templates/js/translated/stock.js:100 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:109 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:141 +#: templates/js/translated/stock.js:145 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:181 +#: templates/js/translated/stock.js:185 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:220 +#: templates/js/translated/stock.js:224 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:226 +#: templates/js/translated/stock.js:230 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:369 +#: templates/js/translated/stock.js:373 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:382 +#: templates/js/translated/stock.js:386 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:407 +#: templates/js/translated/stock.js:411 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:411 templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:415 templates/js/translated/stock.js:416 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:428 +#: templates/js/translated/stock.js:432 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:448 +#: templates/js/translated/stock.js:452 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:457 +#: templates/js/translated/stock.js:461 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:502 +#: templates/js/translated/stock.js:506 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:513 +#: templates/js/translated/stock.js:517 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:514 +#: templates/js/translated/stock.js:518 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:556 +#: templates/js/translated/stock.js:627 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:628 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:713 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:557 +#: templates/js/translated/stock.js:714 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:563 +#: templates/js/translated/stock.js:720 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:721 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:568 +#: templates/js/translated/stock.js:725 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:569 +#: templates/js/translated/stock.js:726 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:573 +#: templates/js/translated/stock.js:730 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:574 users/models.py:200 +#: templates/js/translated/stock.js:731 users/models.py:202 msgid "Add" msgstr "添加" -#: templates/js/translated/stock.js:578 templates/stock_table.html:56 +#: templates/js/translated/stock.js:735 templates/stock_table.html:57 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:667 +#: templates/js/translated/stock.js:824 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:864 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:865 +#: templates/js/translated/stock.js:1022 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:867 +#: templates/js/translated/stock.js:1024 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:872 +#: templates/js/translated/stock.js:1029 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:894 +#: templates/js/translated/stock.js:1051 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:920 +#: templates/js/translated/stock.js:1077 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:977 +#: templates/js/translated/stock.js:1134 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1084 +#: templates/js/translated/stock.js:1241 msgid "In production" msgstr "正在生产" -#: templates/js/translated/stock.js:1088 +#: templates/js/translated/stock.js:1245 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1092 -msgid "Shipped to customer" -msgstr "" - -#: templates/js/translated/stock.js:1096 +#: templates/js/translated/stock.js:1253 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1102 +#: templates/js/translated/stock.js:1259 msgid "No stock location set" msgstr "未设置仓储地点" -#: templates/js/translated/stock.js:1260 +#: templates/js/translated/stock.js:1417 msgid "Stock item is in production" msgstr "库存品正在生产" -#: templates/js/translated/stock.js:1265 +#: templates/js/translated/stock.js:1422 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1268 +#: templates/js/translated/stock.js:1425 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1272 +#: templates/js/translated/stock.js:1429 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1274 +#: templates/js/translated/stock.js:1431 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1278 -msgid "Stock item has been allocated" +#: templates/js/translated/stock.js:1437 +msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1282 +#: templates/js/translated/stock.js:1439 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:1441 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:1446 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1289 +#: templates/js/translated/stock.js:1453 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1291 +#: templates/js/translated/stock.js:1455 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1293 +#: templates/js/translated/stock.js:1457 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1297 -#: templates/js/translated/table_filters.js:183 +#: templates/js/translated/stock.js:1461 +#: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1347 +#: templates/js/translated/stock.js:1511 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1584 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1458 +#: templates/js/translated/stock.js:1622 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1479 templates/js/translated/stock.js:1527 +#: templates/js/translated/stock.js:1643 templates/js/translated/stock.js:1691 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1567 +#: templates/js/translated/stock.js:1731 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1594 +#: templates/js/translated/stock.js:1758 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1760 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:1770 +#: templates/js/translated/stock.js:1945 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:1784 +#: templates/js/translated/stock.js:1959 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:1785 +#: templates/js/translated/stock.js:1960 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2009 +#: templates/js/translated/stock.js:2184 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2031 +#: templates/js/translated/stock.js:2206 msgid "Details" msgstr "详情" -#: templates/js/translated/stock.js:2056 +#: templates/js/translated/stock.js:2231 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2075 +#: templates/js/translated/stock.js:2250 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2094 +#: templates/js/translated/stock.js:2269 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2112 +#: templates/js/translated/stock.js:2287 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2135 +#: templates/js/translated/stock.js:2310 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2143 +#: templates/js/translated/stock.js:2318 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2184 +#: templates/js/translated/stock.js:2359 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2185 +#: templates/js/translated/stock.js:2360 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2236 +#: templates/js/translated/stock.js:2411 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2287 +#: templates/js/translated/stock.js:2462 msgid "Uninstall Stock Item" msgstr "" @@ -8278,7 +8695,7 @@ msgid "Allow Variant Stock" msgstr "" #: templates/js/translated/table_filters.js:110 -#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:183 msgid "Include sublocations" msgstr "" @@ -8288,54 +8705,54 @@ msgstr "" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 -#: templates/js/translated/table_filters.js:358 +#: templates/js/translated/table_filters.js:389 msgid "Include subcategories" msgstr "" #: templates/js/translated/table_filters.js:126 -#: templates/js/translated/table_filters.js:393 +#: templates/js/translated/table_filters.js:424 msgid "Subscribed" msgstr "" #: templates/js/translated/table_filters.js:136 -#: templates/js/translated/table_filters.js:213 +#: templates/js/translated/table_filters.js:218 msgid "Is Serialized" msgstr "" #: templates/js/translated/table_filters.js:139 -#: templates/js/translated/table_filters.js:220 +#: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" msgstr "" #: templates/js/translated/table_filters.js:140 -#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" msgstr "" #: templates/js/translated/table_filters.js:143 -#: templates/js/translated/table_filters.js:224 +#: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" msgstr "" #: templates/js/translated/table_filters.js:144 -#: templates/js/translated/table_filters.js:225 +#: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" msgstr "" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 -#: templates/js/translated/table_filters.js:216 -#: templates/js/translated/table_filters.js:217 +#: templates/js/translated/table_filters.js:221 +#: templates/js/translated/table_filters.js:222 msgid "Serial number" msgstr "" #: templates/js/translated/table_filters.js:152 -#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:239 msgid "Batch code" msgstr "" #: templates/js/translated/table_filters.js:163 -#: templates/js/translated/table_filters.js:348 +#: templates/js/translated/table_filters.js:379 msgid "Active parts" msgstr "" @@ -8356,101 +8773,111 @@ msgid "Item has been allocated" msgstr "" #: templates/js/translated/table_filters.js:179 -msgid "Include stock in sublocations" +msgid "Stock is available for use" msgstr "" #: templates/js/translated/table_filters.js:184 -msgid "Show stock items which are depleted" +msgid "Include stock in sublocations" msgstr "" #: templates/js/translated/table_filters.js:189 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:194 msgid "Show items which are in stock" msgstr "" -#: templates/js/translated/table_filters.js:193 +#: templates/js/translated/table_filters.js:198 msgid "In Production" msgstr "正在生产" -#: templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:199 msgid "Show items which are in production" msgstr "显示正在生产的项目" -#: templates/js/translated/table_filters.js:198 +#: templates/js/translated/table_filters.js:203 msgid "Include Variants" msgstr "" -#: templates/js/translated/table_filters.js:199 +#: templates/js/translated/table_filters.js:204 msgid "Include stock items for variant parts" msgstr "" -#: templates/js/translated/table_filters.js:203 +#: templates/js/translated/table_filters.js:208 msgid "Installed" msgstr "" -#: templates/js/translated/table_filters.js:204 +#: templates/js/translated/table_filters.js:209 msgid "Show stock items which are installed in another item" msgstr "" -#: templates/js/translated/table_filters.js:209 +#: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" msgstr "" -#: templates/js/translated/table_filters.js:229 -#: templates/js/translated/table_filters.js:230 +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:235 msgid "Stock status" msgstr "" -#: templates/js/translated/table_filters.js:238 +#: templates/js/translated/table_filters.js:243 msgid "Has purchase price" msgstr "" -#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" msgstr "" -#: templates/js/translated/table_filters.js:248 +#: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" msgstr "" -#: templates/js/translated/table_filters.js:254 +#: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" msgstr "" -#: templates/js/translated/table_filters.js:285 +#: templates/js/translated/table_filters.js:290 msgid "Build status" msgstr "生产状态" -#: templates/js/translated/table_filters.js:313 -#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:303 +#: templates/js/translated/table_filters.js:344 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:320 +#: templates/js/translated/table_filters.js:331 +#: templates/js/translated/table_filters.js:352 msgid "Order status" msgstr "" -#: templates/js/translated/table_filters.js:318 -#: templates/js/translated/table_filters.js:335 +#: templates/js/translated/table_filters.js:336 +#: templates/js/translated/table_filters.js:357 msgid "Outstanding" msgstr "" -#: templates/js/translated/table_filters.js:359 +#: templates/js/translated/table_filters.js:390 msgid "Include parts in subcategories" msgstr "" -#: templates/js/translated/table_filters.js:363 +#: templates/js/translated/table_filters.js:394 msgid "Has IPN" msgstr "" -#: templates/js/translated/table_filters.js:364 +#: templates/js/translated/table_filters.js:395 msgid "Part has internal part number" msgstr "商品有内部编号" -#: templates/js/translated/table_filters.js:369 +#: templates/js/translated/table_filters.js:400 msgid "Show active parts" msgstr "" -#: templates/js/translated/table_filters.js:377 +#: templates/js/translated/table_filters.js:408 msgid "Stock available" msgstr "" -#: templates/js/translated/table_filters.js:405 +#: templates/js/translated/table_filters.js:436 msgid "Purchasable" msgstr "" @@ -8507,27 +8934,23 @@ msgstr "" msgid "All" msgstr "" -#: templates/navbar.html:40 +#: templates/navbar.html:42 msgid "Buy" msgstr "采购" -#: templates/navbar.html:52 +#: templates/navbar.html:54 msgid "Sell" msgstr "销售" -#: templates/navbar.html:86 users/models.py:39 -msgid "Admin" -msgstr "管理员" - -#: templates/navbar.html:88 +#: templates/navbar.html:113 msgid "Logout" msgstr "" -#: templates/navbar.html:90 +#: templates/navbar.html:115 msgid "Login" msgstr "" -#: templates/navbar.html:111 +#: templates/navbar.html:136 msgid "About InvenTree" msgstr "" @@ -8639,15 +9062,15 @@ msgstr "" msgid "Order selected items" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change status" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Delete selected items" msgstr "" @@ -8683,35 +9106,35 @@ msgstr "权限" msgid "Important dates" msgstr "重要日期" -#: users/models.py:187 +#: users/models.py:189 msgid "Permission set" msgstr "权限设置" -#: users/models.py:195 +#: users/models.py:197 msgid "Group" msgstr "群组" -#: users/models.py:198 +#: users/models.py:200 msgid "View" msgstr "视图" -#: users/models.py:198 +#: users/models.py:200 msgid "Permission to view items" msgstr "查看项目权限" -#: users/models.py:200 +#: users/models.py:202 msgid "Permission to add items" msgstr "添加项目权限" -#: users/models.py:202 +#: users/models.py:204 msgid "Change" msgstr "更改" -#: users/models.py:202 +#: users/models.py:204 msgid "Permissions to edit items" msgstr "编辑项目权限" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to delete items" msgstr "删除项目权限"
          {% trans "Quantity" %}{{ build.quantity }}
          {% trans "Status" %}