2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-13 18:45:40 +00:00

[plugin] Auto issue orders (#9565)

* Add builtin plugin for auto-issuing orders

* Add plugin to auto-issue orders

* Add placeholder documentation

* Fix typo

* Adds image macro

- To replace img.html
- includes checking if file exists

* Fix tooltips

* More docs

* Adjust plugin settings filters

* docs

* More docs

* More docs

* Updates

* Less restrictive URL checking

* Refactor build order page

* Fix typo

* Allow 429

* Debug output

* More debug

* Construct assets dir

* Cleanup

* Update docs README

* Refactoring more pages

* Fix image link

* Fix SSO settings

* Add hook to check for missing settings

- Ensure that all settings are documented!

* Add missing user settings

* Update docstring

* Tweak SSO.md

* Image updates

* More updates

* Tweaks

* Exclude orders without a target_date

* Fix for issuing build orders

* Further refactoring

* Fixes

* Image refactoring

* More refactoring

* More refactoring

* Refactor app images

* Fix pathing issues

* Suppress some openapidocs warnings in logs

(much easier to debug docs build issues)

* Fix image reference

* Reduce error messages

* Fix image links

* Fix image links

* Reduce docs log output

* Ensure settings are loaded before displaying them

* Fix for UI test

* Fix unit test

* Test tweaks
This commit is contained in:
Oliver
2025-06-03 17:07:12 +10:00
committed by GitHub
parent 89f8f132e1
commit 11ab0203b1
124 changed files with 1178 additions and 957 deletions

12
docs/.gitignore vendored
View File

@ -13,5 +13,17 @@ site/
# Generated API schema files
docs/api/schema/*.yml
# Temporary cache files
url_cache.txt
invoke-commands.txt
# Temp files
releases.json
versions.json
inventree_filters.yml
inventree_settings.json
observed_settings.json
inventree_tags.yml
.vscode/
generated/

View File

@ -59,18 +59,24 @@ Click [here](/part/views)
### Images
Images are served from the `./docs/assets/images` folder and can be added as follow:
Images are served from the `./docs/assets/images` folder and can be added as follows:
```
{% with id="image_id", url="folder/image_name.png", description="Text shown if image is not loaded properly" %}
{% include 'img.html' %}
{% endwith %}
{{ image("image_name.png", base="subfolder", title="Image title") }}
```
Replace:
* `image_id` with a short unique identifier for the image (most commonly, `image_id` is same as `image_name`)
* `folder` with the folder in `docs/assets/images` in which the image is stored
* `image_name` with the name of the image
* `.png` with the image extension (PNG or JPEG are preferred formats)
See the `image` macro in `./docs/main.py` for more information.
### Icons
Icons can be rendered (using the [tabler icon set](https://tabler.io/icons)) as follows:
```
{{ icon("brand-github", color="red")}}
```
See the `icon` macro in `./docs/main.py` for more information.
### Global variables

View File

@ -1,5 +0,0 @@
{% set url = 'app/' + url %}
{% with id=id, url=url, maxheight="240px", description="" %}
{% include "img.html" %}
{% endwith %}

View File

@ -1,30 +0,0 @@
{% if 'http' in url %}
{% set img_url = url %}
{% else %}
{% set img_url = config.assets_dir + '/images/' + url %}
{% endif %}
<figure class='image image-inventree'>
{% if id %}
<!-- The link that, when clicked, will display the image in full screen -->
<a href="#{{ id }}">
{% elif img_url %}
<a href="{{ img_url }}">
{% endif %}
<img class='img-inline' src='{{ img_url }}' alt='{{ description }}' title='{{ description }}'
{% if maxwidth or maxheight %}style='
{% if maxwidth %} max-width:{{ maxwidth }};{% endif %}
{% if maxheight %} max-height: {{ maxheight }};{% endif %}
'{% endif %}
>
{% if id or img_url %}
</a>
{% endif %}
{% if id %}
<!-- The full screen image, hidden by default -->
<a href="#_" class="overlay" id="{{ id }}">
<img src="{{ img_url }}" alt="{{ description }}" />
</a>
{% endif %}
</figure>

View File

@ -16,22 +16,16 @@ If the server is running in [Debug Mode](../start/index.md#debug-mode) then an i
Various list endpoints can be displayed as shown below:
{% with id="api_browse", url="api/api_browse.png", description="List API" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_browse.png", "List API") }}
### Filtering
List views can be filtered interactively:
{% with id="api_filter", url="api/api_filters.png", description="Filter API" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_filters.png", "Filter API") }}
### Detail View
Detail view endpoints can also be displayed:
{% with id="api_detail", url="api/api_detail.png", description="Detail API" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_detail.png", "Detail API") }}

View File

@ -13,9 +13,7 @@ InvenTree provides a powerful REST API for interacting with inventory data on th
The API is self-documenting, and the documentation is provided alongside any InvenTree installation instance. If (for example) you have an InvenTree instance running at `http://127.0.0.1:8000` then the API documentation is available at `http://127.0.0.1:8000/api-doc/`
{% with id="api_doc", url="api/api_doc.png", description="API documentation" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_doc.png", "API documentation") }}
### Browseble API
@ -152,15 +150,11 @@ Once a user has *authenticated* via the API, a list of the available roles can b
For example, when accessing the API from a *superuser* account:
{% with id="api_roles", url="api/api_roles.png", description="API superuser roles" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_roles.png", "API superuser roles") }}
Or, when accessing the API from an account which has read-only permissions:
{% with id="api_roles_2", url="api/api_roles_2.png", description="API user roles" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_roles_2.png", "API user roles") }}
### Permission Denied

View File

@ -15,9 +15,7 @@ To request metadata about a particular API endpoint, simply perform an `OPTIONS`
For example, to view the metadata available for creating a new [Part Category](../part/index.md#part-category), an `OPTIONS` request to `/api/part/category/` yields:
{% with id="api_cat_options", url="api/api_category_options.png", description="Part category options" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_category_options.png", "Part category options") }}
You can see here a detailed list of the various fields which are available for this API endpoint.
@ -33,9 +31,7 @@ The `OPTIONS` endpoint provides the following information:
Specific details are provided on the available attributes of each field:
{% with id="api_fields", url="api/api_metadata_fields.png", description="Metadata fields" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_metadata_fields.png", "Metadata fields") }}
### Field Types
@ -82,10 +78,5 @@ Field *label* and *help text* values are localized using the [community contribu
For example, the same forms (in the web interface) are served via identical API requests, with the locale information determined "on the fly":
{% with id="api_english", url="api/api_english.png", description="API forms (english)" %}
{% include 'img.html' %}
{% endwith %}
{% with id="api_german", url="api/api_german.png", description="API forms (german)" %}
{% include 'img.html' %}
{% endwith %}
{{ image("api/api_english.png", "API forms (english)") }}
{{ image("api/api_german.png", "API forms (german)") }}

View File

@ -53,9 +53,7 @@ If a match is found, the app will navigate to the relevant page.
From the [Stock Location detail page](./stock.md#stock-location-view), multiple barcode actions may be available:
{% with id="location-actions", url="app/barcode_stock_location_actions.png", maxheight="240px", description="Stock location barcode actions" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/barcode_stock_location_actions.png", "Stock location barcode actions") }}
#### Assign Barcode
@ -77,9 +75,7 @@ the *Scan Items Into Location* action allows you to scan items into the selected
From the [Stock Item detail page](./stock.md#stock-item-detail-view), the following barcode actions may be available:
{% with id="item-actions", url="app/barcode_stock_item_actions.png", maxheight="240px", description="Stock item barcode actions" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/barcode_stock_item_actions.png", "Stock item barcode actions") }}
#### Assign Barcode
@ -93,9 +89,7 @@ Scan the selected stock item into a stock location. Scanning a valid barcode ass
From the [Part detail page](./part.md#part-detail-view), the following barcode actions are available:
{% with id="part-actions", url="app/barcode_part_actions.png", maxheight="240px", description="Part barcode actions" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/barcode_part_actions.png", "Part barcode actions") }}
#### Assign Barcode
@ -105,9 +99,7 @@ Assign a custom barcode to the selected part. Scanning a barcode (which is not a
From the [Purchase Order detail page](./po.md#purchase-order-detail) page, the following barcode actions are available:
{% with id="po-actions", url="app/barcode_po_actions.png", maxheight="240px", description="Purchase order barcode actions" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/barcode_po_actions.png", "Purchase order barcode actions") }}
#### Scan Received Parts

View File

@ -8,16 +8,11 @@ Use of the InvenTree app assumes that you (the user) have access to an InvenTree
When first running the app, no profile has been configured. The *server* icon in the top-right corner of the home screen is <span style='color: red'>red</span>, indicating that there is no connection to an InvenTree server:
{% with id="no_server", url="app/initial.png", maxheight="240px", description="No server configured" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/initial.png", "No server configured") }}
Press on the server icon to navigate to the server selection view:
{% with id="no_profiles", url="app/no_profiles.png", maxheight="240px", description="No server configured" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/no_profiles.png", "No server configured") }}
### Create Server
@ -26,9 +21,7 @@ Press on the server icon to navigate to the server selection view:
Press the {{ icon("circle-plus", color="blue") }} button in the bottom-right corner of the screen to create a new server profile.
{% with id="add_profile", url="app/add_server_profile.png", maxheight="240px", description="Add server" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/add_server_profile.png", "Add server profile") }}
Enter the required server details:
@ -47,22 +40,16 @@ Alternatively, long press on the server profile to activate the context menu, th
When the app successfully connects to the server, a success message is briefly displayed at the bottom of the screen. A green {{ icon("circle-check", color="green") }} icon next to the server profile indicate that the profile is currently *selected* and also the connection was successful.
{% with id="connected", url="app/connected.png", maxheight="240px", description="Connected to server" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/connected.png", "Connected to server") }}
### Connection Failure
If (for whatever reason) the app does not successfully connect to the InvenTree server, a failure message is displayed, and a red {{ icon("circle-x", color="red") }} icon is displayed next to the server profile.
{% with id="failed", url="app/unauthorized.png", maxheight="240px", description="Connection failure" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/unauthorized.png", "Connection failure") }}
In this case, the error message displayed at the bottom of the screen provides context as to why the app could not successfully connect to the server.
To edit the server profile details, long press on the server profile, and select *Edit Server Profile*:
{% with id="edit", url="app/edit_server.png", maxheight="240px", description="Edit server profile" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/edit_server.png", "Edit server profile") }}

View File

@ -7,17 +7,13 @@ title: App Navigation
The app *home screen* provides quick-access buttons for stock view and actions:
{% with id="home", url="app/home.png", maxheight="240px", description="Home screen" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/home.png", "Home screen") }}
## Tab Display
Some screens provide multiple tabbed views, which are displayed at the top of the screen:
{% with id="global_nav", url="app/app_tabs.png", maxheight="240px", description="App tabs" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/app_tabs.png", "App tabs") }}
Tabs can be navigated by pressing on the text of each tab, or by scrolling the screen left or right.
@ -25,17 +21,13 @@ Tabs can be navigated by pressing on the text of each tab, or by scrolling the s
The *Global Action* buttons are visible on most screens, displayed in the bottom left corner of the screen:
{% with id="global_nav", url="app/app_global_navigation.png", maxheight="240px", description="Global navigation actions" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/app_global_navigation.png", "Global navigation actions") }}
### Open Drawer Menu
The {{ icon("list") }} action opens the *Drawer Menu*, which is a quick-access menu for global navigation:
{% with id="drawer", url="app/drawer.png", maxheight="240px", description="Open drawer menu" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/drawer.png", "Open drawer menu") }}
The *Drawer Menu* can be accessed in the following ways:
@ -54,9 +46,7 @@ The {{ icon("barcode", title="Scan") }} action opens the [barcode scan](./barcod
Within a given view, certain context actions may be available. If there are contextual actions which can be performed, they are displayed in the bottom right corner:
{% with id="drawer", url="app/context_actions.png", maxheight="240px", description="Context actions" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/context_actions.png", "Context actions") }}
!!! tip "Barcode Actions"
Available barcode actions are displayed in a separate context action menu

View File

@ -10,9 +10,7 @@ From the *home screen*, select *Parts* to open the top-level part category view.
The *Details* tab shows information about the selected part category. In particular, it shows the name and description of the category, a link to the parent category (if available) and a list of subcategories.
{% with id="part-category", url="part_category_detail.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_category_detail.png", "Part Category") }}
#### Parent Category
@ -26,47 +24,35 @@ If the current category has any subcategories, these are listed here. Select any
The *Parts* tab displays all the parts available in this category. Tap a displayed part to navigate to the part detail view.
{% with id="cat-parts", url="category_parts_tab.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/category_parts_tab.png", "Category Parts") }}
The list of available parts can be filtered using the input box at the top of the screen:
{% with id="cat-parts-filter", url="category_parts_filter.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/category_parts_filter.png", "Category Parts Filter") }}
### Context Actions
The following *Context Actions* are available for the selected category:
{% with id="cat-actions", url="category_actions_tab.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/category_actions_tab.png", "Category Actions") }}
#### New Category
Create a new subcategory under the current category:
{% with id="cat-new-cat", url="new_category.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/new_category.jpg", "New Category") }}
#### New Part
Create a new part within the current category:
{% with id="cat-new-part", url="new_part.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/new_part.jpg", "New Part") }}
### Edit Category
Select the *Edit* button in the top right corner of the screen to edit the details for the selected part category:
{% with id="cat-edit", url="part_category_edit.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_category_edit.jpg", "Edit Category") }}
!!! info "Permission Required"
If the user does not have permission to edit part details, this button will be hidden
@ -77,9 +63,7 @@ In the part category display screen, there are three tabs of information availab
The *Part Detail* view displays information about a single part:
{% with id="part-details", url="part_details.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_details.png", "Part Detail") }}
### Details Tab
@ -97,17 +81,13 @@ The *stock* tile shows the total quantity of stock available for the part. Tap o
Tap on the *notes* tile to view (and edit) the notes for this part:
{% with id="part-notes", url="part_notes.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_notes.jpg", "Part Notes") }}
#### Attachments
Tap on the *attachments* tile to view the file attachments for this part:
{% with id="part-attachments", url="part_attachments.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_attachments.jpg", "Part Attachments") }}
New attachments can be uploaded by tapping on the icons in the top right of the screen.
@ -117,9 +97,7 @@ Select a particular attachment file to downloaded it to the local device.
The *Stock* tab displays all the stock items available for this part. Tap on a particular stock item to navigate to a detail view for that item.
{% with id="part-stock", url="part_stock.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_stock.png", "Part Stock") }}
The list of available stock items can be filtered using the input box at the top of the screen.
@ -131,17 +109,13 @@ The *Actions* tab displays the available actions for the selected part:
Create a new stock item for this part:
{% with id="part-stock-new", url="new_stock_item.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/new_stock_item.jpg", "New Stock Item") }}
### Edit Part
To edit the part details, select the *Edit* button in the top right corner of the screen:
{% with id="part-edit", url="part_edit.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_edit.jpg", "Edit Part") }}
!!! info "Permission Required"
If the user does not have permission to edit part details, this button will be hidden
@ -150,8 +124,6 @@ To edit the part details, select the *Edit* button in the top right corner of th
Tap the image of the part (displayed at the top left of the screen) to launch the part image view:
{% with id="part-image", url="part_image.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/part_image.jpg", "Part Image") }}
A full-screen view of the image is displayed. The user can also upload a new image for the part, either selecting an image from the device, or taking a new picture with the device's camera.

View File

@ -6,9 +6,7 @@ title: Purchase Orders
The purchase order list display lists all purchase orders:
{% with id="po_list", url="app/po_list.png", maxheight="240px", description="Purchase order list" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/po_list.png", "Purchase order list") }}
Select an individual purchase order to display the detail view for that order.
@ -18,25 +16,19 @@ Displayed purchase orders can be subsequently filtered using the search input at
## Purchase Order Detail
{% with id="po_detail", url="app/po_detail.png", maxheight="240px", description="Purchase order details" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/po_detail.png", "Purchase order detail") }}
### Edit Order Details
From the detail view, select the *Edit* button in the top-right of the screen. This opens the purchase order editing display:
{% with id="edit_po", url="app/po_edit.png", maxheight="240px", description="Edit purchase order" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/po_edit.png", "Edit purchase order") }}
### Line Items
The *Line Items* tab shows the line items associated with this purchase order:
{% with id="po_lines", url="app/po_lines.png", maxheight="240px", description="Purchase order line items" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/po_lines.png", "Purchase order line items") }}
Long press on a particular line item to receive the item into stock.
@ -44,6 +36,4 @@ Long press on a particular line item to receive the item into stock.
Once items have been received into stock against a particular purchase order, they are displayed in the *Stock Items* tab:
{% with id="po_stock", url="app/po_stock.png", maxheight="240px", description="Purchase order stock items" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/po_stock.png", "Purchase order stock items") }}

View File

@ -6,10 +6,5 @@ title: App Search
The global search screen provides quick search functionality across the connected InvenTree database. Entering a search term will return multiple search results, as shown in the examples below:
{% with id="search_1", url="app/search_1.png", maxheight="240px", description="Search results" %}
{% include 'img.html' %}
{% endwith %}
{% with id="search_2", url="app/search_2.png", maxheight="240px", description="Search results" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/search_1.png", "Search results") }}
{{ image("app/search_2.png", "Search results") }}

View File

@ -17,18 +17,13 @@ The main settings view is shown below, and provides the following options:
| [Part](#part-settings) | Configure part management options |
| About | Display app version information |
{% with id="settings_view", url="app/settings.png", maxheight="240px", description="Settings view" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/settings.png", "Settings view") }}
## App Settings
The *App Settings* view provides configuration options for the InvenTree app:
{% with id="app_settings", url="app/app_settings.png", maxheight="240px", description="App Settings" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/app_settings.png", "App settings") }}
### App Settings
@ -57,9 +52,7 @@ Configure audible app notifications:
The *Barcode Settings* view allows you to configure options relating to [barcode scanning](./barcode.md):
{% with id="barcode_settings", url="app/barcode_settings.png", maxheight="240px", description="Barcode Settings" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/barcode_settings.png", "Barcode settings") }}
| Option | Description |
| --- | --- |
@ -70,9 +63,7 @@ The *Barcode Settings* view allows you to configure options relating to [barcode
The *Home Screen* view allows you to configure display options for the app 'home screen':
{% with id="home_settings", url="app/home_settings.png", maxheight="240px", description="Home Screen Settings" %}
{% include 'img.html' %}
{% endwith %}
{{ image("app/home_settings.png", "Home screen settings") }}
| Option | Description |
| --- | --- |

View File

@ -6,9 +6,7 @@ title: Sales Orders
The sales order list display shows all sales orders:
{% with id="so_list", url="app/so_list.png", maxheight="240px", description="Sales order list" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/so_list.png", "Sales order list") }}
Select an individual sales order to display the detail view for that order.
@ -20,9 +18,7 @@ Displayed sales orders can be subsequently filtered using the search input at th
Select an individual order to show the detailed view for that order:
{% with id="so_detail", url="app/so_detail.png", maxheight="240px", description="Sales order details" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/so_detail.png", "Sales order detail") }}
### Edit Order Details
@ -32,6 +28,4 @@ From the detail view, select the *Edit* button in the top-right of the screen. T
View the line items associated with the selected order:
{% with id="so_lines", url="app/so_lines.png", maxheight="240px", description="Sales order lines" %}
{% include "img.html" %}
{% endwith %}
{{ image("app/so_lines.png", "Sales order line items") }}

View File

@ -10,9 +10,7 @@ From the *home screen*, select *Stock* to open the top-level stock location view
The *Details* tab shows information about the selected stock location.
{% with id="loc-detail", url="location_detail.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/location_detail.png", "Stock Location") }}
#### Parent Location
@ -26,44 +24,29 @@ If the current stock location has any sublocations, they are listed here. Select
The *Stock* tab displays all the stock items available in this location. Tap a displayed stock item to navigate to the stock item detail view.
{% with id="loc-stock", url="location_stock.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/location_stock.png", "Location Stock") }}
The list of available stock items can be filtered using the input box at the top of the screen:
{% with id="loc-filter", url="location_stock_filter.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/location_stock_filter.jpg", "Location Stock Filter") }}
### Context Actions
The following *Context Actions* are available for the selected location:
{% with id="loc-actions", url="location_actions.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/location_actions.png", "Location Actions") }}
#### New Location
Create a new location under the current location:
{% with id="loc-new", url="new_location.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/new_location.jpg", "New Location") }}
#### New Stock Item
Create a new stock item in the current location:
{% with id="loc-new-stock", url="new_stock_item_from_location.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/new_stock_item_from_location.jpg", "New Stock Item") }}
#### Scan Stock Items Into Location
@ -74,10 +57,7 @@ Use the barcode scanner to scan a stock item into the current location.
The *Stock Item Detail* view displays information about a single stock item:
{% with id="stock-detail", url="stock_detail.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/stock_detail.png", "Stock Item") }}
### Details Tab
@ -99,44 +79,34 @@ Tap on the notes tile to display and edit the notes for this stock item
The *actions* tab displays the available actions for the selected stock item:
{% with id="stock-actions", url="stock_actions.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/stock_actions.png", "Stock Actions") }}
#### Count Stock
Select the *Count Stock* action to validate the current number of items in stock. Use this option to perform a quick stocktake!
{% with id="stock-count", url="stock_count.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/stock_count.png", "Count Stock") }}
!!! info "Serialized Stock"
The *count stock* action is not available for serialized stock items, as they have a fixed quantity of 1
#### Remove Stock
Select this action to remove a certain quantity from the selected stock item. For example, if there are 12 items available, and you take 3 items, the listed quantity will be reduced to 9 itemes.
Select this action to remove a certain quantity from the selected stock item. For example, if there are 12 items available, and you take 3 items, the listed quantity will be reduced to 9 items.
{% with id="stock-remove", url="stock_remove.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/stock_remove.png", "Remove Stock") }}
#### Add Stock
Select this action to add a certain quantity to the selected stock item. For example, if there are 12 items available, and you add 3 items, the listed quantity will be increased to 15 items.
{% with id="stock-add", url="stock_add.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/stock_add.png", "Add Stock") }}
#### Transfer Stock
Transfer (move) the stock item to a new location:
{% with id="stock-transfer", url="stock_transfer.png" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/stock_transfer.png", "Transfer Stock") }}
#### Scan Into Location
@ -154,18 +124,11 @@ This barcode can then be used to track the stock item.
If the server supports [label printing plugins](../plugins/mixins/label.md), then an option to print a label for the selected stock item:
{% with id="label_print_1", url="stock_print_label_1.png", description="Print label via plugin" %}
{% include 'app_img.html' %}
{% endwith %}
{% with id="label_print_2", url="stock_print_label_2.png", description="Print label via plugin" %}
{% include 'app_img.html' %}
{% endwith %}
{{ image("app/stock_print_label_1.png", "Print Label") }}
{{ image("app/stock_print_label_2.png", "Print Label") }}
### Edit Stock Item
To edit the stock item details, select the *Edit* button in the top right corner of the screen:
{% with id="stock-edit", url="stock_edit.jpg" %}
{% include "app_img.html" %}
{% endwith %}
{{ image("app/stock_edit.jpg", "Edit Stock Item") }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -26,23 +26,13 @@ Facility for barcode linking (and un-linking) is provided via the [API](../api/i
To link an arbitrary barcode, select the *Link Barcode* action as shown below:
{% with id="barcode_link_1", url="barcode/barcode_link_1.png", description="Link barcode" %}
{% include 'img.html' %}
{% endwith %}
{% with id="barcode_link_2", url="barcode/barcode_link_2.png", description="Link barcode" %}
{% include 'img.html' %}
{% endwith %}
{{ image("barcode/barcode_link_1.png", "Link barcode") }}
{{ image("barcode/barcode_link_2.png", "Link barcode") }}
If an item already has a linked barcode, it can be un-linked by selecting the *Unlink Barcode* action:
{% with id="barcode_unlink_1", url="barcode/barcode_unlink_1.png", description="Unlink barcode" %}
{% include 'img.html' %}
{% endwith %}
{% with id="barcode_unlink_2", url="barcode/barcode_unlink_2.png", description="Unlink barcode" %}
{% include 'img.html' %}
{% endwith %}
{{ image("barcode/barcode_unlink_1.png", "Unlink barcode") }}
{{ image("barcode/barcode_unlink_2.png", "Unlink barcode") }}
### Via the App

View File

@ -54,15 +54,11 @@ The following barcode input modes are supported by the web interface:
If barcode scanning is enabled in the web interface, select the barcode icon in the top-right of the menu bar to perform a quick-scan of a barcode. If the barcode is recognized by the system, the web browser will automatically navigate to the correct item:
{% with id="barcode_scan", url="barcode/barcode_scan.png", description="Barcode scan" %}
{% include 'img.html' %}
{% endwith %}
{{ image("barcode/barcode_scan.png", "Barcode scan") }}
If no match is found for the scanned barcode, the following error message is displayed:
{% with id="barcode_no_match", url="barcode/barcode_no_match.png", description="No match for barcode" %}
{% include 'img.html' %}
{% endwith %}
{{ image("barcode/barcode_no_match.png", "No match for barcode") }}
### Scanning Action Page
@ -70,13 +66,9 @@ A more comprehensive barcode scanning interface is available via the "Scan" page
To access this page, select *Scan Barcode* from the main navigation menu:
{% with id="barcode_nav_menu", url="barcode/barcode_nav_menu.png", description="Barcode menu item" %}
{% include 'img.html' %}
{% endwith %}
{{ image("barcode/barcode_nav_menu.png", "Barcode menu item") }}
{{ image("barcode/barcode_scan_page.png", "Barcode scan page") }}
{% with id="barcode_scan_page", url="barcode/barcode_scan_page.png", description="Barcode scan page" %}
{% include 'img.html' %}
{% endwith %}
## App Integration

View File

@ -29,9 +29,7 @@ It is recommended to disable a company rather than deleting it, as this will pre
To disable a company, simply edit the company details and set the `active` attribute to `False`:
{% with id="company_disable", url="order/company_disable.png", description="Disable Company" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/company_disable.png", "Disable Company") }}
To re-enable a company, simply follow the same process and set the `active` attribute to `True`.
@ -51,10 +49,7 @@ Each company can have multiple assigned *Contacts*. A contact identifies an indi
The list of contacts associated with a particular company is available in the <span class='badge inventree nav main'>{{ icon("users") }} Contacts</span> navigation tab:
{% with id="contact_list", url="order/contact_list.png", description="Contact List" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/contact_list.png", "Company Contacts") }}
A *contact* can be assigned to orders, (such as [purchase orders](../purchasing/purchase_order.md) or [sales orders](../sales/sales_order.md)).

View File

@ -12,9 +12,11 @@ Individual orders (such as [Purchase Orders](../purchasing/purchase_order.md) or
Management of project codes (such as creating or editing codes) is accessed via the [settings page](../settings/global.md). Select the *Project Codes* tab to access project code configuration options:
{% with id="project_codes", url="settings/project_codes.png", description="Project Codes List" %}
{% include "img.html" %}
{% endwith %}
{{ image("settings/project_codes.png", "Project Codes") }}
| Name | Description | Default | Units |
| ---- | ----------- | ------- | ----- |
{{ globalsetting("PROJECT_CODES_ENABLED") }}
#### Enable Project Code Support
@ -24,14 +26,10 @@ By default, project code support is disabled. Select the *Enable Project Codes*
Project codes can be assigned to an order when the order is created, or at any later stage by simply editing the order. If project code support is enabled, a *Project Code* field is available in the order details form:
{% with id="assign_project_code", url="order/assign_project_code.png", description="Assign Project Code" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/assign_project_code.png", "Assign Project Code") }}
## Filtering by Project Codes
The order tables can be easily filtered or sorted by project code:
{% with id="filter-by-project", url="order/filter_by_project.png", description="Filter by Project Code" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/filter_by_project.png", "Filter by Project Code") }}

View File

@ -258,3 +258,52 @@ def on_config(config, *args, **kwargs):
config['releases'] = sorted(releases, key=lambda it: it['date'], reverse=True)
return config
def on_post_build(*args, **kwargs):
"""Run after the build is complete.
Here we check that all global settings and user settings are documented.
"""
here = Path(__file__).parent
gen_base = here.parent.joinpath('generated')
expected_settings_file = gen_base.joinpath('inventree_settings.json')
observed_settings_file = gen_base.joinpath('observed_settings.json')
with open(observed_settings_file, encoding='utf-8') as f:
observed_settings = json.loads(f.read())
with open(expected_settings_file, encoding='utf-8') as f:
expected_settings = json.loads(f.read())
ignored_settings = {
'global': ['SERVER_RESTART_REQUIRED'],
'user': ['LAST_USED_PRINTING_MACHINES'],
}
for group in ['global', 'user']:
expected = expected_settings.get(group, {})
observed = observed_settings.get(group, {})
ignored = ignored_settings.get(group, [])
missing = []
for key in expected:
if key.startswith('_'):
# Ignore internal settings
continue
if key in ignored:
# Ignore settings that are not relevant
continue
if key not in observed:
missing.append(key)
if missing:
raise NotImplementedError(
'Missing Settings:\n'
+ f"There are {len(missing)} missing settings in the '{group}' group:\n"
+ '\n- '.join(missing)
)

View File

@ -46,9 +46,7 @@ Untracked stock items are allocated against the *Build Order* itself. We do not
Navigate to the *Allocate Stock* tab to view the stock allocation table:
{% with id="build_allocate_detail", url="build/build_allocate_detail.png", description="Allocate stock" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_allocate_detail.png", "Allocate stock") }}
In this example, there are two BOM line items which have been partially allocated to the build. Each line has a progress bar indicating how much of the required stock has been allocated.
@ -57,19 +55,13 @@ Clicking on a particular row expands the row, showing a list of stock items whic
!!! info "Multiple Allocations"
Note that multiple stock items can be allocated to the given BOM line, if a single stock item does not have sufficient stock
{% with id="build_allocation_expand", url="build/build_allocation_expand.png", description="Allocate expand" %}
{% include "img.html" %}
{% endwith %}
## Manual Stock Allocation
For each line in the BOM, stock will be automatically allocated if one (and only one) stock item (for the referenced part) is found (within the specified *source location* for the build):
Selecting *Allocate Stock* opens a dialog window which displays the stock items which will be allocated to the build during the auto allocation process:
{% with id="build_auto", url="build/build_auto_allocate.png", description="Auto allocate" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_auto_allocate.png", "Auto allocate") }}
Note here that there are two parts in the BOM which can be automatically allocated, as they only have a single corresponding StockItem available.
However the other BOM line item exists in multiple locations, and thus cannot be automatically allocated. These will need to be manually selected by the user.
@ -92,9 +84,7 @@ To speed up the allocation process, the *Auto Allocate* button can be used to al
The *Automatic Allocation* dialog is presented as shown below:
{% with id="auto_allocate_dialog", url="build/auto_allocate_dialog.png", description="Automatic allocation dialog" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/auto_allocate_dialog.png", "Automatic allocation dialog") }}
**Source Location**
@ -122,9 +112,7 @@ Allocating tracked stock items to particular build outputs is performed in the *
In the *Pending Items* tab, we can see that each build output has a stock allocation requirement which must be met before that build output can be completed:
{% with id="build_allocate_tracked_parts", url="build/build_allocate_tracked_parts.png", description="Allocate tracked parts" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_allocate_tracked_parts.png", "Allocate tracked parts") }}
Here we can see that the incomplete build outputs (serial numbers 15 and 14) now have a progress bar indicating the status of tracked stock item allocation:
@ -145,9 +133,7 @@ Here we can see that the incomplete build outputs (serial numbers 15 and 14) now
Once all build outputs have been completed, the build order itself can be completed by selecting the *Complete Build* button:
{% with id="build_complete", url="build/complete_build.png", description="Complete build order" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_complete.png", "Complete build") }}
### Allocated Stock

View File

@ -8,9 +8,7 @@ A Bill of Materials (BOM) defines the list of component parts required to make a
A part which can be built from other sub components is called an *Assembly*.
{% with id="bom_flat", url="build/bom_flat.png", description="Flat BOM Table" %}
{% include 'img.html' %}
{% endwith %}
{{ image("build/bom_flat.png", "Flat BOM Table") }}
## BOM Line Items
@ -33,9 +31,7 @@ If a BOM line item is marked as *consumable*, this means that while the part and
In the example below, see that the *Wood Screw* line item is marked as consumable. It is clear that 12 screws are required for each assembled *Table*, but the screws will not be tracked through the build process, as this line item is marked as *consumable*
{% with id="bom_item_consumable", url="build/bom_consumable_item.png", description="Consumable BOM Item" %}
{% include 'img.html' %}
{% endwith %}
{{ image("build/bom_consumable_item.png", "Consumable BOM Item") }}
Further, in the [Build Order](./build.md) stock allocation table, we see that this line item cannot be allocated, as it is *consumable*.
@ -56,9 +52,7 @@ This is particularly useful if a template part is defined with the "common" BOM
Consider the example diagram below:
{% with id="inherited_bom", url="build/inherited_bom.png", description="Inherited BOM Line Items" %}
{% include 'img.html' %}
{% endwith %}
{{ image("build/inherited_bom.png", "Inherited BOM Line Items") }}
**Template Part A** has two BOM line items defined: *A1* and *A2*.
@ -99,9 +93,8 @@ BOMs can be created manually, by adjusting individual line items, or by upload a
To manually add a BOM item, navigate to the part/assembly detail page then click on the "BOM" tab. On top of the tab view, click on the {{ icon("edit", color="blue", title="Edit") }} icon then, after the page reloads, click on the {{ icon("plus-circle") }} icon.
The `Create BOM Item` form will be displayed:
{% with id="bom_add_item", url="build/bom_add_item.png", description="Create BOM Item Form" %}
{% include 'img.html' %}
{% endwith %}
{{ image("build/bom_add_item.png", "Create BOM Item Form") }}
Fill-out the `Quantity` (required), `Reference`, `Overage` and `Note` (optional) fields then click on <span class="badge inventree confirm">Submit</span> to add the BOM item to this part's BOM.
@ -110,9 +103,8 @@ Fill-out the `Quantity` (required), `Reference`, `Overage` and `Note` (optional)
To manually add a substitute for a BOM item, click on the {{ icon("transfer") }} icon in the *Actions* columns.
The `Edit BOM Item Substitutes` form will be displayed:
{% with id="bom_substitute_item", url="build/bom_substitute_item.png", description="Edit BOM Item Substitutes" %}
{% include 'img.html' %}
{% endwith %}
{{ image("build/bom_substitute_item.png", "Edit BOM Item Substitutes") }}
Select a part in the list and click on "Add Substitute" button to confirm.

View File

@ -16,9 +16,7 @@ To navigate to the Build Order display, select *Manufacturing* from the main nav
The *Build Order Index Page* allows the user to view all build orders:
{% with id="build_display", url="build/build_display.png", description="Display Builds" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_display.png", title="Build Orders") }}
The following view modes are available:
@ -26,17 +24,13 @@ The following view modes are available:
*Table View* provides a table of Build Orders, which can be filtered to only show the orders you are interested in.
{% with id="build_list", url="build/build_list.png", description="Build List" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_list.png", title="Build List") }}
#### Calendar View
*Calendar View* shows a calendar display with outstanding build orders, based on the various dates specified for each order.
{% with id="build_calendar", url="build/build_calendar.png", description="Build Calendar" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_calendar.png", title="Build Calendar") }}
The build calendar allows the user to navigate month-by-month and display the filtered build orders
@ -121,17 +115,13 @@ The detail view for a single build order provides multiple display panels, as fo
The *Build Details* panel provides an overview of the Build Order:
{% with id="build_details", url="build/build_panel_details.png", description="Build details panel" %}
{% include "img.html" %}
{% endwith %}
{{ image ("build/build_panel_details.png", title="Build Details") }}
### Line Items
The *Line Items* panel displays all the line items (as defined by the [bill of materials](./bom.md)) required to complete the build order.
{% with id="build_allocate", url="build/build_panel_line_items.png", description="Build line items panel" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_panel_line_items.png", title="Line Items") }}
The allocation table (as shown above) provides an interface to allocate required stock, and also shows the stock allocation progress for each line item in the build.
@ -139,9 +129,7 @@ The allocation table (as shown above) provides an interface to allocate required
The *Incomplete Outputs* panel shows the list of in-progress [build outputs](./output.md) (created stock items) associated with this build.
{% with id="build_outputs", url="build/build_outputs.png", description="Outputs tab" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_outputs.png", title="Build Outputs") }}
!!! info "Example: Build Outputs"
In the example image above, a single output (serial number 2) has been completed, while serial numbers 1 and 4 are still in progress.
@ -158,9 +146,7 @@ This panel displays all the completed build outputs (stock items) which have bee
The *Allocated Stock* tab displays all stock items which have been *allocated* to this build order. These stock items are reserved for this build, and will be consumed when the build is completed:
{% with id="allocated_stock_table", url="build/allocated_stock_table.png", description="Allocated Stock Table" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/allocated_stock_table.png", title="Allocated Stock Table") }}
### Consumed Stock
@ -173,43 +159,27 @@ The *Consumed Stock* tab displays all stock items which have been *consumed* by
If there exist any build orders which are *children* of the selected build order, they are displayed in the *Child Builds* tab:
{% with id="build_childs", url="build/build_childs.png", description="Child builds panel" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_childs.png", title="Child Builds") }}
### Test Results
For *trackable* parts, test results can be recorded against each build output. These results are displayed in the *Test Results* panel:
{% with id="build_test_results", url="build/build_panel_test_results.png", description="Test Results panel" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_panel_test_results.png", title="Test Results") }}
This table provides a summary of the test results for each build output, and allows test results to be quickly added for each build output.
### Test Statistics
For *trackable* parts, this panel displays a summary of the test results for all build outputs:
{% with id="build_test_stats", url="build/build_panel_test_statistics.png", description="Test Statistics panel" %}
{% include "img.html" %}
{% endwith %}
### Attachments
Files attachments can be uploaded against the build order, and displayed in the *Attachments* tab:
{% with id="build_attachments", url="build/build_attachments.png", description="Attachments tab" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_attachments.png", title="Attachments") }}
### Notes
Build order notes (which support markdown formatting) are displayed in the *Notes* tab:
{% with id="build_notes", url="build/build_notes.png", description="Notes tab" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_notes.png", title="Notes") }}
## Create Build Order
@ -221,9 +191,7 @@ To create a build order for your part, you have two options:
- Select the *Build Orders* tab
- Select *Start new Build*
{% with id="build_create_from_part", url="build/build_create_from_part.png", description="Create build from Part view" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_create_from_part.png", title="Create Build Order from Part") }}
### Build Order Page

View File

@ -4,53 +4,41 @@ title: Build Order Example
## Build Order Example
For example, let's say we wish to create 10 new "Widgets". We create a new build for the widget, which signals an *intent* to assemble the "Widget" in quantity 10. As the *Widget* is a serialized part, with tracked subcomponents, the build outputs must themselves be serialized. This means that we need to generate 10 separate build outputs for this build order.
For example, let's say we wish to create 10 new "Widgets". We create a new build for the widget, which signals an *intent* to assemble the "Widget" in quantity 10. As the *Widget* is a serialized part, with tracked sub-components, the build outputs must themselves be serialized. This means that we need to generate 10 separate build outputs for this build order.
### Create Build Order
First, create a new build order for the *Widget* assembly:
{% with id="build_example_create", url="build/build_example_create.png", description="Create build order" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_example_create.png", "Create Build Order") }}
### Generate Build Outputs
Generate build outputs for this build order. As this is a tracked item, with tracked subcomponents, the build outputs must be serialized:
Generate build outputs for this build order. As this is a tracked item, with tracked sub-components, the build outputs must be serialized:
{% with id="build_example_create_outputs", url="build/build_example_create_outputs.png", description="Create build outputs" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_example_create_outputs.png", "Create Build Outputs") }}
A list of new build outputs will have now been generated:
{% with id="build_example_incomplete_list", url="build/build_example_incomplete_list.png", description="Incomplete build outputs" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_example_incomplete_list.png", "Incomplete Build Outputs") }}
### Allocate Untracked Stock
Untracked stock items are allocated to the build order in the *Allocate Stock* tab:
{% with id="build_example_allocate_untracked", url="build/build_example_allocate_untracked.png", description="Allocated Untracked Stock" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_example_allocate_untracked.png", "Allocate Untracked Stock") }}
### Allocate Tracked Stock
Tracked stock items are allocated to individual build outputs:
{% with id="build_example_allocate_tracked", url="build/build_example_allocated_tracked.png", description="Allocated Tracked Stock" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_example_allocated_tracked.png", "Allocate Tracked Stock") }}
### Complete Build Outputs
Mark each build output as complete:
{% with id="build_example_complete_outputs", url="build/build_example_complete_outputs.png", description="Complete Build Outputs" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_example_complete_outputs.png", "Complete Build Outputs") }}
### Complete Build Order

View File

@ -14,25 +14,19 @@ With reference to a [build order](./build.md), a *Build Output* is a finished pr
The *Incomplete Outputs* tab displays any outstanding / in-progress build outputs for the current build order.
{% with id="build-outputs-incomplete", url="build/build_outputs_incomplete.png", description="Incomplete build outputs" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_outputs_incomplete.png", "Incomplete build outputs") }}
### Completed Outputs
The *Completed Outputs* tab displays any [completed](#complete-build-output) or [scrapped](#scrap-build-output) outputs for the current build order.
{% with id="build-outputs-complete", url="build/build_outputs_complete.png", description="Complete build outputs" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_outputs_complete.png", "Completed build outputs") }}
## Create Build Output
Create a new build output by pressing the <span class="badge inventree add">{{ icon("plus-circle") }} New Build Output</span> button under the [incomplete outputs](#incomplete-outputs) tab:
{% with id="build_output_create", url="build/build_output_create.png", description="Create build output" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_output_create.png", "Create build output") }}
### Create Options
@ -55,9 +49,7 @@ Refer to the [serial number generation guide](../stock/tracking.md#generating-se
An individual build output is completed by selecting the "Complete build output" button associated with that build output:
{% with id="build_output_complete", url="build/build_output_complete.png", description="Complete build output" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_output_complete.png", "Complete build output") }}
Here the user can select the destination location for the build output, as well as the stock item status.
@ -84,9 +76,7 @@ The following options are available when completing a build output:
An individual build output is completed by selecting the *Scrap build output* button associated with that build output:
{% with id="build_output_scrap", url="build/build_output_scrap.png", description="Scrap build output" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_output_scrap.png", "Scrap build output") }}
Marking the build output(s) as scrapped performs the following actions:
@ -109,9 +99,7 @@ The following options are available when scrapping a build order:
*Deleting* a build output causes the build output to be cancelled, and removed from the database entirely. Use this option when the build output does not physically exist (or was never built) and should not be tracked in the database.
{% with id="build_output_delete", url="build/build_output_delete.png", description="Delete build output" %}
{% include "img.html" %}
{% endwith %}
{{ image("build/build_output_delete.png", "Delete build output") }}
Marking the build output(s) as deleted performs the following actions:

View File

@ -9,17 +9,12 @@ New parts can be created from the *Part Category* view, by pressing the *New Par
!!! info "Permissions"
If the user does not have "create" permission for the *Part* permission group, the *New Part* button will not be available.
{% with id="new", url="part/new_part.png", description="New Part" %}
{% include "img.html" %}
{% endwith %}
{{ image("part/new_part.png", "New part") }}
A part creation form is opened as shown below:
{% with id="newform", url="part/part_create_form.png", description="New Part Form" %}
{% include "img.html" %}
{% endwith %}
{{ image("part/part_create_form.png", "New part form") }}
Fill out the required part parameters and then press *Submit* to create the new part. If there are any form errors, you must fix these before the form can be successfully submitted.
@ -32,9 +27,7 @@ If the *Create Initial Stock* setting is enabled, then an extra section is avail
If this setting is enabled, the following elements are available in the form:
{% with id="initial_stock", url="part/part_initial_stock.png", descript="Initial stock" %}
{% include "img.html" %}
{% endwith %}
{{ image("part/part_initial_stock.png", "Initial stock") }}
Checking the *Create Initial Stock* form input then allows the creation of an initial quantity of stock for the new part.
@ -43,18 +36,11 @@ Checking the *Create Initial Stock* form input then allows the creation of an in
If the part is marked as *Purchaseable*, the form provides some extra options to initialize the new part with manufacturer and / or supplier information:
{% with id="supplierinfo", url="part/part_create_supplier.png", descript="Add supplier information" %}
{% include "img.html" %}
{% endwith %}
{{ image("part/part_create_supplier.png", "Part supplier options") }}
If the *Add Supplier Data* option is checked, then supplier part and manufacturer part information can be added to the newly created part:
{% with id="suppliers", url="part/part_new_suppliers.png", descript="Part supplier information" %}
{% include "img.html" %}
{% endwith %}
{{ image("part/part_new_suppliers.png", "Part supplier information") }}
## Other Part Creation Methods

View File

@ -4,7 +4,7 @@ title: Parts
## Part
The *Part* is the core element of the InvenTree ecosystem. A Part object is the archetype of any stock item in your inventory. Parts are arranged in hierarchical categories which are used to organise and filter parts by function.
The *Part* is the core element of the InvenTree ecosystem. A Part object is the archetype of any stock item in your inventory. Parts are arranged in hierarchical categories which are used to organize and filter parts by function.
## Part Category
@ -12,9 +12,7 @@ Part categories are very flexible and can be easily arranged to match a particul
Each part category also shows a list of sub-categories which exist underneath it.
{% with id="part_category", url="part/part_category.png", description="Parts are arranged in categories" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_category.png", "Part category") }}
The category part list provides an overview of each part:
@ -100,9 +98,7 @@ Each type of part can define a custom "unit of measure" which is a standardized
It is possible to track parts using physical quantity values, such as *metres* or *litres*. For example, it would make sense to track a "wire" in units of "metres":
{% with id="part_units", url="part/part_units.png", description="Parts units" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_units.png", "Part units") }}
### Supplier Part Units
@ -113,17 +109,13 @@ By default, units of measure for [supplier parts](../purchasing/supplier.md#supp
If an incompatible unit type is specified, an error will be displayed:
{% with id="part_units_invalid", url="part/part_units_invalid.png", description="Invalid supplier part units" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_units_invalid.png", "Invalid supplier part units") }}
## Part Images
Each part can have an associated image, which is used for display purposes throughout the InvenTree interface. A prominent example is on the part detail page itself:
{% with id="part_image", url="part/part_image_example.png", description="Part image example" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_image_example.png", "Part image example") }}
### Image Thumbnails
@ -135,9 +127,7 @@ Thumbnail images are also used throughout the interface, particularly in table v
In the web interface, part images can be uploaded directly from the [part view](./views.md). Hover the mouse cursor over the Part image to reveal multiple options:
{% with id="part_image_uplaod", url="part/part_image_upload.png", description="Upload part image" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_image_upload.png", "Part image upload") }}
| Action | Description |
| --- | --- |

View File

@ -13,24 +13,20 @@ Users can select to receive notifications when certain events occur.
Each user must have a valid email address associated with their account to receive email notifications
Notifications are also shown in the user interface. New notifications are announced in the header.
{% with id="notification_header", url="part/notification_header.png", description="One new notification in the header" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/notification_header.png", "Notification header") }}
They can be viewed in a flyout.
{% with id="notification_flyout", url="part/notification_flyout.png", description="One new notification in the flyout" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/notification_flyout.png", "Notification flyout") }}
All current notifications are listed in the inbox.
{% with id="notification_inbox", url="part/notification_inbox.png", description="One new notification in the notification inbox" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/notification_inbox.png", "Notification inbox") }}
All past notification are listed in the history. They can be deleted one-by-one or all at once from there.
{% with id="notification_history", url="part/notification_history.png", description="One old notification in the notification history" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/notification_history.png", "Notification history") }}
## Part Notification Events
@ -59,15 +55,11 @@ When subscribed to a *Part*, a user will receive notifications when events occur
If a user is subscribed to a particular part, it will be indicated as shown below:
{% with id="part_sub_on", url="part/part_subscribe_on.png", description="Subscribe" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_subscribe_on.png", "Part subscribed") }}
If the user is not subscribed, the subscription icon is greyed out, as shown here:
{% with id="part_sub_off", url="part/part_subscribe_off.png", description="Subscribe" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_subscribe_off.png", "Part not subscribed") }}
Clicking on this icon will toggle the subscription status for this part.

View File

@ -11,9 +11,7 @@ There is no limit for the number of part parameters and they are fully customiza
Here is an example of parameters for a capacitor:
{% with id="part_parameters_example", url="part/part_parameters_example.png", description="Part Parameters Example List" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_parameters_example.png", "Part Parameters Example") }}
## Parameter Templates
@ -42,9 +40,7 @@ To create a template:
An existing template can be edited by clicking on the "Edit" button associated with that template:
{% with id="part_parameter_template", url="part/parameter_template_edit.png", description="Edit Parameter Template" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/parameter_template_edit.png", "Edit Parameter Template") }}
### Create Parameter
@ -52,9 +48,7 @@ After [creating a template](#create-template) or using the existing templates, y
To add a parameter, navigate to a specific part detail page, click on the "Parameters" tab then click on the "New Parameters" button, the `Create Part Parameter` form will be displayed:
{% with id="create_part_parameter", url="part/create_part_parameter.png", description="Create Part Parameter Form" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/create_part_parameter.png", "Create Part Parameter Form") }}
Select the parameter `Template` you would like to use for this parameter, fill-out the `Data` field (value of this specific parameter) and click the "Submit" button.
@ -64,17 +58,13 @@ Parametric tables gather all parameters from all parts inside a particular [part
To access a category's parametric table, click on the "Parameters" tab within the category view:
{% with id="parametric_table_tab", url="part/parametric_table_tab.png", description="Parametric Table Tab" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/parametric_table_tab.png", "Parametric Table Tab") }}
### Sorting by Parameter Value
The parametric parts table allows the returned parts to be sorted by particular parameter values. Click on the header of a particular parameter column to sort results by that parameter:
{% with id="sort_by_param", url="part/part_sort_by_param.png", description="Sort by Parameter" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_sort_by_param.png", "Sort by Parameter") }}
## Parameter Units
@ -89,23 +79,15 @@ The in-built conversion functionality means that parameter values can be input i
If a part parameter is created with a value which is incompatible with the units specified for the template, it will be rejected:
{% with id="invalid_units", url="part/part_invalid_units.png", description="Invalid Parameter Units" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_invalid_units.png", "Invalid Parameter Units") }}
This behaviour can be disabled if required, so that any parameter value is accepted:
{% with id="enforce_units", url="part/part_parameters_enforce.png", description="Enforce part parameters" %}
{% include 'img.html' %}
{% endwith %}
This behaviour can be disabled if required, so that any parameter value is accepted.
### Parameter Sorting
Parameter sorting takes unit conversion into account, meaning that values provided in different (but compatible) units are sorted correctly:
{% with id="sort_by_param_units", url="part/part_sorting_units.png", description="Sort by Parameter Units" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_sorting_units.png", "Sort by Parameter Units") }}
### Selection Lists

View File

@ -42,9 +42,7 @@ The pricing tab is divided into different sections, based on the available prici
At the top of the pricing tab, an *Overview* section shows a synopsis of the available pricing data:
{% with id="pricing_overview", url="part/pricing_overview.png", description="Pricing Overview" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_overview.png", "Pricing Overview") }}
This overview tab provides information on the *range* of pricing data available within each category. If pricing data is not available for a given category, it is marked as *No data*.
@ -65,9 +63,7 @@ A particular Part may have a set of *Internal Price Breaks* which denote quantit
If desired, price breaks can be specified based on particular quantities.
{% with id="pricing_internal", url="part/pricing_internal.png", description="Internal Pricing" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_internal.png", "Internal Pricing") }}
#### Pricing Override
@ -77,25 +73,19 @@ If the **Internal Price Override** setting is enabled, then internal pricing dat
If the Part is designated as *purchaseable*, then historical purchase cost information is displayed (and used to calculate overall pricing). Purchase history data is collected from *completed* [purchase orders](../purchasing/purchase_order.md).
{% with id="pricing_purchase_history", url="part/pricing_purchase_history.png", description="Purchase History" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_purchase_history.png", "Purchase History") }}
### Supplier Pricing
If supplier pricing information is available, this can be also used to determine price range data.
{% with id="pricing_supplier", url="part/pricing_supplier.png", description="Supplier Pricing" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_supplier.png", "Supplier Pricing") }}
### BOM Pricing
If a Part is designated as an *assembly*, then the [Bill of Materials](../manufacturing/bom.md) (BOM) can be used to determine the price of the assembly. The price of each component in the BOM is used to calculate the overall price of the assembly.
{% with id="pricing_bom", url="part/pricing_bom.png", description="BOM Pricing" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_bom.png", "BOM Pricing") }}
#### BOM Pricing Chart
@ -108,25 +98,19 @@ The BOM *Pricing Chart* displays two separate "pie charts", with minimum and max
For *template* parts, the price of any *variants* of the template is taken into account:
{% with id="pricing_variants", url="part/pricing_variants.png", description="Variant Pricing" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_variants.png", "Variant Pricing") }}
### Sale Pricing
If the Part is designated as *Salable* then sale price breaks are made available. These can be configured as desired by the user, to define the desired sale price at various quantities.
{% with id="pricing_sale_price_breaks", url="part/pricing_sale_price_breaks.png", description="Sale Pricing" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_sale_price_breaks.png", "Sale Pricing") }}
### Sale History
If the Part is designated as *Salable* then historical sale cost information is available. Sale history data is collected from *completed* [sales orders](../sales/sales_order.md).
{% with id="pricing_sale_history", url="part/pricing_sale_history.png", description="Sale History" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/pricing_sale_history.png", "Sale History") }}
### Price Data Caching

View File

@ -37,9 +37,7 @@ The following options are available to control the behavior of part revisions.
Note that these options can be changed in the InvenTree settings:
{% with id="part_revision_settings", url="part/part_revision_settings.png", description="Part revision settings" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_revision_settings.png", "Part revision settings") }}
* **Enable Revisions**: If this setting is enabled, parts can have revisions. If this setting is disabled, parts cannot have revisions.
* **Assembly Revisions Only**: If this setting is enabled, only assembly parts can have revisions. This is useful if you only want to track revisions of assemblies, and not individual parts.
@ -50,9 +48,7 @@ To create a new revision for a given part, navigate to the part detail page, and
Select the "Duplicate Part" action, to create a new copy of the selected part. This will open the "Duplicate Part" form:
{% with id="part_create_revision", url="part/part_create_revision.png", description="Create part revision" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_create_revision.png", "Create part revision") }}
In this form, make the following updates:
@ -63,16 +59,12 @@ Once these changes (and any other required changes) are made, press *Submit* to
Once the form is submitted (without any errors), you will be redirected to the new part revision. Here you can see that it is linked to the original part:
{% with id="part_revision_b", url="part/part_revision_b.png", description="Revision B" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_revision_b.png", "Part revision B") }}
## Revision Navigation
When multiple revisions exist for a particular part, you can navigate between revisions using the *Select Part Revision* drop-down which renders at the top of the part page:
{% with id="part_revision_select", url="part/part_revision_select.png", description="Select part revision" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_revision_select.png", "Select part revision") }}
Note that this revision selector is only visible when multiple revisions exist for the part.

View File

@ -29,6 +29,4 @@ Additionally, any orders with a target date in the "past" are also ignored for t
Finally, any unexpected or unscheduled stock operations which are not associated with future orders cannot be predicted or displayed in the scheduling tab.
{% with id="scheduling", url="part/scheduling.png", description="Part Scheduling View" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/scheduling.png", "Part Scheduling View") }}

View File

@ -31,15 +31,11 @@ Historical stocktake data for a particular part can be viewed in the *Stocktake*
This tab displays a chart of historical stock quantity and cost data, and corresponding tabulated data:
{% with id="stocktake_tab", url="part/part_stocktake_tab.png", description="Part stocktake tab" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_tab.png", "Part stocktake tab") }}
If this tab is not visible, ensure that the *Part Stocktake* [user setting](../settings/user.md) is enabled in the *Display Settings* section.
{% with id="stocktake_tab_enable", url="part/part_stocktake_enable_tab.png", description="Enable stocktake tab" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_enable_tab.png", "Enable stocktake tab") }}
!!! info "Permission Required"
The stocktake tab will be unavailable if your user account does not have the [required permissions](#stocktake-permissions)
@ -61,9 +57,7 @@ Stocktake reports are made available for download as a tabulated `.csv` file, wh
There are a number of configuration options available in the [settings view](../settings/global.md):
{% with id="stocktake_settings", url="part/part_stocktake_settings.png", description="Stocktake settings" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_settings.png", "Stocktake settings") }}
### Enable Stocktake
@ -71,7 +65,7 @@ Enable or disable stocktake functionality. Note that by default, stocktake funct
### Automatic Stocktake Period
Configure the number of days between genenration of [automatic stocktake reports](#automatic-stocktake). If this value is set to zero, automatic stocktake reports will not be generated.
Configure the number of days between generation of [automatic stocktake reports](#automatic-stocktake). If this value is set to zero, automatic stocktake reports will not be generated.
### Delete Old Reports
@ -81,9 +75,7 @@ Configure how many days stocktake reports will be retained, before being deleted
The *Stocktake Settings* display also provides a table of historical stocktake reports:
{% with id="stocktake_report_table", url="part/part_stocktake_report_table.png", description="Stocktake reports" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_report_table.png", "Stocktake report table") }}
## Stocktake Permissions
@ -101,9 +93,7 @@ Manual stocktake can be performed via the web interface in a number of locations
When performing a stocktake, various options are presented to the user:
{% with id="stocktake_generate", url="part/part_stocktake_generate.png", description="Generate stocktake report" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_generate.png", "Generate stocktake report") }}
| Option | Description |
| --- | --- |
@ -115,27 +105,21 @@ When performing a stocktake, various options are presented to the user:
### Part Stocktake
A stockake report for a single part can be generated from the *Stocktake Tab* on the part page:
A stocktake report for a single part can be generated from the *Stocktake Tab* on the part page:
{% with id="stocktake_part", url="part/part_stocktake_from_part.png", description="Generate part stocktake report" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_from_part.png", "Generate part stocktake report") }}
### Category Stocktake
A stocktake report for a part category can be generated from the *Part Category* page:
{% with id="stocktake_category", url="part/part_stocktake_from_category.png", description="Generate category stocktake report" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_from_category.png", "Generate category stocktake report") }}
### Location Stocktake
A stocktake report for a stock location can be generated from the *Stock Location* page:
{% with id="stocktake_location", url="part/part_stocktake_from_location.png", description="Generate location stocktake report" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stocktake_from_location.png", "Generate location stocktake report") }}
### Automatic Stocktake
@ -144,3 +128,15 @@ If enabled, stocktake reports can be generated automatically at a configured int
### API Functionality
Stocktake actions can also be performed via the [API](../api/index.md).
## Stocktake Settings
The following settings are available for stocktake:
| Name | Description | Default | Units |
| ---- | ----------- | ------- | ----- |
{{ globalsetting("STOCKTAKE_ENABLE") }}
{{ globalsetting("STOCKTAKE_EXCLUDE_EXTERNAL") }}
{{ globalsetting("STOCKTAKE_AUTO_DAYS") }}
{{ globalsetting("STOCKTAKE_DELETE_REPORT_DAYS") }}
{{ globalsetting("DISPLAY_PROFILE_INFO") }}

View File

@ -10,9 +10,7 @@ A test template defines the parameters of the test; the individual stock items c
Test templates "cascade" down to variant parts: this means that if a master part has multiple variants, any test template defined for the master part will be assigned to the variants. Any stock items of the variant parts will have the same test templates associated with them.
{% with id="part_test_templates", url="part/part_test_templates.png", description="Part Test Templates" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_test_templates.png", "Part Test Templates") }}
### Test Template Parameters

View File

@ -15,9 +15,7 @@ The categories of each part is displayed on the top navigation bar as show in th
Details provides information about the particular part. Parts details can be displayed in the header panel clicking on "Show Part Details" toggle button.
{% with id="part_overview", url="part/part_overview.png", description="Part details" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_overview.png", "Part Overview") }}
A Part is defined in the system by the following parameters:
@ -57,9 +55,7 @@ If a part is a *Template Part* then the *Variants* tab will be visible.
The *Stock* tab shows all the stock items for the selected *Part*. The user can quickly determine how many parts are in stock, where they are located, and the status of each *Stock Item*.
{% with id="part_stock", url="part/part_stock.png", description="Part Stock" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_stock.png", "Part Stock") }}
#### Functions
@ -99,9 +95,7 @@ The *Suppliers* tab displays all the *Part Suppliers* and *Part Manufacturers* f
This tab is only visible if the *Part* is designated as *Purchaseable*.
{% with id="part_manufacturers_suppliers", url="part/part_manufacturers_suppliers.png", description="Part Suppliers and Manufacturers" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_manufacturers_suppliers.png", "Part Suppliers and Manufacturers") }}
### Purchase Orders
@ -131,9 +125,7 @@ Related Part denotes a relationship between two parts, when users want to show t
Related parts can be added and are shown under a table of the same name in the "Part" view:
{% with id="related_parts", url="part/part_related.png", description="Related Parts Example View" %}
{% include 'img.html' %}
{% endwith %}
{{ image("part/part_related.png", "Related Parts Example View") }}
This feature can be enabled or disabled in the global part settings.

View File

@ -0,0 +1,25 @@
---
title: Auto Issue Orders Plugin
---
## Auto Issue Orders Plugin
The **Auto Issue Orders Plugin** provides a mechanism to automatically issue pending orders when the target date is reached.
### Activation
This plugin is an *optional* plugin, and must be enabled in the InvenTree settings.
Additionally, the "Enable Schedule Integration" setting must be enabled in the InvenTree plugin settings. This is required to allow plugins to run scheduled tasks.
### Plugin Settings
The plugin allows configuration for which order types should be automatically issued.
{{ image("auto_issue_settings.png", base="plugin/builtin", title="Auto Issue Settings") }}
## Usage
When this plugin is enabled, any pending orders will be automatically issued when the target date is reached. This is done in the background, and does not require any user interaction.
The plugin checks once per day to see if any orders are pending and have reached their target date. If so, the order will be automatically issued.

View File

@ -0,0 +1,25 @@
---
title: BOM Exporter Plugin
---
## BOM Exporter Plugin
The **BOM Exporter Plugin** provides custom export functionality for [Bill of Materials (BOM)](../../manufacturing/bom.md) data.
It utilizies the [ExporterMixin](../mixins/export.md) mixin to provide a custom export format for BOM data.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
This plugin has no configurable settings.
## Usage
This plugin is used in the same way as the [InvenTree Exporter Plugin](./inventree_exporter.md), but provides a custom export format for BOM data.
When exporting BOM data, the *BOM Exporter* plugin is available for selection in the export dialog. When selected, the plugin provides some additional export options to control the data export process.
{{ image("bom_export_options.png", base="plugin/builtin", title="BOM Export Options") }}

View File

@ -0,0 +1,21 @@
---
title: InvenTree Currency Exchange
---
## InvenTree Currency Exchange
The **InvenTree Currency Exchange** plugin provides a default currency exchange rate provider for InvenTree.
The plugin pulls exchange rate information from the [frankfurter API](https://www.frankfurter.app/) API.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
This plugin has no configurable settings.
## Usage
This plugin is the default currency exchange provider for InvenTree. It is used to convert between different currencies when displaying prices in the InvenTree user interface. An altertnative currency exchange provider can be configured in the InvenTree settings, but this plugin is always available as a fallback option.

View File

@ -0,0 +1,19 @@
---
title: DigiKey Barcode Plugin
---
## DigiKey Barcode Plugin
The **DigiKey Barcode Plugin** provides barcode support for [DigiKey](https://www.digikey.com/) products. When receiving items from DigiKey, the barcode on the product can be scanned to automatically identify the product in InvenTree.
This plugin implements the [BarcodeMixin](../mixins/barcode.md) mixin to provide custom barcode support.
### Activation
This plugin is an *optional* plugin, and must be enabled in the InvenTree admin center.
### Plugin Settings
After activating the plugin, the user must specify which [supplier](../../purchasing/supplier.md) the plugin should be associated with. This is done by selecting the supplier from the dropdown list in the plugin settings:
{{ image("digikey_plugin_settings.png", base="plugin/builtin", title="DigiKey Plugin Settings") }}

View File

@ -0,0 +1,37 @@
---
title: Builtin Plugins
---
## Builtin Plugins
InvenTree comes with a number of builtin plugins, which provide additional functionality to the system. These plugins are installed by default, and do not require any additional configuration.
Some of the provided builtin plugins are *mandatory*, as they provide core functionality to the system. Other plugins are optional, and can be enabled or disabled as required.
### Available Plugins
The following builtin plugins are available in InvenTree:
| Plugin Name | Description | Mandatory |
| ----------- | ----------- | --------- |
| [Auto Issue Orders](./auto_issue.md) | Automatically issue pending orders when target date is reached | No |
| [BOM Exporter](./bom_exporter.md) | Custom [exporter](../mixins/export.md) for BOM data | Yes |
| [Currency Exchange](./currency_exchange.md) | Currency exchange rate plugin | Yes |
| [DigiKey](./digikey.md) | DigiKey barcode support | No |
| [InvenTree Barcode](./inventree_barcode.md) | Internal barcode support | Yes |
| [InvenTree Core Notifications](./notifications.md) | Core notification system | Yes |
| [InvenTree Exporter](./inventree_exporter.md) | Custom [exporter](../mixins/export.md) for InvenTree data | Yes |
| [Label Printer](./inventree_label.md) | Custom [label](../mixins/label.md) for InvenTree data | Yes |
| [Label Machine](./inventree_label_machine.md) | Custom [label](../mixins/label.md) for InvenTree data | Yes |
| [Label Sheet](./inventree_label_sheet.md) | Custom [label](../mixins/label.md) for InvenTree data | Yes |
| [LCSC](./lcsc.md) | LCSC barcode support | No |
| [Mouser](./mouser.md) | Mouser barcode support | No |
| [Parameter Exporter](./part_parameter_exporter.md) | Custom [exporter](../mixins/export.md) for part parameter data | Yes |
| [Part Notifications](./part_notifications.md) | Notifications for part changes | No |
| [TME](./tme.md) | TME barcode support | No |
### Plugin Table
In the admin center, the plugins table can be filtered to display only builtin plugins. This is done by selecting the "Builtin" filter in the table toolbar:
{{ image("filter_plugins.png", base="plugin/builtin", title="Builtin Plugin Filter") }}

View File

@ -0,0 +1,22 @@
---
title: InvenTree Barcode Plugin
---
## InvenTree Barcode Plugin
The **InvenTree Barcode Plugin** provides builtin barcode support for InvenTree products. It provides functionality for generating and scanning barcodes. It implements the [BarcodeMixin](../mixins/barcode.md) mixin to provide custom barcode support.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
This plugin provides selection of the barcode format to use when generating labels. The format can be selected from:
- **JSON Barcodes**: This format is used for generating barcodes in JSON format, which is a 'human readable' format.
- **Short Barcodes**: This format is used for generating barcodes in a short format, which is a more compact representation of the barcode data.
Additionally, if the "Short Barcodes" format is selected, the user can specify the prefix used for the barcode. This prefix is used to identify the barcode format, and can be set to any value. The default value is `INV-` - although can be changed.
{{ image("barcode_plugin_settings.png", base="plugin/builtin", title="Barcode Plugin Settings") }}

View File

@ -0,0 +1,29 @@
---
title: InvenTree Exporter Plugin
---
## InvenTree Exporter Plugin
The **InvenTree Exporter Plugin** provides basic data export functionality. It is the "default" export plugin, and can be used to export data from any tabulated dataset.
It utilizes the [ExporterMixin](../mixins/export.md) mixin to provide a general purpose export format for InvenTree data.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
This plugin has no configurable settings.
## Usage
To export table data using this plugin, first click the *Download Data* button in the table toolbar:
{{ image("download_data.png", base="plugin/builtin", title="Download Data") }}
Then, select the *InvenTree Exporter* plugin from the list of available plugins:
{{ image("select_exporter.png", base="plugin/builtin", title="Select Exporter") }}
Finally, select the desired export format and then click the *Export* button to download the data.

View File

@ -0,0 +1,25 @@
---
title: InvenTree Label Plugin
---
## InvenTree Label Plugin
The **InvenTree Label Plugin** provides a simple way to print labels for InvenTree products. The plugin utilizes the [label mixin](../mixins/label.md) to provide custom printing support.
When printing labels using this plugin, the labels are printed as PDF files which can be downloaded and printed using any PDF viewer.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
This plugin provides a "DEBUG" mode, which can be enabled in the plugin settings. This mode is intended for development and testing purposes only, and should not be used in production environments. In debug mode, the plugin will generate labels with raw HTML - which can be useful for debugging purposes. However, this mode may not produce valid PDF files, and should not be used for actual label printing.
{{ image("label_options.png", base="plugin/builtin", title="Label Options") }}
## Usage
To use this plugin, select the *InvenTreeLabel* option from the list of available plugins when printing labels. The plugin will generate a PDF file containing the labels for the selected products.
{{ image("label_select.png", base="plugin/builtin", title="Label Plugin") }}

View File

@ -0,0 +1,23 @@
---
title: InvenTree Label Machine Plugin
---
## InvenTree Label Machine Plugin
The **InvenTree Label Machine Plugin** provides support for printing labels using the [machines interface](../machines/overview.md) in InvenTree.
It allows labels to be printed directly to an external label printer, using the machines interface.
This plugin by itself does *not* provide connection to any specific label printer. Instead, it provides a generic interface for printing labels to any machine that is configured in InvenTree. A separate plugin is required to provide the actual connection to the label printer.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
This plugin has no configurable settings.
## Usage
When printing a label, select the *InvenTreeLabelMachine* option from the list of available plugins. Then, select the desired machine from the list of available machines.

View File

@ -0,0 +1,29 @@
---
title: InvenTree Label Sheet Plugin
---
## InvenTree Label Sheet Plugin
The **InvenTree Label Sheet Plugin** provides a custom label sheet format for InvenTree. This plugin utilizes the [label mixin](../mixins/label.md) to provide custom printing support.
When printing labels using this plugin, the labels are collated and printed on a single "sheet", in a regular grid format. This is useful for printing labels on standard label sheets.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
### Plugin Settings
This plugin provides a "DEBUG" mode, which can be enabled in the plugin settings. This mode is intended for development and testing purposes only, and should not be used in production environments. In debug mode, the plugin will generate labels with raw HTML - which can be useful for debugging purposes. However, this mode may not produce valid PDF files, and should not be used for actual label printing.
{{ image("label_sheet_options.png", base="plugin/builtin", title="Label Options") }}
## Usage
To use this plugin, select the *InvenTreeLabelSheet* option from the list of available plugins when printing labels. The plugin will generate a PDF file containing the labels for the selected products.
This plugin provides some additional options in the dialog for customizing the output.
{{ image("label_sheet_select.png", base="plugin/builtin", title="Label Sheet Plugin") }}

View File

@ -0,0 +1,19 @@
---
title: LCSC Barcode Plugin
---
## LCSC Barcode Plugin
The **LCSC Barcode Plugin** provides barcode support for [LCSC](https://lcsc.com/) products. When receiving items from LCSC, the barcode on the product can be scanned to automatically identify the product in InvenTree.
This plugin implements the [BarcodeMixin](../mixins/barcode.md) mixin to provide custom barcode support.
### Activation
This plugin is an *optional* plugin, and must be enabled in the InvenTree admin center.
### Plugin Settings
After activating the plugin, the user must specify which [supplier](../../purchasing/supplier.md) the plugin should be associated with. This is done by selecting the supplier from the dropdown list in the plugin settings:
{{ image("lcsc_plugin_settings.png", base="plugin/builtin", title="LCSC Plugin Settings") }}

View File

@ -0,0 +1,19 @@
---
title: Mouser Barcode Plugin
---
## Mouser Barcode Plugin
The **Mouser Barcode Plugin** provides barcode support for [Mouser](https://www.mouser.com/) products. When receiving items from Mouser, the barcode on the product can be scanned to automatically identify the product in InvenTree.
This plugin implements the [BarcodeMixin](../mixins/barcode.md) mixin to provide custom barcode support.
### Activation
This plugin is an *optional* plugin, and must be enabled in the InvenTree admin center.
### Plugin Settings
After activating the plugin, the user must specify which [supplier](../../purchasing/supplier.md) the plugin should be associated with. This is done by selecting the supplier from the dropdown list in the plugin settings:
{{ image("mouser_plugin_settings.png", base="plugin/builtin", title="Mouser Plugin Settings") }}

View File

@ -0,0 +1,21 @@
---
title: Notifications Plugin
---
## InvenTree Core Notifications
The **InvenTree Core Notifications** plugin provides a notification system for InvenTree. It allows users to receive notifications when certain events occur in the system.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
The following settings are available for the notifications plugin:
{{ image("notification_settings.png", base="plugin/builtin", title="Notification Settings") }}
## Usage
Configure the plugin to enable the desired notification types. The plugin will then send notifications to users when the specified events occur.

View File

@ -0,0 +1,23 @@
---
title: Part Notifications
---
## Part Notifications Plugin
The **Part Notifications Plugin** provides a notification system for part changes. It allows users to receive notifications when certain events occur on parts.
### Activation
This plugin is an *optional* plugin, and must be enabled in the InvenTree settings.
### Plugin Settings
This plugin has the following configurable settings:
{{ image("part_notification_settings.png", base="plugin/builtin", title="Part Notification Settings") }}
## Usage
To enable the part notifications plugin, the *Enable Event Integration* setting must be enabled in the InvenTree settings. This will allow the plugin to send notifications when certain events occur on parts.
{{ image("enable_events.png", base="plugin/builtin", title="Enable Events") }}

View File

@ -0,0 +1,25 @@
---
title: Part Parameter Exporter
---
## Part Parameter Exporter
The **Part Parameter Exporter** plugin provides custom export functionality for [Part Parameter](../../part/parameter.md) data.
It utilizes the [ExporterMixin](../mixins/export.md) mixin to provide a custom export format for part parameter data.
### Activation
This plugin is a *mandatory* plugin, and is always enabled.
### Plugin Settings
This plugin has no configurable settings.
## Usage
This plugin is used in the same way as the [InvenTree Exporter Plugin](./inventree_exporter.md), but provides a custom export format for part parameter data.
When exporting part parameter data, the *Part Parameter Exporter* plugin is available for selection in the export dialog. When selected, the plugin provides some additional export options to control the data export process.
{{ image("parameter_export_options.png", base="plugin/builtin", title="Part Parameter Export Options") }}

View File

@ -0,0 +1,19 @@
---
title: TME Barcode Plugin
---
## TME Barcode Plugin
The **TME Barcode Plugin** provides barcode support for [TME](http://tme.eu/) products. When receiving items from TME, the barcode on the product can be scanned to automatically identify the product in InvenTree.
This plugin implements the [BarcodeMixin](../mixins/barcode.md) mixin to provide custom barcode support.
### Activation
This plugin is an *optional* plugin, and must be enabled in the InvenTree admin center.
### Plugin Settings
After activating the plugin, the user must specify which [supplier](../../purchasing/supplier.md) the plugin should be associated with. This is done by selecting the supplier from the dropdown list in the plugin settings:
{{ image("tme_plugin_settings.png", base="plugin/builtin", title="TME Plugin Settings") }}

View File

@ -26,9 +26,7 @@ In certain container environments (such as docker), plugins are installed into a
!!! tip "Check Plugins on Startup"
Ensure the **Check Plugins on Startup** option is enabled, when running InvenTree in a container environment!
{% with id="check_plugins", url="plugin/check_on_startup.png", description="Check plugins on startup" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/check_on_startup.png", "Check plugins on startup") }}
### Installation Methods
@ -65,9 +63,7 @@ Installation via PIP (using the *plugins.txt* file) provides a number of advanta
Admin users can install plugins directly from the web interface, via the "Plugin Settings" view:
{% with id="plugin_install", url="plugin/plugin_install_web.png", description="Install via web interface" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/plugin_install_web.png", "Install plugin via web interface") }}
!!! success "Plugin File"
A plugin installed via the web interface is added to the [plugins.txt](#plugin-installation-file-pip) plugin file.

View File

@ -46,9 +46,8 @@ For models which provide this metadata field, access is also provided via the AP
For example:
{% with id="metadata_api", url="plugin/model_metadata_api.png", description="Access model metadata via API", maxheight="400px" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/model_metadata_api.png", "Access model metadata via API", maxheight="400px") }}
#### PUT vs PATCH

View File

@ -11,9 +11,7 @@ When a certain (server-side) event occurs, the background worker passes the even
!!! tip "Enable Event Integration"
The *Enable Event Integration* option must first be enabled to allow plugins to respond to events.
{% with id="events", url="plugin/enable_events.png", description="Enable event integration" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/enable_events.png", "Enable event integration") }}
## Events

View File

@ -21,9 +21,10 @@ Each plugin can dictate which datasets are supported using the `supports_export`
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
extra:
show_sources: True
The default implementation returns `True` for all data types.
@ -36,9 +37,10 @@ The `generate_filename` method constructs a filename for the exported file.
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
extra:
show_sources: True
### Adjust Columns
@ -49,9 +51,10 @@ The `update_headers` method allows the plugin to adjust the columns selected to
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
extra:
show_sources: True
### Queryset Filtering
@ -62,9 +65,10 @@ The `filter_queryset` method allows the plugin to provide custom filtering to th
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
extra:
show_sources: True
### Export Data
@ -75,9 +79,10 @@ The `export_data` method performs the step of transforming a [Django QuerySet]({
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
extra:
show_sources: True
Note that the default implementation simply uses the builtin tabulation functionality of the provided serializer class. In most cases, this will be sufficient.

View File

@ -112,9 +112,7 @@ To merge (combine) multiple labels into a single output (for example printing mu
If label printing plugins are enabled, they are able to be used directly from the InvenTree web interface:
{% with id="label_print", url="plugin/print_label_select_plugin.png", description="Print label via plugin" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/print_label_select_plugin.png", "Print label via plugin") }}
### App Integration

View File

@ -14,17 +14,13 @@ The possibilities are endless!
### Web Integration
{% with id="web_locate", url="plugin/web_locate.png", description="Locate stock item from web interface", maxheight="400px" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/web_locate.png", "Locate stock item from web interface", maxheight="400px") }}
### App Integration
If a locate plugin is installed and activated, the [InvenTree mobile app](../../app/index.md) displays a button for locating a StockItem or StockLocation (see below):
{% with id="app_locate", url="plugin/app_locate.png", description="Locate stock item from app", maxheight="400px" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/app_locate.png", "Locate stock item from app", maxheight="400px") }}
### Implementation

View File

@ -14,9 +14,7 @@ The ScheduleMixin class provides a plugin with the ability to call functions at
!!! tip "Enable Schedule Integration"
The *Enable Schedule Integration* option but be enabled, for scheduled plugin events to be activated.
{% with id="schedule", url="plugin/enable_schedule.png", description="Enable schedule integration" %}
{% include 'img.html' %}
{% endwith %}
{{ image("plugin/enable_schedule.png", "Enable schedule integration") }}
### SamplePlugin

View File

@ -21,9 +21,10 @@ The entrypoint for user interface plugins is the `UserInterfaceMixin` class, whi
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
extra:
show_sources: True
Note here that the `get_ui_features` calls other methods to extract the available features from the plugin, based on the requested feature type. These methods can be overridden to provide custom functionality.
@ -39,9 +40,10 @@ The `get_ui_features` method should return a list of `UIFeature` objects, which
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
summary: False
members: []
extra:
show_sources: True
Note that the *options* field contains fields which may be specific to a particular feature type - read the documentation below on each feature type for more information.
@ -76,7 +78,8 @@ The InvenTree dashboard is a collection of "items" which are displayed on the ma
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -89,7 +92,8 @@ The *options* field in the returned `UIFeature` object can contain the following
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -110,7 +114,8 @@ Many of the pages in the InvenTree web interface are built using a series of "pa
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -123,7 +128,8 @@ The *options* field in the returned `UIFeature` object can contain the following
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -144,7 +150,8 @@ The `get_ui_template_editors` feature type can be used to provide custom templat
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -157,7 +164,8 @@ The `get_ui_template_previews` feature type can be used to provide custom templa
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []

View File

@ -25,7 +25,8 @@ A custom plugin may implement the `validate_model_deletion` method to perform cu
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -40,7 +41,8 @@ Any plugin which inherits the `ValidationMixin` can implement the `validate_mode
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -113,7 +115,8 @@ If the custom method determines that the part name is *objectionable*, it should
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -126,7 +129,8 @@ Validation of the Part IPN (Internal Part Number) field is exposed to custom plu
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -139,7 +143,8 @@ Validation of the Part IPN (Internal Part Number) field is exposed to custom plu
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -156,7 +161,8 @@ The `validate_batch_code` method allows plugins to raise an error if a batch cod
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -169,7 +175,8 @@ The `generate_batch_code` method can be implemented to generate a new batch code
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -188,7 +195,8 @@ Custom serial number validation can be implemented using the `validate_serial_nu
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -227,7 +235,8 @@ A custom plugin can implement the `convert_serial_to_int` method to determine ho
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []
@ -245,7 +254,8 @@ For custom serial number schemes, it is important to provide a method to generat
show_bases: False
show_root_heading: False
show_root_toc_entry: False
show_sources: True
extra:
show_sources: True
summary: False
members: []

View File

@ -11,9 +11,7 @@ A manufacturer is an external **producer** of parts and raw materials.
To access the list of manufacturers , click on the <span class="badge inventree nav main">{{ icon("shopping-cart") }} Buy</span> navigation tab and click on <span class="badge inventree nav main">{{ icon("building-factory-2") }} Manufacturers</span> option in the dropdown list.
{% with id="manufacturer_list", url="order/manufacturer_list.png", description="Manufacturer List" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/manufacturer_list.png", "Manufacturer List") }}
### Add Manufacturer

View File

@ -10,9 +10,7 @@ Purchase orders allow to track which parts are bought from suppliers and manufac
To navigate to the Purchase Order display, select *Purchasing* from the main navigation menu, and *Build Orders* from the sidebar:
{% with id="purchase_order_display", url="order/po_display.png", description="Purchase Order Display" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/po_display.png", "Purchase Order Display") }}
The following view modes are available:
@ -20,17 +18,13 @@ The following view modes are available:
*Table View* provides a list of Purchase Orders, which can be filtered to display a subset of orders according to user supplied parameters.
{% with id="purchase_order_list", url="order/po_list.png", description="Purchase Order List" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/po_list.png", "Purchase Order List") }}
#### Calendar View
*Calendar View* shows a calendar display with outstanding purchase orders, based on the various dates specified for each order.
{% with id="purchase_order_calendar", url="order/po_calendar.png", description="Purchase Order Calendar" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/po_calendar.png", "Purchase Order Calendar") }}
### Purchase Order Status Codes
@ -159,21 +153,15 @@ Duplicating a Purchase Order allows the user to quickly create a new *copy* of a
To duplicate an existing order, select the *Duplicate Order* action from the menu in the top-right of the screen (as shown below):
{% with id="purchase_order_duplicate", url="order/po_duplicate.png", description="Duplicate Purchase Order" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/po_duplicate.png", "Duplicate Purchase Order") }}
This opens the following dialog, where you can adjust the parameters of the new order before proceeding to actually create the new order. You can see in the screenshot below that some extra options are provided in this form, to control duplication of individual line items.
{% with id="purchase_order_duplicate_2", url="order/po_duplicate_2.png", description="Duplicate Purchase Order" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/po_duplicate_2.png", "Duplicate Purchase Order") }}
A new purchase order is then created based on the currently selected order:
{% with id="purchase_order_duplicate_3", url="order/po_duplicate_3.png", description="Duplicate Purchase Order" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/po_duplicate_3.png", "Duplicate Purchase Order") }}
## Order Scheduling

View File

@ -9,9 +9,7 @@ A supplier is an external **vendor** of parts and raw materials.
To access the supplier page, click on the <span class="badge inventree nav main">{{ icon("shopping-cart") }} Buy</span> navigation tab and click on <span class="badge inventree nav main">{{ icon("building") }} Suppliers</span> option in the dropdown list.
{% with id="supplier_list", url="order/supplier_list.png", description="Supplier List" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/supplier_list.png", "Supplier List") }}
!!! info
**Viewing**, **adding**, **editing** and **deleting** suppliers require the corresponding [Purchase Orders user permissions](../settings/permissions.md)
@ -56,15 +54,11 @@ Supplier parts can be individually disabled - for example, if a supplier part is
The "active" status of a supplier part is clearly visible within the user interface:
{% with id="supplier_part_disable", url="order/disable_supplier_part.png", description="Disable Supplier Part" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/disable_supplier_part.png", "Disable Supplier Part") }}
To change the "active" status of a supplier part, simply edit the supplier part details and set the `active` attribute:
{% with id="supplier_part_disable_edit", url="order/disable_supplier_part_edit.png", description="Disable Supplier Part" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/disable_supplier_part_edit.png", "Disable Supplier Part Edit") }}
It is recommended to disable a supplier part rather than deleting it, as this will preserve the integrity of historical data.
@ -82,15 +76,11 @@ A custom can periodically request availability information (via a supplier API),
If provided, availability information is displayed on the Supplier Part detail page.
{% with id="supplier_part_availability", url="order/supplier_part_availability.png", maxheight="240px", description="Supplier part availability" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/supplier_part_availability.png", "Supplier Part Availability") }}
Availability information can be manually updated via the user interface:
{% with id="update_availability", url="order/update_availability.png", maxheight="240px", description="Update availability" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/update_availability.png", "Update Availability") }}
## Supplier Part Pack Size

View File

@ -39,19 +39,11 @@ Related Part denotes a relationship between two parts, when users want to show t
- Ability to add relationships between parts through both main and admin interfaces
- Can only manage relationship if user has "change" permission on Part ruleset
#### Example View
{% with id="related_parts_example", url="https://user-images.githubusercontent.com/4020546/96306587-8f2d0b80-0fc5-11eb-8fdb-20cb2dabfcc6.png", description="Related Parts Example View" %}
{% include 'img.html' %}
{% endwith %}
### InvenTree "Global" Settings
Global settings control the default value of fields across the entire web interface, for all-users.
!!! TODO
More information to come soon
Also, dedicated settings sections were added for:
- Category
@ -72,32 +64,6 @@ Added support for configuring parameter templates defined by categories.
* User can now setup a list of parameter templates for each (or all) part category(ies) in InvenTree settings
* During part creation, part parameters are automatically created using the list of parameter templates from the parent category it belongs to (if option is enabled)
#### Screenshots
* Select category
{% with id="related_parts_example", url="https://user-images.githubusercontent.com/4020546/98037571-c2ef9a00-1de9-11eb-96a1-542b18cdda7e.png", description="Select Category" %}
{% include 'img.html' %}
{% endwith %}
* Add parameter template
{% with id="related_parts_example", url="https://user-images.githubusercontent.com/4020546/98145792-1cfb6880-1e99-11eb-82eb-c96d1ba9541a.png", description="Add Parameter Template" %}
{% include 'img.html' %}
{% endwith %}
* Control global behavior within part settings
{% with id="related_parts_example", url="https://user-images.githubusercontent.com/4020546/98130420-39db7000-1e88-11eb-9ca0-78370e19ccdd.png", description="Global Settings For Category Templates" %}
{% include 'img.html' %}
{% endwith %}
* Control instance behavior during part creation
{% with id="related_parts_example", url="https://user-images.githubusercontent.com/4020546/98130496-4f509a00-1e88-11eb-9239-4dc215cbc620.png", description="Instance Settings For Category Templates" %}
{% include 'img.html' %}
{% endwith %}
### Currency Support
A more comprehensive implementation of Currency support has been implemented.

View File

@ -19,10 +19,6 @@ title: Release 0.1.8
### Global Setting for Part IPN Edit
[#1400](https://github.com/inventree/InvenTree/pull/1400) adds the ability to disable IPN field when editing part information for **all** parts and **all** users. This global setting is located in the "Part" section of the InvenTree settings. Toggling it off means the IPN field cannot be edited manually anymore after a part is created (the field is greyed out). Only admin users retain the ability to edit this field.
{% with id="disable_ipn_edit", url="part/part_ipn_editing.png", description="Disable Edit of Part IPN Field" %}
{% include 'img.html' %}
{% endwith %}
### Image Download
[#1410](https://github.com/inventree/InvenTree/pull/1410) introduces a new feature which allows thumbnail images (e.g. for *Part* and *Company* objects) to be downloaded from a remote URL (by the server). This feature is disabled by default, and must be enabled in the *Global Settings* menu.

View File

@ -119,15 +119,11 @@ To render a QR code, use the `qrcode` template tag:
which produces the following output:
{% with id="qrcode", url="report/qrcode.png", description="QR Code" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/qrcode.png", "QR Code") }}
!!! tip "Documentation"
Refer to the [qrcode library documentation](https://pypi.org/project/qrcode/) for more information
## Data Matrix
!!! info "ppf.datamatrix"
@ -173,6 +169,4 @@ which produces the following output:
which produces the following output:
{% with id="datamatrix", url="report/datamatrix.png", description="Datamatrix barcode" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/datamatrix.png", "Data Matrix") }}

View File

@ -57,9 +57,7 @@ Report and label templates can be created (and edited) via the [admin interface]
Select the type of template you are wanting to create (a *Report Template* or *Label Template*) and press the *Add* button in the top right corner:
{% with id="report-list", url="report/report_template_admin.png", description="Report templates in admin interface" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/report_template_admin.png", "Report template admin") }}
!!! tip "Staff Access Only"
Only users with staff access can upload or edit report template files.
@ -84,9 +82,7 @@ The filename pattern used to generate the output `.pdf` file. Defaults to "repor
The filename pattern allows custom rendering with any context variables which are available to the report. For example, a test report for a particular [Stock Item](../stock/index.md#stock-item) can use the part name and serial number of the stock item when generating the report name:
{% with id="report-filename-pattern", url="report/filename_pattern.png", description="Report filename pattern" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/filename_pattern.png", "Report filename pattern") }}
### Template Filters
@ -95,15 +91,11 @@ Each template instance provides a *filters* field, which can be used to filter w
As an example, let's say that a certain `StockItem` report should only be generated for "trackable" stock items. A filter could easily be constructed to accommodate this, by limiting available items to those where the associated [Part](../part/index.md) is *trackable*:
{% with id="report-filter-valid", url="report/filters_valid.png", description="Report filter selection" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/filters_valid.png", "Report filter selection") }}
If you enter an invalid option for the filter field, an error message will be displayed:
{% with id="report-filter-invalid", url="report/filters_invalid.png", description="Invalid filter selection" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/filters_invalid.png", "Report filter error") }}
!!! warning "Advanced Users"
Report filtering is an advanced topic, and requires a little bit of knowledge of the underlying data structure!
@ -116,9 +108,7 @@ A JSON field made available to any [plugins](../plugins/index.md) - but not used
A number of global reporting options are available for customizing InvenTree reports:
{% with id="report-options", url="report/report.png", description="Report Options" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/report.png", "Report options") }}
### Enable Reports

View File

@ -19,9 +19,7 @@ A label template is a single `.html` file which is uploaded to the InvenTree ser
Below is a reasonably simple example of a label template which demonstrates much of the available functionality. The template code shown below will produce the following label:
{% with id="label_example", url="report/label_example.png", description="Example label" %}
{% include 'img.html' %}
{% endwith %}
{{ image("report/label_example.png", "Example label") }}
```html
{% raw %}

View File

@ -13,9 +13,7 @@ Return Orders allow stock items (which have been sold or allocated to a customer
To navigate to the Return Order display, select *Sales* from the main navigation menu, and *Return Orders* from the sidebar:
{% with id="return_order_display", url="order/ro_display.png", description="Return Order Display" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/ro_display.png", "Return Order Display") }}
The following view modes are available:
@ -23,31 +21,23 @@ The following view modes are available:
*Table View* provides a list of Return Orders, which can be filtered to display a subset of orders according to user supplied parameters.
{% with id="purchase_order_list", url="order/po_list.png", description="Return Order List" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/ro_list.png", "Return Order List") }}
#### Calendar View
*Calendar View* shows a calendar display with outstanding return orders, based on the various dates specified for each order.
{% with id="return_order_calendar", url="order/ro_calendar.png", description="Return Order Calendar" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/ro_calendar.png", "Return Order Calendar") }}
### Enable Return Order Functionality
By default, Return Order functionality is not enabled - it must be enabled by a *staff* user from the settings page:
{% with id="enable-return-order", url="order/return_order_enable.png", description="Enable Return Orders" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/return_order_enable.png", "Enable Return Orders") }}
Once this setting is enabled, you can access the "Return Orders" page from the main navigation bar:
{% with id="return-order-navbar", url="order/return_order_navbar.png", description="Access Return Orders" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/return_order_navbar.png", "Access return orders") }}
### Return Order Permissions
@ -57,9 +47,7 @@ Once this setting is enabled, you can access the "Return Orders" page from the m
A list of Return Orders is displayed on the *Return Order* index page:
{% with id="return-order-index", url="order/return_order_index.png", description="Return Order Index" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/return_order_index.png", "Return Order Index") }}
Various filters are available to configure which orders are displayed, and how they are arranged.
@ -98,9 +86,7 @@ A Return Order is linked to a specific customer, which can be selected from the
!!! warning "Customers Only"
Only companies with the "Customer" attribute enabled will be shown and can be selected
{% with id="return-order-create", url="order/return_order_create.png", description="Return Order Create" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/return_order_create.png", "Create Return Order") }}
Fill in the rest of the form with the return order information, and then click on <span class='badge inventree confirm'>Submit</span> to create the order.
@ -116,9 +102,7 @@ The order can be assigned to a responsible *owner*, which is either a user or gr
Individual Return Orders can be viewed via the Return Order detail page:
{% with id="return-order-detail", url="order/return_order_detail.png", description="Return Order Detail" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/return_order_detail.png", "Return Order Detail") }}
Here the details of the return order are available, and specific actions can be performed:

View File

@ -10,9 +10,7 @@ Sales orders allow tracking of which stock items are sold to customers, therefor
To navigate to the Sales Order display, select *Sales* from the main navigation menu, and *Sales Orders* from the sidebar:
{% with id="sales_order_display", url="order/so_display.png", description="Sales Order Display" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/so_display.png", "Sales Order display") }}
The following view modes are available:
@ -20,17 +18,13 @@ The following view modes are available:
*Table View* provides a list of Sales Orders, which can be filtered to display a subset of orders according to user supplied parameters.
{% with id="sales_order_list", url="order/so_list.png", description="Sales Order List" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/so_list.png", "Sales Order list") }}
#### Calendar View
*Calendar View* shows a calendar display with outstanding sales orders.
{% with id="sales_order_calendar", url="order/so_calendar.png", description="Sales Order Calendar" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/so_calendar.png", "Sales Order calendar") }}
### Sales Order Status Codes
@ -167,9 +161,7 @@ The *Pending Shipments* panel displays the shipments which have not yet been sen
- Pending sales order items can be allocated to these shipments
- New shipments can be created if the order is still open
{% with id="pending-shipments", url="order/pending_shipments.png", description="Pending shipments" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/pending_shipments.png", "Pending shipments") }}
#### Creating a new Shipment
@ -179,15 +171,11 @@ To create a new shipment for a sales order, press the *New Shipment* button abov
To complete a shipment, press the *Complete Shipment* button associated with the particular shipment:
{% with id="complete-shipment", url="order/complete_shipment.png", description="Complete shipment" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/complete_shipment.png", "Complete shipment") }}
### Completed Shipments
{% with id="completed-shipments", url="order/completed_shipments.png", description="Completed shipments" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/completed_shipments.png", "Completed shipments") }}
### Shipment Data
@ -211,9 +199,7 @@ An optional URL field which can be used to provide a link to an external URL.
All these fields can be edited by the user:
{% with id="edit-shipment", url="order/edit_shipment.png", description="Edit shipment" %}
{% include "img.html" %}
{% endwith %}
{{ image("order/edit_shipment.png", "Edit shipment") }}
## Sales Order Settings

View File

@ -36,9 +36,7 @@ There are two variables in the configuration file which define the operation of
In the example below, SSO provider modules are activated for *google*, *github* and *microsoft*. Specific configuration options are specified for the *microsoft* provider module:
{% with id="SSO", url="settings/sso_config.png", description="SSO Config" %}
{% include 'img.html' %}
{% endwith %}
{{ image("settings/sso_config.png", "SSO Config") }}
!!! info "Provider Module Format"
Note that the provider modules specified in `social_backends` must be prefixed with `allauth.socialaccounts.providers`
@ -69,17 +67,13 @@ Once your external SSO app has been created, you need to create a new *SocialAcc
In the admin interface, select *Add Social Application*
{% with id="social-add", url="settings/social_account_add.png", description="Add Social Application" %}
{% include 'img.html' %}
{% endwith %}
{{ image("settings/social_account_add.png", "Add Social Application") }}
#### Configure Social Application
Configure the social application entry with the app details:
{% with id="social-configure", url="settings/social_application_configure.png", description="Configure Social Application" %}
{% include 'img.html' %}
{% endwith %}
{{ image("settings/social_application_configure.png", "Configure Social Application") }}
- Select the *provider* type as required
- Provide a *name* for the application (note that this should match the *name* used for any custom settings provided in the configuration file)
@ -117,16 +111,12 @@ Now that the social application is created, you need to enable SSO authenticatio
In the [settings screen](./global.md), navigate to the *Login Settings* panel. Here you will see the required configuration options to enable SSO:
{% with id="sso-settings", url="settings/sso_settings.png", description="SSO Settings" %}
{% include 'img.html' %}
{% endwith %}
{{ image("settings/sso_settings.png", "SSO Settings") }}
| Setting | Description |
| --- | --- |
| Enable SSO | Enable this option to allow single sign on for user login |
| Enable SSO registration | Allow users to self-register with SSO |
| Auto-fill SSO users | Automatically fill out user account data with information provided by external SSO app |
| Allowed domains | Optionally restrict user registration to certain domains |
| Name | Description | Default | Units |
| ---- | ----------- | ------- | ----- |
{{ globalsetting("LOGIN_ENABLE_SSO") }}
{{ globalsetting("LOGIN_SIGNUP_SSO_AUTO") }}
### Configure Email
@ -136,12 +126,12 @@ Note that [email settings](./email.md) must be correctly configured before SSO w
InvenTree has the ability to synchronize groups assigned to each user directly from the IdP. To enable this feature, navigate to the *Login Settings* panel in the [settings screen](./global.md) first. Here, the following options are available:
| Setting | Description |
| --- | --- |
| Enable SSO group sync | Enable synchronizing InvenTree groups with groups provided by the IdP |
| SSO group key | The name of the claim containing all groups, e.g. `groups` or `roles` |
| SSO group map | A mapping from SSO groups to InvenTree groups as JSON, e.g. `{"/inventree/admins": "admin"}`. If the mapped group does not exist once a user signs up, a new group without assigned permissions will be created. |
| Remove groups outside of SSO | Whether groups should be removed from the user if they are not present in the IdP data |
| Name | Description | Default | Units |
| ---- | ----------- | ------- | ----- |
{{ globalsetting("LOGIN_ENABLE_SSO_GROUP_SYNC") }}
{{ globalsetting("SSO_GROUP_KEY") }}
{{ globalsetting("SSO_GROUP_MAP") }}
{{ globalsetting("SSO_REMOVE_GROUPS") }}
!!! warning "Remove groups outside of SSO"
Disabling this feature might cause security issues as groups that are removed in the IdP will stay assigned in InvenTree

View File

@ -47,9 +47,7 @@ To access the admin interface, select the "Admin" option from the drop-down user
An administration panel will be presented as shown below:
{% with id="admin", url="admin/admin.png", description="InvenTree Admin Panel" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/admin.png", "Admin panel") }}
!!! info "Admin URL"
To directly access the admin interface, append /admin/ to the InvenTree site URL - e.g. http://localhost:8000/admin/
@ -58,9 +56,7 @@ An administration panel will be presented as shown below:
Database objects can be listed and filtered directly. The image below shows an example of displaying existing part categories.
{% with id="part_cats", url="admin/part_cats.png", description="Display part categories" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/part_cats.png", "Part categories") }}
!!! info "Permissions"
A "staff" account does not necessarily provide access to all administration options, depending on the roles assigned to the user.
@ -69,14 +65,10 @@ Database objects can be listed and filtered directly. The image below shows an e
Some admin views support filtering of results against specified criteria. For example, the list of Part objects can be filtered as follows:
{% with id="filter", url="admin/filter.png", description="Filter part list" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/filter.png", "Filter part list") }}
#### Edit Database Objects
Individual database objects can be edited directly in the admin interface. The image below shows an example of editing a Part object:
{% with id="edit_part", url="admin/edit_part.png", description="Edit Part object" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/edit_part.png", "Edit part") }}

View File

@ -8,6 +8,4 @@ InvenTree provides data export functionality for a variety of data types. Most d
In the top right corner of the table, click the "Export Data" button to export the data in the table.
{% with id="export", url="admin/export.png", description="Export data" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/export.png", "Export data") }}

View File

@ -25,8 +25,11 @@ Configuration of basic server settings:
{{ globalsetting("INVENTREE_COMPANY_NAME") }}
{{ globalsetting("INVENTREE_INSTANCE") }}
{{ globalsetting("INVENTREE_INSTANCE_TITLE") }}
{{ globalsetting("INVENTREE_INSTANCE_ID") }}
{{ globalsetting("INVENTREE_ANNOUNCE_ID") }}
{{ globalsetting("INVENTREE_RESTRICT_ABOUT") }}
{{ globalsetting("DISPLAY_FULL_NAMES") }}
{{ globalsetting("DISPLAY_PROFILE_INFO") }}
{{ globalsetting("INVENTREE_UPDATE_CHECK_INTERVAL") }}
{{ globalsetting("INVENTREE_DOWNLOAD_FROM_URL") }}
{{ globalsetting("INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE") }}
@ -101,6 +104,8 @@ Configuration of pricing data and currency support:
| ---- | ----------- | ------- | ----- |
{{ globalsetting("INVENTREE_DEFAULT_CURRENCY") }}
{{ globalsetting("CURRENCY_CODES") }}
{{ globalsetting("CURRENCY_UPDATE_PLUGIN") }}
{{ globalsetting("CURRENCY_UPDATE_INTERVAL") }}
{{ globalsetting("PRICING_DECIMAL_PLACES_MIN") }}
{{ globalsetting("PRICING_DECIMAL_PLACES") }}
{{ globalsetting("PRICING_UPDATE_DAYS") }}
@ -131,6 +136,15 @@ Configuration of report generation:
{{ globalsetting("REPORT_DEBUG_MODE") }}
{{ globalsetting("REPORT_LOG_ERRORS") }}
### Label Printing
Configuration of label printing:
| Name | Description | Default | Units |
| ---- | ----------- | ------- | ----- |
{{ globalsetting("LABEL_ENABLE") }}
{{ globalsetting("LABEL_DPI") }}
### Parts
| Name | Description | Default | Units |
@ -226,3 +240,7 @@ Refer to the [return order settings](../sales/return_order.md#return-order-setti
{{ globalsetting("ENABLE_PLUGINS_SCHEDULE") }}
{{ globalsetting("ENABLE_PLUGINS_EVENTS") }}
{{ globalsetting("ENABLE_PLUGINS_INTERFACE") }}
### Project Codes
Refer to the [project code settings](../concepts/project_codes.md).

View File

@ -41,17 +41,13 @@ The following steps outline the process of importing data into InvenTree:
An import session can be created via the methods outlined above. The first step is to create an import session, and upload the data file to import. Note that depending on the context of the data import, the user may have to select the database model to import data into.
{% with id="import-create", url="admin/import_session_create.png", description="Create import session" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/import_session_create.png", "Create import session") }}
### Map Data Fields
Next, the user must map the data fields in the uploaded file to the fields in the database model. This is a critical step, as the data fields must be correctly matched to the database fields.
{% with id="import-map", url="admin/import_session_map.png", description="Map data fields" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/import_session_map.png", "Map data fields") }}
The InvenTree server will attempt to automatically associate the data fields in the uploaded file with the database fields. However, the user may need to manually adjust the field mappings to ensure that the data is imported correctly.
@ -65,9 +61,7 @@ Note that this process may take some time if the data file is large. The import
Once the data has been loaded into the import session, the user can process the data. This step will attempt to validate the data, and check for any errors or issues that may prevent the data from being imported.
{% with id="import-process", url="admin/import_session_process.png", description="Process data" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/import_session_process.png", "Process data") }}
Note that each row must be selected and confirmed by the user before it is actually imported into the database. Any errors which are detected will be displayed to the user, and the user can choose to correct the data and re-process it.

View File

@ -8,18 +8,15 @@ Any critical server error logs are recorded to the database, and can be viewed b
In the admin interface, select the "Errors" view:
{% with id="admin_error_link", url="admin/admin_errors_link.png", description="Admin errors" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/admin_errors_link.png", "Admin errors") }}
!!! info "URL"
Alternatively, navigate to the error list view at /admin/error_report/error/
A list of error logs is presented.
{% with id="admin_error_logs", url="admin/admin_errors.png", description="Error logs" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/admin_errors.png", "Error logs") }}
!!! info "Deleting Logs"
Error logs should be deleted periodically

View File

@ -35,9 +35,7 @@ InvenTree functionality is split into a number of distinct roles. A group will h
- **Sales Order** - The *sales* role is related to accessing Sales Order data
- **Return Order** - The *return* role is related to accessing Return Order data
{% with id="Roles Admin View", url="admin/roles.png", description="Roles" %}
{% include 'img.html' %}
{% endwith %}
{{ image("admin/roles.png", "Roles") }}
### Role Permissions

View File

@ -10,25 +10,23 @@ The various user settings described below can be configured for an individual us
The *Account Settings* screen shows configuration options for your user account, including linking [third party logins](./SSO.md) and [multi factor authentication](./MFA.md):
{% with id="user-account", url="settings/user_account.png", description="User Account Settings" %}
{% include 'img.html' %}
{% endwith %}
{{ image("settings/user_account.png", "User Account Settings") }}
### Display Settings
The *Display Settings* screen shows general display configuration options. Additionally, this screen allows the user to select the primary language in which InvenTree is displayed.
The *Display Settings* screen shows general display configuration options:
{% with id="user-display", url="settings/user_display.png", description="User Display Settings" %}
{% include 'img.html' %}
{% endwith %}
### Home Page
This screen allows the user to customize display of items on the InvenTree home page.
{% with id="user-home", url="settings/user_home.png", description="Home Page Settings" %}
{% include 'img.html' %}
{% endwith %}
| Name | Description | Default | Units |
| ---- | ----------- | ------- | ----- |
{{ usersetting("ICONS_IN_NAVBAR") }}
{{ usersetting("STICKY_HEADER") }}
{{ usersetting("DATE_DISPLAY_FORMAT") }}
{{ usersetting("FORMS_CLOSE_USING_ESCAPE") }}
{{ usersetting("PART_SHOW_QUANTITY_IN_FORMS") }}
{{ usersetting("DISPLAY_SCHEDULE_TAB") }}
{{ usersetting("DISPLAY_STOCKTAKE_TAB") }}
{{ usersetting("TABLE_STRING_MAX_LENGTH") }}
{{ usersetting("ENABLE_LAST_BREADCRUMB") }}
### Search Settings

View File

@ -54,10 +54,6 @@ When performing an update of your InvenTree installation - via either [docker](.
If desired, InvenTree can be configured to perform automated daily backups. The run-time setting to control this is found in the *Server Configuration* tab.
{% with id="auto-backup", url="start/auto-backup.png", description="Automatic daily backup" %}
{% include 'img.html' %}
{% endwith %}
!!! tip "Optional Feature"
Automated backup is disabled by default, and must be enabled by an admin user

View File

@ -8,41 +8,31 @@ InvenTree provides simple yet powerful management of stock levels. Multiple stoc
Stock adjustments can be accessed in any stock items table using the "Stock Options" dropdown entries:
{% with id="stock_options", url="stock/stock_options.png", description="Stock Options" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/stock_options.png", "Stock Options") }}
### Move Stock
Multiple stock items can be moved to a new location in a single operation. Each item is moved to the selected location, and a stock tracking entry is added to the stock item history.
{% with id="stock_move", url="stock/stock_move.png", description="Stock movement" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/stock_move.png", "Stock Move") }}
### Add Stock
Add parts to a stock item record - for example putting parts back into stock. The in-stock quantity for each selected item is increased by the given amount.
{% with id="stock_add", url="stock/stock_add.png", description="Stock addition" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/stock_add.png", "Stock Add") }}
### Remove Stock
Remove parts from a stock item record - for example taking parts from stock for use. The in-stock quantity for each selected item is decreased by the given amount.
{% with id="stock_remove", url="stock/stock_remove.png", description="Stock removal" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/stock_remove.png", "Stock Remove") }}
### Count Stock
Count stock items (stocktake) to record the number of items in stock at a given point of time. The quantity for each part is pre-filled with the current quantity based on stock item history.
{% with id="stock_count", url="stock/stock_count.png", description="Stock count" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/stock_count.png", "Stock Count") }}
### Merge Stock
@ -72,8 +62,6 @@ To merge stock items, check two or more items in a stock table and click on the
In the Merge Stock Items form, user can decide to allow mismatched suppliers or status to be merged together (disabled by default).
{% with id="stock_item_merge", url="stock/stock_item_merge.png", description="Stock Item Merge" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/stock_item_merge.png", "Stock Item Merge") }}
Select the location for the new stock item and confirm the merge, then click on <span class="badge inventree confirm">Submit</span> to process the merge.

View File

@ -8,9 +8,8 @@ InvenTree supports stock expiration dates, which allows individual stock items t
The stock expiry feature is disabled by default, and must be enabled via the settings menu:
{% with id="stock_expiry", url="stock/enable_stock_expiry.png", description="Enable stock expiry feature" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/enable_stock_expiry.png", title="Enable stock expiry feature") }}
!!! info "Non Expiring Stock"
If a Stock Item is not expected to expire, leave the expiry date field blank, or zero
@ -19,29 +18,21 @@ The stock expiry feature is disabled by default, and must be enabled via the set
When creating a new stock item, the expiry date can be manually set by the user.
{% with id="expiry_create", url="stock/expiry_date_create.png", description="Add expiry date" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/expiry_date_create.png", title="Add expiry date") }}
If an expiry date is defined for a particular stock item, it will be displayed on the detail page. If the expiry date has passed (and the stock item is *expired*) then this will also be indicated.
{% with id="item_expired", url="stock/item_expired.png", description="Display expiry date" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/item_expired.png", title="Display expiry date") }}
The expiry date can be adjusted in the stock item edit form.
{% with id="expiry_edit", url="stock/expiry_date_edit.png", description="Edit expiry date" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/expiry_date_edit.png", title="Edit expiry date") }}
### Filter Expired Stock
The various stock display tables can be filtered by *expired* status, and also display a column for the expiry date for each stock item.
{% with id="stock_table_expiry", url="stock/stock_table_expiry.png", description="Filter by stock expiry" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/stock_table_expiry.png", title="Filter by stock expiry") }}
### Index Page
@ -58,20 +49,14 @@ For example, if a Part has a default expiry time of 30 days, then any Stock Item
If a Part has a non-zero default expiry time, it will be displayed on the Part details page
{% with id="part_expiry_display", url="stock/part_expiry_display.png", description="Part expiry" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/part_expiry_display.png", title="Display part expiry") }}
The Part expiry time can be altered using the Part editing form.
{% with id="part_expiry_edit", url="stock/part_expiry.png", description="Edit part expiry" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/part_expiry.png", title="Edit part expiry") }}
## Sales and Build Orders
By default, expired Stock Items cannot be added to neither a Sales Order nor a Build Order. This behavior can be adjusted using the *Sell Expired Stock* and *Build Expired Stock* settings:
{% with id="sell_build_expired", url="stock/sell_build_expired_stock.png", description="Sell Build Expired Stock" %}
{% include 'img.html' %}
{% endwith %}
{{ image("stock/sell_build_expired_stock.png", title="Sell and build expired stock") }}

Some files were not shown because too many files have changed in this diff Show More