diff --git a/docs/_includes/overrides/404.html b/docs/_includes/overrides/404.html index e0eae12040..ad8652cfa0 100644 --- a/docs/_includes/overrides/404.html +++ b/docs/_includes/overrides/404.html @@ -20,8 +20,7 @@

- - Page not found + Page not found

diff --git a/docs/_includes/overrides/home.html b/docs/_includes/overrides/home.html index 48b4a89f23..b5bcdedb40 100644 --- a/docs/_includes/overrides/home.html +++ b/docs/_includes/overrides/home.html @@ -7,7 +7,7 @@ {% block content %} -{{ page.content }} + +

InvenTree - Intuitive Inventory Management

+
@@ -24,24 +26,24 @@
- + {{ page.content }} {% endblock content %} diff --git a/docs/_includes/release_table.html b/docs/_includes/release_table.html index 33dea37fa5..51658455e2 100644 --- a/docs/_includes/release_table.html +++ b/docs/_includes/release_table.html @@ -4,10 +4,10 @@ - - - - + + + + diff --git a/docs/docs/api/browse.md b/docs/docs/api/browse.md index f1c04a6118..8fe50ef280 100644 --- a/docs/docs/api/browse.md +++ b/docs/docs/api/browse.md @@ -4,7 +4,7 @@ title: Interactive API ## Interactive API -If the server is running in [Debug Mode](../start/intro.md#debug-mode) then an interactive version of the API is available using a browser. +If the server is running in [Debug Mode](../start/index.md#debug-mode) then an interactive version of the API is available using a browser. !!! info "Debug Mode" This interactive API is only available when running the server in debug mode diff --git a/docs/docs/api/bulk_delete.md b/docs/docs/api/bulk_delete.md index 9c7f9c6f01..160549385c 100644 --- a/docs/docs/api/bulk_delete.md +++ b/docs/docs/api/bulk_delete.md @@ -6,7 +6,7 @@ title: Bulk Deletion While deleting items individually via the API is supported, it can prove inefficient (time consuming) when multiple items are to be deleted sequentially. -For example, if the user wishes to delete a large number items (such as lines from a [Bill of Materials](../build/bom.md)), these items are deleted sequentially, with each `DELETE` separate request requiring network transfer, database access, cleanup, etc. +For example, if the user wishes to delete a large number items (such as lines from a [Bill of Materials](../manufacturing/bom.md)), these items are deleted sequentially, with each `DELETE` separate request requiring network transfer, database access, cleanup, etc. A much more efficient approach is to allow for "bulk deletion" of multiple database items in a single transaction. This means that only one network request is required, and only a single database access request. diff --git a/docs/docs/api/api.md b/docs/docs/api/index.md similarity index 100% rename from docs/docs/api/api.md rename to docs/docs/api/index.md diff --git a/docs/docs/api/metadata.md b/docs/docs/api/metadata.md index 48a0dca5d7..c89e31a8be 100644 --- a/docs/docs/api/metadata.md +++ b/docs/docs/api/metadata.md @@ -4,7 +4,7 @@ title: Model Metadata ## Model Metadata -The API is *self describing* in that it provides metadata about the various fields available at any given endpoint. External applications (such as the [python interface](../api/python/python.md)) can introspect the API to determine information about the model fields. +The API is *self describing* in that it provides metadata about the various fields available at any given endpoint. External applications (such as the [python interface](../api/python/index.md)) can introspect the API to determine information about the model fields. !!! tip "API Forms" The various forms implemented in the InvenTree web interface make heavy use of this metadata feature @@ -13,7 +13,7 @@ The API is *self describing* in that it provides metadata about the various fiel To request metadata about a particular API endpoint, simply perform an `OPTIONS` method request against the API URL. -For example, to view the metadata available for creating a new [Part Category](../part/part.md#part-category), an `OPTIONS` request to `/api/part/category/` yields: +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' %} diff --git a/docs/docs/api/python/currency.md b/docs/docs/api/python/currency.md index f609190b8d..93884bfa4d 100644 --- a/docs/docs/api/python/currency.md +++ b/docs/docs/api/python/currency.md @@ -6,7 +6,7 @@ title: Python Currency Support InvenTree provides native support for multiple currencies, which can mean that data require conversion between these currencies, at defined exchange rates. -The InvenTree server maintains a set of exchange rates, which are updated periodically. These exchange rates are available via the [InvenTree API](../api.md), and can be used by the Python bindings. +The InvenTree server maintains a set of exchange rates, which are updated periodically. These exchange rates are available via the [InvenTree API](../index.md), and can be used by the Python bindings. ### CurrencyManager Class diff --git a/docs/docs/api/python/examples.md b/docs/docs/api/python/examples.md index 4c25905502..7ec1059f42 100644 --- a/docs/docs/api/python/examples.md +++ b/docs/docs/api/python/examples.md @@ -67,7 +67,7 @@ print("Minimum stock:", part.minimum_stock) ### Adding Parameters -Each [part](../../part/part.md) can have multiple [parameters](../../part/parameter.md). For the example of the sofa (above) *length* and *weight* make sense. Each parameter has a parameter template that combines the parameter name with a unit. So we first have to create the parameter templates and afterwards add the parameter values to the sofa. +Each [part](../../part/index.md) can have multiple [parameters](../../part/parameter.md). For the example of the sofa (above) *length* and *weight* make sense. Each parameter has a parameter template that combines the parameter name with a unit. So we first have to create the parameter templates and afterwards add the parameter values to the sofa. ```python from inventree.part import Parameter @@ -190,7 +190,7 @@ item.transferStock(loc, quantity=50) ### Delete a Part -To delete a [Part instance](../../part/part.md), first in needs to be marked as *inactive* (otherwise it will throw an error): +To delete a [Part instance](../../part/index.md), first in needs to be marked as *inactive* (otherwise it will throw an error): ```python from inventree.part import Part diff --git a/docs/docs/api/python/python.md b/docs/docs/api/python/index.md similarity index 98% rename from docs/docs/api/python/python.md rename to docs/docs/api/python/index.md index a1e0d6802e..0229b20439 100644 --- a/docs/docs/api/python/python.md +++ b/docs/docs/api/python/index.md @@ -83,7 +83,7 @@ category = PartCategory(api, 10) #### Multiple Items -Database items can be queried by using the `list` method for the given class. Note that arbitrary filter parameters can be applied (as specified by the [InvenTree API](../api.md)) to filter the returned results. +Database items can be queried by using the `list` method for the given class. Note that arbitrary filter parameters can be applied (as specified by the [InvenTree API](../index.md)) to filter the returned results. ```python from inventree.part import Part diff --git a/docs/docs/api/schema.md b/docs/docs/api/schema.md index 66830a3a59..5d4ac82a23 100644 --- a/docs/docs/api/schema.md +++ b/docs/docs/api/schema.md @@ -7,7 +7,7 @@ The API schema as documented below is generated using the [drf-spectactular](htt ## API Version -This documentation is for API version: `315` +This documentation is for API version: `339` !!! tip "API Schema History" We track API schema changes, and provide a snapshot of each API schema version in the [API schema repository](https://github.com/inventree/schema/). diff --git a/docs/docs/app/connect.md b/docs/docs/app/connect.md index 44db61a749..e55e076fb4 100644 --- a/docs/docs/app/connect.md +++ b/docs/docs/app/connect.md @@ -24,7 +24,7 @@ Press on the server icon to navigate to the server selection view: !!! success "Server Profiles" The app supports multiple server profiles, providing simple switching between different InvenTree servers and/or account profiles. -Press the button in the bottom-right corner of the screen to create a new server profile. +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' %} @@ -45,7 +45,7 @@ Once the server profile is created, you need to connect to the server. Simply sh Alternatively, long press on the server profile to activate the context menu, then select *Connect to Server*. -When the app successfully connects to the server, a success message is briefly displayed at the bottom of the screen. A green icon next to the server profile indicate that the profile is currently *selected* and also the connection was successful. +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' %} @@ -53,7 +53,7 @@ When the app successfully connects to the server, a success message is briefly d ### 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 is displayed next to the server profile. +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' %} diff --git a/docs/docs/app/app.md b/docs/docs/app/index.md similarity index 87% rename from docs/docs/app/app.md rename to docs/docs/app/index.md index 749395298c..5a9c748681 100644 --- a/docs/docs/app/app.md +++ b/docs/docs/app/index.md @@ -8,7 +8,7 @@ title: InvenTree Mobile App ----- -The InvenTree Mobile App brings stock control to your pocket. Integrating seamlessly with the [InvenTree API](../api/api.md), the app provides immediate access to inventory data without requiring physical access to a computer. +The InvenTree Mobile App brings stock control to your pocket. Integrating seamlessly with the [InvenTree API](../api/index.md), the app provides immediate access to inventory data without requiring physical access to a computer. Native barcode support provides a multitude of context-sensitive stock control actions, allowing streamlined inventory management at your fingertips. The app has been optimized for speed, providing instant access to stock knowledge and handy on-site functionality. diff --git a/docs/docs/app/navigation.md b/docs/docs/app/navigation.md index c86e4a01d9..94ed6721c9 100644 --- a/docs/docs/app/navigation.md +++ b/docs/docs/app/navigation.md @@ -31,7 +31,7 @@ The *Global Action* buttons are visible on most screens, displayed in the bottom ### Open Drawer Menu -The action opens the *Drawer Menu*, which is a quick-access menu for global navigation: +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' %} @@ -44,11 +44,11 @@ The *Drawer Menu* can be accessed in the following ways: ### Search -The action opens the [Search](./search.md) screen +The {{ icon("search", title="Search") }} action opens the [Search](./search.md) screen ### Scan Barcode -The action opens the [barcode scan](./barcode.md#global-scan) window, which allows quick access to the barcode scanning functionality. +The {{ icon("barcode", title="Scan") }} action opens the [barcode scan](./barcode.md#global-scan) window, which allows quick access to the barcode scanning functionality. ## Context Actions diff --git a/docs/docs/app/stock.md b/docs/docs/app/stock.md index a416350343..14113bd666 100644 --- a/docs/docs/app/stock.md +++ b/docs/docs/app/stock.md @@ -152,7 +152,7 @@ This barcode can then be used to track the stock item. #### Print Label -If the server supports [label printing plugins](../extend/plugins/label.md), then an option to print a label for the selected 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' %} diff --git a/docs/docs/assets/images/barcode/barcode_settings.png b/docs/docs/assets/images/barcode/barcode_settings.png index 8ca8356d90..4767d0469a 100644 Binary files a/docs/docs/assets/images/barcode/barcode_settings.png and b/docs/docs/assets/images/barcode/barcode_settings.png differ diff --git a/docs/docs/assets/images/build/auto_allocate_dialog.png b/docs/docs/assets/images/build/auto_allocate_dialog.png index 66c8775aad..d4662710de 100644 Binary files a/docs/docs/assets/images/build/auto_allocate_dialog.png and b/docs/docs/assets/images/build/auto_allocate_dialog.png differ diff --git a/docs/docs/assets/images/build/bom_add_item.png b/docs/docs/assets/images/build/bom_add_item.png index f912d37404..79417700e8 100644 Binary files a/docs/docs/assets/images/build/bom_add_item.png and b/docs/docs/assets/images/build/bom_add_item.png differ diff --git a/docs/docs/assets/images/build/bom_consumable_item.png b/docs/docs/assets/images/build/bom_consumable_item.png index 065f6ee709..74d5c2cd25 100644 Binary files a/docs/docs/assets/images/build/bom_consumable_item.png and b/docs/docs/assets/images/build/bom_consumable_item.png differ diff --git a/docs/docs/assets/images/build/bom_expanded.png b/docs/docs/assets/images/build/bom_expanded.png deleted file mode 100644 index 8bda75c21a..0000000000 Binary files a/docs/docs/assets/images/build/bom_expanded.png and /dev/null differ diff --git a/docs/docs/assets/images/build/bom_export.png b/docs/docs/assets/images/build/bom_export.png index bc247f339c..31aee75d8d 100644 Binary files a/docs/docs/assets/images/build/bom_export.png and b/docs/docs/assets/images/build/bom_export.png differ diff --git a/docs/docs/assets/images/build/bom_flat.png b/docs/docs/assets/images/build/bom_flat.png index ce46c8591d..4bd466cbd0 100644 Binary files a/docs/docs/assets/images/build/bom_flat.png and b/docs/docs/assets/images/build/bom_flat.png differ diff --git a/docs/docs/assets/images/build/bom_invalid.png b/docs/docs/assets/images/build/bom_invalid.png deleted file mode 100644 index 831fba9aa5..0000000000 Binary files a/docs/docs/assets/images/build/bom_invalid.png and /dev/null differ diff --git a/docs/docs/assets/images/build/bom_select_fields.png b/docs/docs/assets/images/build/bom_select_fields.png index 67d8e8a506..52fca50c71 100644 Binary files a/docs/docs/assets/images/build/bom_select_fields.png and b/docs/docs/assets/images/build/bom_select_fields.png differ diff --git a/docs/docs/assets/images/build/bom_select_parts.png b/docs/docs/assets/images/build/bom_select_parts.png index 447bdfdb0f..ba30b5606e 100644 Binary files a/docs/docs/assets/images/build/bom_select_parts.png and b/docs/docs/assets/images/build/bom_select_parts.png differ diff --git a/docs/docs/assets/images/build/bom_substitute_item.png b/docs/docs/assets/images/build/bom_substitute_item.png index c46178ae36..dba4e8dac2 100644 Binary files a/docs/docs/assets/images/build/bom_substitute_item.png and b/docs/docs/assets/images/build/bom_substitute_item.png differ diff --git a/docs/docs/assets/images/build/bom_upload_file.png b/docs/docs/assets/images/build/bom_upload_file.png index 916e6e1889..7e293363cc 100644 Binary files a/docs/docs/assets/images/build/bom_upload_file.png and b/docs/docs/assets/images/build/bom_upload_file.png differ diff --git a/docs/docs/assets/images/build/bom_valid.png b/docs/docs/assets/images/build/bom_valid.png deleted file mode 100644 index c53532b502..0000000000 Binary files a/docs/docs/assets/images/build/bom_valid.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_allocate.png b/docs/docs/assets/images/build/build_allocate.png index ee379464e0..0139f3495a 100644 Binary files a/docs/docs/assets/images/build/build_allocate.png and b/docs/docs/assets/images/build/build_allocate.png differ diff --git a/docs/docs/assets/images/build/build_allocate_detail.png b/docs/docs/assets/images/build/build_allocate_detail.png index 35d278507b..da6cac2ad5 100644 Binary files a/docs/docs/assets/images/build/build_allocate_detail.png and b/docs/docs/assets/images/build/build_allocate_detail.png differ diff --git a/docs/docs/assets/images/build/build_allocate_tracked_parts.png b/docs/docs/assets/images/build/build_allocate_tracked_parts.png index 598c67d582..cc867578c5 100644 Binary files a/docs/docs/assets/images/build/build_allocate_tracked_parts.png and b/docs/docs/assets/images/build/build_allocate_tracked_parts.png differ diff --git a/docs/docs/assets/images/build/build_allocation_expand.png b/docs/docs/assets/images/build/build_allocation_expand.png deleted file mode 100644 index 45dafdc83c..0000000000 Binary files a/docs/docs/assets/images/build/build_allocation_expand.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_attachments.png b/docs/docs/assets/images/build/build_attachments.png index a7a70ea660..e331070c13 100644 Binary files a/docs/docs/assets/images/build/build_attachments.png and b/docs/docs/assets/images/build/build_attachments.png differ diff --git a/docs/docs/assets/images/build/build_auto_allocate.png b/docs/docs/assets/images/build/build_auto_allocate.png index 1e4d0486e1..72a7efc30c 100644 Binary files a/docs/docs/assets/images/build/build_auto_allocate.png and b/docs/docs/assets/images/build/build_auto_allocate.png differ diff --git a/docs/docs/assets/images/build/build_childs.png b/docs/docs/assets/images/build/build_childs.png index 479011a796..65ff39018c 100644 Binary files a/docs/docs/assets/images/build/build_childs.png and b/docs/docs/assets/images/build/build_childs.png differ diff --git a/docs/docs/assets/images/build/build_consumable_item.png b/docs/docs/assets/images/build/build_consumable_item.png deleted file mode 100644 index 3a378e4732..0000000000 Binary files a/docs/docs/assets/images/build/build_consumable_item.png and /dev/null differ diff --git a/docs/docs/assets/images/build/build_create_from_part.png b/docs/docs/assets/images/build/build_create_from_part.png index fce8f05a9d..dbb1f42744 100644 Binary files a/docs/docs/assets/images/build/build_create_from_part.png and b/docs/docs/assets/images/build/build_create_from_part.png differ diff --git a/docs/docs/assets/images/build/build_details.png b/docs/docs/assets/images/build/build_details.png index b0afd9ad8b..f8c8d170d8 100644 Binary files a/docs/docs/assets/images/build/build_details.png and b/docs/docs/assets/images/build/build_details.png differ diff --git a/docs/docs/assets/images/build/build_example_allocate_untracked.png b/docs/docs/assets/images/build/build_example_allocate_untracked.png index 95cd85fa77..9e51a0bb1b 100644 Binary files a/docs/docs/assets/images/build/build_example_allocate_untracked.png and b/docs/docs/assets/images/build/build_example_allocate_untracked.png differ diff --git a/docs/docs/assets/images/build/build_example_allocated_tracked.png b/docs/docs/assets/images/build/build_example_allocated_tracked.png index 9f2b2dae7e..59ec70be90 100644 Binary files a/docs/docs/assets/images/build/build_example_allocated_tracked.png and b/docs/docs/assets/images/build/build_example_allocated_tracked.png differ diff --git a/docs/docs/assets/images/build/build_example_complete_outputs.png b/docs/docs/assets/images/build/build_example_complete_outputs.png index 7a3382af9a..8a64665968 100644 Binary files a/docs/docs/assets/images/build/build_example_complete_outputs.png and b/docs/docs/assets/images/build/build_example_complete_outputs.png differ diff --git a/docs/docs/assets/images/build/build_example_create.png b/docs/docs/assets/images/build/build_example_create.png index e62d438543..888da7d0c1 100644 Binary files a/docs/docs/assets/images/build/build_example_create.png and b/docs/docs/assets/images/build/build_example_create.png differ diff --git a/docs/docs/assets/images/build/build_example_create_outputs.png b/docs/docs/assets/images/build/build_example_create_outputs.png index 1606728039..6b3de3357d 100644 Binary files a/docs/docs/assets/images/build/build_example_create_outputs.png and b/docs/docs/assets/images/build/build_example_create_outputs.png differ diff --git a/docs/docs/assets/images/build/build_example_incomplete_list.png b/docs/docs/assets/images/build/build_example_incomplete_list.png index a6fbd37d5b..8fd32e0e33 100644 Binary files a/docs/docs/assets/images/build/build_example_incomplete_list.png and b/docs/docs/assets/images/build/build_example_incomplete_list.png differ diff --git a/docs/docs/assets/images/build/build_notes.png b/docs/docs/assets/images/build/build_notes.png index b3c5304669..31894bd427 100644 Binary files a/docs/docs/assets/images/build/build_notes.png and b/docs/docs/assets/images/build/build_notes.png differ diff --git a/docs/docs/assets/images/build/build_output_complete.png b/docs/docs/assets/images/build/build_output_complete.png index 6583cbddf2..4e0777383c 100644 Binary files a/docs/docs/assets/images/build/build_output_complete.png and b/docs/docs/assets/images/build/build_output_complete.png differ diff --git a/docs/docs/assets/images/build/build_output_create.png b/docs/docs/assets/images/build/build_output_create.png index 5b29ceb26e..3be851b39a 100644 Binary files a/docs/docs/assets/images/build/build_output_create.png and b/docs/docs/assets/images/build/build_output_create.png differ diff --git a/docs/docs/assets/images/build/build_output_delete.png b/docs/docs/assets/images/build/build_output_delete.png index 523ace3a2b..0b79a35164 100644 Binary files a/docs/docs/assets/images/build/build_output_delete.png and b/docs/docs/assets/images/build/build_output_delete.png differ diff --git a/docs/docs/assets/images/build/build_output_scrap.png b/docs/docs/assets/images/build/build_output_scrap.png index 91ab653f89..0a29cd13f3 100644 Binary files a/docs/docs/assets/images/build/build_output_scrap.png and b/docs/docs/assets/images/build/build_output_scrap.png differ diff --git a/docs/docs/assets/images/build/build_outputs.png b/docs/docs/assets/images/build/build_outputs.png index 3e0be757f9..fb45e7303e 100644 Binary files a/docs/docs/assets/images/build/build_outputs.png and b/docs/docs/assets/images/build/build_outputs.png differ diff --git a/docs/docs/assets/images/build/build_outputs_complete.png b/docs/docs/assets/images/build/build_outputs_complete.png index a35866e948..9d1045686c 100644 Binary files a/docs/docs/assets/images/build/build_outputs_complete.png and b/docs/docs/assets/images/build/build_outputs_complete.png differ diff --git a/docs/docs/assets/images/build/build_outputs_incomplete.png b/docs/docs/assets/images/build/build_outputs_incomplete.png index 746206ed9a..1685b3e148 100644 Binary files a/docs/docs/assets/images/build/build_outputs_incomplete.png and b/docs/docs/assets/images/build/build_outputs_incomplete.png differ diff --git a/docs/docs/assets/images/build/build_tree.png b/docs/docs/assets/images/build/build_tree.png deleted file mode 100644 index 7e708dc4a5..0000000000 Binary files a/docs/docs/assets/images/build/build_tree.png and /dev/null differ diff --git a/docs/docs/assets/images/build/complete_build.png b/docs/docs/assets/images/build/complete_build.png index 230acca8f4..adfdb43cb7 100644 Binary files a/docs/docs/assets/images/build/complete_build.png and b/docs/docs/assets/images/build/complete_build.png differ diff --git a/docs/docs/assets/images/indexgallery/bom_add_item.png b/docs/docs/assets/images/indexgallery/bom_add_item.png index 05c8377039..f22e5290ee 100644 Binary files a/docs/docs/assets/images/indexgallery/bom_add_item.png and b/docs/docs/assets/images/indexgallery/bom_add_item.png differ diff --git a/docs/docs/assets/images/indexgallery/build_details.png b/docs/docs/assets/images/indexgallery/build_details.png index 625e6ba760..c02cd8be8a 100644 Binary files a/docs/docs/assets/images/indexgallery/build_details.png and b/docs/docs/assets/images/indexgallery/build_details.png differ diff --git a/docs/docs/assets/images/indexgallery/build_outputs.png b/docs/docs/assets/images/indexgallery/build_outputs.png index fa77dd3755..e2d1a0f4db 100644 Binary files a/docs/docs/assets/images/indexgallery/build_outputs.png and b/docs/docs/assets/images/indexgallery/build_outputs.png differ diff --git a/docs/docs/assets/images/indexgallery/category_params.png b/docs/docs/assets/images/indexgallery/category_params.png index 9e91b8fbd1..86c60d43ee 100644 Binary files a/docs/docs/assets/images/indexgallery/category_params.png and b/docs/docs/assets/images/indexgallery/category_params.png differ diff --git a/docs/docs/assets/images/indexgallery/category_subcats.png b/docs/docs/assets/images/indexgallery/category_subcats.png index 948b7cfc0d..0f84fd8b1f 100644 Binary files a/docs/docs/assets/images/indexgallery/category_subcats.png and b/docs/docs/assets/images/indexgallery/category_subcats.png differ diff --git a/docs/docs/assets/images/indexgallery/manufacturers.png b/docs/docs/assets/images/indexgallery/manufacturers.png index fbe153dc11..3dae92226a 100644 Binary files a/docs/docs/assets/images/indexgallery/manufacturers.png and b/docs/docs/assets/images/indexgallery/manufacturers.png differ diff --git a/docs/docs/assets/images/indexgallery/part_category.png b/docs/docs/assets/images/indexgallery/part_category.png index f9d9de032b..45a21f2ab7 100644 Binary files a/docs/docs/assets/images/indexgallery/part_category.png and b/docs/docs/assets/images/indexgallery/part_category.png differ diff --git a/docs/docs/assets/images/indexgallery/part_stock.png b/docs/docs/assets/images/indexgallery/part_stock.png index 5d48a42d75..c7a14fd767 100644 Binary files a/docs/docs/assets/images/indexgallery/part_stock.png and b/docs/docs/assets/images/indexgallery/part_stock.png differ diff --git a/docs/docs/assets/images/indexgallery/part_suppliers.png b/docs/docs/assets/images/indexgallery/part_suppliers.png index ca09aeca6d..2d42c9a5ae 100644 Binary files a/docs/docs/assets/images/indexgallery/part_suppliers.png and b/docs/docs/assets/images/indexgallery/part_suppliers.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_item.png b/docs/docs/assets/images/indexgallery/stock_item.png index b316b92821..4993d197ac 100644 Binary files a/docs/docs/assets/images/indexgallery/stock_item.png and b/docs/docs/assets/images/indexgallery/stock_item.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_item_2.png b/docs/docs/assets/images/indexgallery/stock_item_2.png index 7ad6386328..1fd9eb6dcc 100644 Binary files a/docs/docs/assets/images/indexgallery/stock_item_2.png and b/docs/docs/assets/images/indexgallery/stock_item_2.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_location.png b/docs/docs/assets/images/indexgallery/stock_location.png index 9d117e35cd..7a7b9df695 100644 Binary files a/docs/docs/assets/images/indexgallery/stock_location.png and b/docs/docs/assets/images/indexgallery/stock_location.png differ diff --git a/docs/docs/assets/images/indexgallery/stock_location_2.png b/docs/docs/assets/images/indexgallery/stock_location_2.png index a8e44aaf91..63dc76d4e1 100644 Binary files a/docs/docs/assets/images/indexgallery/stock_location_2.png and b/docs/docs/assets/images/indexgallery/stock_location_2.png differ diff --git a/docs/docs/assets/images/indexgallery/suppliers.png b/docs/docs/assets/images/indexgallery/suppliers.png index e90ef9899b..89a8a59d28 100644 Binary files a/docs/docs/assets/images/indexgallery/suppliers.png and b/docs/docs/assets/images/indexgallery/suppliers.png differ diff --git a/docs/docs/assets/images/order/assign_project_code.png b/docs/docs/assets/images/order/assign_project_code.png index 07b1af9bfe..34ff8b56a8 100644 Binary files a/docs/docs/assets/images/order/assign_project_code.png and b/docs/docs/assets/images/order/assign_project_code.png differ diff --git a/docs/docs/assets/images/order/complete_shipment.png b/docs/docs/assets/images/order/complete_shipment.png index f94341f343..fa2c0a74c3 100644 Binary files a/docs/docs/assets/images/order/complete_shipment.png and b/docs/docs/assets/images/order/complete_shipment.png differ diff --git a/docs/docs/assets/images/order/complete_shipment_action.png b/docs/docs/assets/images/order/complete_shipment_action.png deleted file mode 100644 index 989c3e3ff8..0000000000 Binary files a/docs/docs/assets/images/order/complete_shipment_action.png and /dev/null differ diff --git a/docs/docs/assets/images/order/completed_shipments.png b/docs/docs/assets/images/order/completed_shipments.png index 4a1f7dba1e..79af5c867a 100644 Binary files a/docs/docs/assets/images/order/completed_shipments.png and b/docs/docs/assets/images/order/completed_shipments.png differ diff --git a/docs/docs/assets/images/order/contact_list.png b/docs/docs/assets/images/order/contact_list.png index cf168489ce..8af2398bd8 100644 Binary files a/docs/docs/assets/images/order/contact_list.png and b/docs/docs/assets/images/order/contact_list.png differ diff --git a/docs/docs/assets/images/order/edit_shipment.png b/docs/docs/assets/images/order/edit_shipment.png index 693dfdea78..d2702327b5 100644 Binary files a/docs/docs/assets/images/order/edit_shipment.png and b/docs/docs/assets/images/order/edit_shipment.png differ diff --git a/docs/docs/assets/images/order/filter_by_project.png b/docs/docs/assets/images/order/filter_by_project.png index 4e31eeed36..78af36d99b 100644 Binary files a/docs/docs/assets/images/order/filter_by_project.png and b/docs/docs/assets/images/order/filter_by_project.png differ diff --git a/docs/docs/assets/images/order/manufacturer_list.png b/docs/docs/assets/images/order/manufacturer_list.png index f8378d4a32..8c99be173d 100644 Binary files a/docs/docs/assets/images/order/manufacturer_list.png and b/docs/docs/assets/images/order/manufacturer_list.png differ diff --git a/docs/docs/assets/images/order/pending_shipments.png b/docs/docs/assets/images/order/pending_shipments.png index 80d0a10296..5e90b933c1 100644 Binary files a/docs/docs/assets/images/order/pending_shipments.png and b/docs/docs/assets/images/order/pending_shipments.png differ diff --git a/docs/docs/assets/images/order/po_duplicate.png b/docs/docs/assets/images/order/po_duplicate.png index adb402eda3..f35f6c5476 100644 Binary files a/docs/docs/assets/images/order/po_duplicate.png and b/docs/docs/assets/images/order/po_duplicate.png differ diff --git a/docs/docs/assets/images/order/po_duplicate_2.png b/docs/docs/assets/images/order/po_duplicate_2.png index 834b885e9c..c576564c60 100644 Binary files a/docs/docs/assets/images/order/po_duplicate_2.png and b/docs/docs/assets/images/order/po_duplicate_2.png differ diff --git a/docs/docs/assets/images/order/po_duplicate_3.png b/docs/docs/assets/images/order/po_duplicate_3.png index 2c9f1d266a..4aff8937ff 100644 Binary files a/docs/docs/assets/images/order/po_duplicate_3.png and b/docs/docs/assets/images/order/po_duplicate_3.png differ diff --git a/docs/docs/assets/images/order/return_order_detail.png b/docs/docs/assets/images/order/return_order_detail.png index 64082dd20b..0fec69ae09 100644 Binary files a/docs/docs/assets/images/order/return_order_detail.png and b/docs/docs/assets/images/order/return_order_detail.png differ diff --git a/docs/docs/assets/images/order/return_order_enable.png b/docs/docs/assets/images/order/return_order_enable.png index 571ab319aa..113212cd8a 100644 Binary files a/docs/docs/assets/images/order/return_order_enable.png and b/docs/docs/assets/images/order/return_order_enable.png differ diff --git a/docs/docs/assets/images/order/return_order_index.png b/docs/docs/assets/images/order/return_order_index.png index 5e650d99f0..7ada45efdf 100644 Binary files a/docs/docs/assets/images/order/return_order_index.png and b/docs/docs/assets/images/order/return_order_index.png differ diff --git a/docs/docs/assets/images/order/return_order_navbar.png b/docs/docs/assets/images/order/return_order_navbar.png index 91604cda3c..caefec84c0 100644 Binary files a/docs/docs/assets/images/order/return_order_navbar.png and b/docs/docs/assets/images/order/return_order_navbar.png differ diff --git a/docs/docs/assets/images/order/supplier_list.png b/docs/docs/assets/images/order/supplier_list.png index 77515471aa..f903477d98 100644 Binary files a/docs/docs/assets/images/order/supplier_list.png and b/docs/docs/assets/images/order/supplier_list.png differ diff --git a/docs/docs/assets/images/part/cat_subs.png b/docs/docs/assets/images/part/cat_subs.png deleted file mode 100644 index 271b33e119..0000000000 Binary files a/docs/docs/assets/images/part/cat_subs.png and /dev/null differ diff --git a/docs/docs/assets/images/part/category_notification.png b/docs/docs/assets/images/part/category_notification.png deleted file mode 100644 index 3de3a74d19..0000000000 Binary files a/docs/docs/assets/images/part/category_notification.png and /dev/null differ diff --git a/docs/docs/assets/images/part/create_initial_stock_option.png b/docs/docs/assets/images/part/create_initial_stock_option.png deleted file mode 100644 index febba69df4..0000000000 Binary files a/docs/docs/assets/images/part/create_initial_stock_option.png and /dev/null differ diff --git a/docs/docs/assets/images/part/create_part_parameter.png b/docs/docs/assets/images/part/create_part_parameter.png index 0021b65df4..4ed585fbfa 100644 Binary files a/docs/docs/assets/images/part/create_part_parameter.png and b/docs/docs/assets/images/part/create_part_parameter.png differ diff --git a/docs/docs/assets/images/part/create_part_variant.png b/docs/docs/assets/images/part/create_part_variant.png index b885b35050..2d463ecfb2 100644 Binary files a/docs/docs/assets/images/part/create_part_variant.png and b/docs/docs/assets/images/part/create_part_variant.png differ diff --git a/docs/docs/assets/images/part/enable_template_part.png b/docs/docs/assets/images/part/enable_template_part.png deleted file mode 100644 index d09ef52c81..0000000000 Binary files a/docs/docs/assets/images/part/enable_template_part.png and /dev/null differ diff --git a/docs/docs/assets/images/part/new_part.png b/docs/docs/assets/images/part/new_part.png index 7408659f37..3331a87ca1 100644 Binary files a/docs/docs/assets/images/part/new_part.png and b/docs/docs/assets/images/part/new_part.png differ diff --git a/docs/docs/assets/images/part/notification_history.png b/docs/docs/assets/images/part/notification_history.png index e31289925a..dab6f33c89 100644 Binary files a/docs/docs/assets/images/part/notification_history.png and b/docs/docs/assets/images/part/notification_history.png differ diff --git a/docs/docs/assets/images/part/parameter_template_edit.png b/docs/docs/assets/images/part/parameter_template_edit.png index c91cca4c1e..ebffaa090a 100644 Binary files a/docs/docs/assets/images/part/parameter_template_edit.png and b/docs/docs/assets/images/part/parameter_template_edit.png differ diff --git a/docs/docs/assets/images/part/parametric_table_example.png b/docs/docs/assets/images/part/parametric_table_example.png index 78720dedbc..a8f11d7222 100644 Binary files a/docs/docs/assets/images/part/parametric_table_example.png and b/docs/docs/assets/images/part/parametric_table_example.png differ diff --git a/docs/docs/assets/images/part/parametric_table_tab.png b/docs/docs/assets/images/part/parametric_table_tab.png index b23115f07d..0e800927b5 100644 Binary files a/docs/docs/assets/images/part/parametric_table_tab.png and b/docs/docs/assets/images/part/parametric_table_tab.png differ diff --git a/docs/docs/assets/images/part/part_category.png b/docs/docs/assets/images/part/part_category.png index 5c3a8a7346..d3d4cd64d1 100644 Binary files a/docs/docs/assets/images/part/part_category.png and b/docs/docs/assets/images/part/part_category.png differ diff --git a/docs/docs/assets/images/part/part_create_form.png b/docs/docs/assets/images/part/part_create_form.png index de5e133bff..55e50c41c2 100644 Binary files a/docs/docs/assets/images/part/part_create_form.png and b/docs/docs/assets/images/part/part_create_form.png differ diff --git a/docs/docs/assets/images/part/part_image_example.png b/docs/docs/assets/images/part/part_image_example.png index e559ba8bb2..cee80a0253 100644 Binary files a/docs/docs/assets/images/part/part_image_example.png and b/docs/docs/assets/images/part/part_image_example.png differ diff --git a/docs/docs/assets/images/part/part_image_upload.png b/docs/docs/assets/images/part/part_image_upload.png index ff001c17ec..513a25c330 100644 Binary files a/docs/docs/assets/images/part/part_image_upload.png and b/docs/docs/assets/images/part/part_image_upload.png differ diff --git a/docs/docs/assets/images/part/part_invalid_units.png b/docs/docs/assets/images/part/part_invalid_units.png index 014fe4b93e..78f9987c3c 100644 Binary files a/docs/docs/assets/images/part/part_invalid_units.png and b/docs/docs/assets/images/part/part_invalid_units.png differ diff --git a/docs/docs/assets/images/part/part_ipn_editing.png b/docs/docs/assets/images/part/part_ipn_editing.png deleted file mode 100644 index 33e381559a..0000000000 Binary files a/docs/docs/assets/images/part/part_ipn_editing.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_list_hover.png b/docs/docs/assets/images/part/part_list_hover.png deleted file mode 100644 index 4b32af06b9..0000000000 Binary files a/docs/docs/assets/images/part/part_list_hover.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_manufacturers_suppliers.png b/docs/docs/assets/images/part/part_manufacturers_suppliers.png index c402536889..e3341d729c 100644 Binary files a/docs/docs/assets/images/part/part_manufacturers_suppliers.png and b/docs/docs/assets/images/part/part_manufacturers_suppliers.png differ diff --git a/docs/docs/assets/images/part/part_new_suppliers.png b/docs/docs/assets/images/part/part_new_suppliers.png index edc6866fc6..a25b245d6b 100644 Binary files a/docs/docs/assets/images/part/part_new_suppliers.png and b/docs/docs/assets/images/part/part_new_suppliers.png differ diff --git a/docs/docs/assets/images/part/part_overview.png b/docs/docs/assets/images/part/part_overview.png index 4f3fba307e..7b5546578b 100644 Binary files a/docs/docs/assets/images/part/part_overview.png and b/docs/docs/assets/images/part/part_overview.png differ diff --git a/docs/docs/assets/images/part/part_parameters_enforce.png b/docs/docs/assets/images/part/part_parameters_enforce.png deleted file mode 100644 index 2ce41ad2f3..0000000000 Binary files a/docs/docs/assets/images/part/part_parameters_enforce.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_parameters_example.png b/docs/docs/assets/images/part/part_parameters_example.png index b50aa2834d..8b7faea3ab 100644 Binary files a/docs/docs/assets/images/part/part_parameters_example.png and b/docs/docs/assets/images/part/part_parameters_example.png differ diff --git a/docs/docs/assets/images/part/part_related.png b/docs/docs/assets/images/part/part_related.png index 27fc93d78f..2d5cac3f1c 100644 Binary files a/docs/docs/assets/images/part/part_related.png and b/docs/docs/assets/images/part/part_related.png differ diff --git a/docs/docs/assets/images/part/part_related_setting.png b/docs/docs/assets/images/part/part_related_setting.png deleted file mode 100644 index ed2e19c45a..0000000000 Binary files a/docs/docs/assets/images/part/part_related_setting.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_tabs.png b/docs/docs/assets/images/part/part_tabs.png deleted file mode 100644 index ea3ec737b5..0000000000 Binary files a/docs/docs/assets/images/part/part_tabs.png and /dev/null differ diff --git a/docs/docs/assets/images/part/part_units.png b/docs/docs/assets/images/part/part_units.png index 4e952e8004..efc65b6435 100644 Binary files a/docs/docs/assets/images/part/part_units.png and b/docs/docs/assets/images/part/part_units.png differ diff --git a/docs/docs/assets/images/part/part_view_intro.png b/docs/docs/assets/images/part/part_view_intro.png deleted file mode 100644 index 4a7145d2db..0000000000 Binary files a/docs/docs/assets/images/part/part_view_intro.png and /dev/null differ diff --git a/docs/docs/assets/images/settings/currency.png b/docs/docs/assets/images/settings/currency.png index 71da2ff37a..6a7443ff6c 100644 Binary files a/docs/docs/assets/images/settings/currency.png and b/docs/docs/assets/images/settings/currency.png differ diff --git a/docs/docs/assets/images/settings/social_account_add.png b/docs/docs/assets/images/settings/social_account_add.png index 145e507026..f4dee08e7d 100644 Binary files a/docs/docs/assets/images/settings/social_account_add.png and b/docs/docs/assets/images/settings/social_account_add.png differ diff --git a/docs/docs/assets/images/settings/theme_dark.png b/docs/docs/assets/images/settings/theme_dark.png deleted file mode 100644 index 09d9abb7f3..0000000000 Binary files a/docs/docs/assets/images/settings/theme_dark.png and /dev/null differ diff --git a/docs/docs/assets/images/settings/theme_default.png b/docs/docs/assets/images/settings/theme_default.png deleted file mode 100644 index 71eda32750..0000000000 Binary files a/docs/docs/assets/images/settings/theme_default.png and /dev/null differ diff --git a/docs/docs/assets/images/settings/user_account.png b/docs/docs/assets/images/settings/user_account.png index 1f088a745a..cef9a4a9dc 100644 Binary files a/docs/docs/assets/images/settings/user_account.png and b/docs/docs/assets/images/settings/user_account.png differ diff --git a/docs/docs/assets/images/settings/user_display.png b/docs/docs/assets/images/settings/user_display.png index c0646323f5..bec915a217 100644 Binary files a/docs/docs/assets/images/settings/user_display.png and b/docs/docs/assets/images/settings/user_display.png differ diff --git a/docs/docs/assets/images/settings/user_home.png b/docs/docs/assets/images/settings/user_home.png deleted file mode 100644 index 9651100784..0000000000 Binary files a/docs/docs/assets/images/settings/user_home.png and /dev/null differ diff --git a/docs/docs/assets/images/settings/user_search.png b/docs/docs/assets/images/settings/user_search.png index 399ebe7d24..7748e5f979 100644 Binary files a/docs/docs/assets/images/settings/user_search.png and b/docs/docs/assets/images/settings/user_search.png differ diff --git a/docs/docs/assets/images/stock/expiry_date_create.png b/docs/docs/assets/images/stock/expiry_date_create.png index 143a260ea8..92ec26c20f 100644 Binary files a/docs/docs/assets/images/stock/expiry_date_create.png and b/docs/docs/assets/images/stock/expiry_date_create.png differ diff --git a/docs/docs/assets/images/stock/part_expiry.png b/docs/docs/assets/images/stock/part_expiry.png index 002309b07a..9e9cf8e32f 100644 Binary files a/docs/docs/assets/images/stock/part_expiry.png and b/docs/docs/assets/images/stock/part_expiry.png differ diff --git a/docs/docs/assets/images/stock/sell_build_expired_stock.png b/docs/docs/assets/images/stock/sell_build_expired_stock.png index 095e0388f9..b1e8acae51 100644 Binary files a/docs/docs/assets/images/stock/sell_build_expired_stock.png and b/docs/docs/assets/images/stock/sell_build_expired_stock.png differ diff --git a/docs/docs/assets/images/stock/serial_error_quantity.png b/docs/docs/assets/images/stock/serial_error_quantity.png index cf1985f34b..08ca77ead0 100644 Binary files a/docs/docs/assets/images/stock/serial_error_quantity.png and b/docs/docs/assets/images/stock/serial_error_quantity.png differ diff --git a/docs/docs/assets/images/stock/serial_error_unique.png b/docs/docs/assets/images/stock/serial_error_unique.png index b38135379a..23b6baf221 100644 Binary files a/docs/docs/assets/images/stock/serial_error_unique.png and b/docs/docs/assets/images/stock/serial_error_unique.png differ diff --git a/docs/docs/assets/images/stock/stock_add.png b/docs/docs/assets/images/stock/stock_add.png index 83353baf1f..cb668325c6 100644 Binary files a/docs/docs/assets/images/stock/stock_add.png and b/docs/docs/assets/images/stock/stock_add.png differ diff --git a/docs/docs/assets/images/stock/stock_count.png b/docs/docs/assets/images/stock/stock_count.png index 1de7f1dbfe..26e3898a21 100644 Binary files a/docs/docs/assets/images/stock/stock_count.png and b/docs/docs/assets/images/stock/stock_count.png differ diff --git a/docs/docs/assets/images/stock/stock_item_merge.png b/docs/docs/assets/images/stock/stock_item_merge.png index edd8a6f63f..274bc18751 100644 Binary files a/docs/docs/assets/images/stock/stock_item_merge.png and b/docs/docs/assets/images/stock/stock_item_merge.png differ diff --git a/docs/docs/assets/images/stock/stock_item_owner.png b/docs/docs/assets/images/stock/stock_item_owner.png index 250d6afe85..b491a8d181 100644 Binary files a/docs/docs/assets/images/stock/stock_item_owner.png and b/docs/docs/assets/images/stock/stock_item_owner.png differ diff --git a/docs/docs/assets/images/stock/stock_move.png b/docs/docs/assets/images/stock/stock_move.png index a6b62ed5e6..ed940f43d4 100644 Binary files a/docs/docs/assets/images/stock/stock_move.png and b/docs/docs/assets/images/stock/stock_move.png differ diff --git a/docs/docs/assets/images/stock/stock_options.png b/docs/docs/assets/images/stock/stock_options.png index 0250327193..2289db9c96 100644 Binary files a/docs/docs/assets/images/stock/stock_options.png and b/docs/docs/assets/images/stock/stock_options.png differ diff --git a/docs/docs/assets/images/stock/stock_remove.png b/docs/docs/assets/images/stock/stock_remove.png index 5fc27b5f02..3a6027881d 100644 Binary files a/docs/docs/assets/images/stock/stock_remove.png and b/docs/docs/assets/images/stock/stock_remove.png differ diff --git a/docs/docs/assets/images/stock/stock_status_edit.png b/docs/docs/assets/images/stock/stock_status_edit.png index 0c4793437b..2c2d5b54e8 100644 Binary files a/docs/docs/assets/images/stock/stock_status_edit.png and b/docs/docs/assets/images/stock/stock_status_edit.png differ diff --git a/docs/docs/assets/images/stock/stock_status_edit_multiple.png b/docs/docs/assets/images/stock/stock_status_edit_multiple.png index d7d108c2e5..4d1be5ad8d 100644 Binary files a/docs/docs/assets/images/stock/stock_status_edit_multiple.png and b/docs/docs/assets/images/stock/stock_status_edit_multiple.png differ diff --git a/docs/docs/assets/images/stock/stock_status_label.png b/docs/docs/assets/images/stock/stock_status_label.png index 4102694972..46b1e6d1c4 100644 Binary files a/docs/docs/assets/images/stock/stock_status_label.png and b/docs/docs/assets/images/stock/stock_status_label.png differ diff --git a/docs/docs/assets/images/stock/test_results.png b/docs/docs/assets/images/stock/test_results.png index fe497d0c18..1716a6fb36 100644 Binary files a/docs/docs/assets/images/stock/test_results.png and b/docs/docs/assets/images/stock/test_results.png differ diff --git a/docs/docs/barcodes/custom.md b/docs/docs/barcodes/custom.md index 52f5b062cd..560f142742 100644 --- a/docs/docs/barcodes/custom.md +++ b/docs/docs/barcodes/custom.md @@ -6,7 +6,7 @@ title: Custom Barcodes With the provision of [internal](./internal.md) and [external](./external.md) barcode support, a lot of potential use-cases are already supported directly by InvenTree. -However, if further customization is required, or a bespoke barcode workflow which is not supported already, then this can easily be implemented using the [plugin system](../extend/plugins/barcode.md). +However, if further customization is required, or a bespoke barcode workflow which is not supported already, then this can easily be implemented using the [plugin system](../plugins/mixins/barcode.md). A custom barcode plugin can be used to (for example) perform a particular action when a barcode is scanned. @@ -22,7 +22,7 @@ The barcode is tested as follows, in decreasing order of priority: - [Internal Barcode Plugin](./internal.md) - [External Barcode Plugin](./external.md) -- [Custom Barcode Plugins](../extend/plugins/barcode.md) +- [Custom Barcode Plugins](../plugins/mixins/barcode.md) !!! tip "Plugin Loading Order" The first custom plugin to return a result "wins". As the loading order of custom plugins is not defined (or configurable), take special care if you are running multiple plugins which support barcode actions. diff --git a/docs/docs/barcodes/external.md b/docs/docs/barcodes/external.md index 37825e04ba..27a32dd1f1 100644 --- a/docs/docs/barcodes/external.md +++ b/docs/docs/barcodes/external.md @@ -6,7 +6,7 @@ title: External Barcodes In addition to defining an [internal barcode format](./internal.md), models which have associated barcode information also allow arbitrary external (third party) barcodes to be assigned or "linked" to items in the database. -For example, you have just purchased a reel of capacitors from a supplier, which comes provided with a sufficiently unique barcode or qr-code. Instead of printing an *internal* barcode, the existing barcode can be scanned and *linked* to the specific reel (which is a [Stock Item](../stock/stock.md#stock-item)). +For example, you have just purchased a reel of capacitors from a supplier, which comes provided with a sufficiently unique barcode or qr-code. Instead of printing an *internal* barcode, the existing barcode can be scanned and *linked* to the specific reel (which is a [Stock Item](../stock/index.md#stock-item)). Linking to external barcodes allows an alternative barcode workflow, which may be especially useful when dealing with in-feed components which are received from external suppliers. @@ -17,7 +17,7 @@ Linking to external barcodes allows an alternative barcode workflow, which may b ### Via the API -Facility for barcode linking (and un-linking) is provided via the [API](../api/api.md). +Facility for barcode linking (and un-linking) is provided via the [API](../api/index.md). - The `/api/barcode/link/` API endpoint is used to link a barcode with an existing database item - The `/api/barcode/unlink/` API endpoint is used to unlink a barcode from an existing database item diff --git a/docs/docs/barcodes/barcodes.md b/docs/docs/barcodes/index.md similarity index 84% rename from docs/docs/barcodes/barcodes.md rename to docs/docs/barcodes/index.md index e1d7cb8ae1..4627fff56b 100644 --- a/docs/docs/barcodes/barcodes.md +++ b/docs/docs/barcodes/index.md @@ -6,12 +6,12 @@ title: Barcodes InvenTree has native support for barcodes, which provides powerful functionality "out of the box", and can be easily extended: -- Barcodes can be scanned [via the API](../api/api.md) +- Barcodes can be scanned [via the API](../api/index.md) - The web interface supports barcode scanning - Barcodes integrate natively [with the mobile app](../app/barcode.md) - Custom barcodes can be assigned to items - Barcodes can be embedded in [labels or reports](../report/barcodes.md) -- Barcode functionality can be [extended via plugins](../extend/plugins/barcode.md) +- Barcode functionality can be [extended via plugins](../plugins/mixins/barcode.md) ### Barcode Formats @@ -25,14 +25,14 @@ InvenTree supports the following barcode formats: Barcodes can be linked with the following data model types: -- [Part](../part/part.md#part) -- [Stock Item](../stock/stock.md#stock-item) -- [Stock Location](../stock/stock.md#stock-location) -- [Supplier Part](../order/company.md#supplier-parts) -- [Purchase Order](../order/purchase_order.md#purchase-orders) -- [Sales Order](../order/sales_order.md#sales-orders) -- [Return Order](../order/return_order.md#return-orders) -- [Build Order](../build/build.md#build-orders) +- [Part](../part/index.md#part) +- [Stock Item](../stock/index.md#stock-item) +- [Stock Location](../stock/index.md#stock-location) +- [Supplier Part](../purchasing/supplier.md#supplier-parts) +- [Purchase Order](../purchasing/purchase_order.md#purchase-orders) +- [Sales Order](../sales/sales_order.md#sales-orders) +- [Return Order](../sales/return_order.md#return-orders) +- [Build Order](../manufacturing/build.md#build-orders) ### Configuration Options diff --git a/docs/docs/concepts/company.md b/docs/docs/concepts/company.md new file mode 100644 index 0000000000..1aded63ed5 --- /dev/null +++ b/docs/docs/concepts/company.md @@ -0,0 +1,97 @@ +--- +title: Companies +--- + + +## Companies + +External companies are represented by the *Company* database model. Each company may be classified into the following categories: + +- [Customer](../sales/customer.md) +- [Supplier](../purchasing/supplier.md) +- [Manufacturer](../purchasing/manufacturer.md) + +!!! tip "Multi Purpose" + A company may be allocated to multiple categories, for example, a company may be both a supplier and a customer. + +### Edit Company + +To edit a company, click on the {{ icon("edit", color="blue", title="Edit Company") }} icon in the actions menu. Edit the company information, and then click on Submit. + +!!! warning "Permission Required" + The edit button will not be available to users who do not have the required permissions to edit the company + +### Disable Company + +Rather than deleting a company, it is possible to disable it. This will prevent the company from being used in new orders, but will not remove it from the database. Additionally, any existing orders associated with the company (and other linked items such as supplier parts, for a supplier) will remain intact. Unless the company is re-enabled, it will not be available for selection in new orders. + +It is recommended to disable a company rather than deleting it, as this will preserve the integrity of historical data. + +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 %} + +To re-enable a company, simply follow the same process and set the `active` attribute to `True`. + +### Delete Company + +To delete a company, click on the {{ icon("trash", color="red", title="Delete") }} icon under the actions menu. Confirm the deletion using the checkbox then click on Submit + +!!! warning "Permission Required" + The edit button will not be available to users who do not have the required permissions to delete the company + +!!! danger "Take Care" + Deleting a company instance will also remove any orders or supplied parts associated with that company! + +### Contacts + +Each company can have multiple assigned *Contacts*. A contact identifies an individual who is associated with the company, including information such as name, email address, phone number, etc. + +The list of contacts associated with a particular company is available in the {{ icon("users") }} Contacts navigation tab: + +{% with id="contact_list", url="order/contact_list.png", description="Contact List" %} +{% include "img.html" %} +{% endwith %} + + +A *contact* can be assigned to orders, (such as [purchase orders](../purchasing/purchase_order.md) or [sales orders](../sales/sales_order.md)). + +### Addresses + +A company can have multiple registered addresses for use with all types of orders. +An address is broken down to internationally recognised elements that are designed to allow for formatting an address according to user needs. +Addresses are composed differently across the world, and InvenTree reflects this by splitting addresses into components: +- Line 1: Main street address +- Line 2: Extra street address line +- Postal Code: Also known as ZIP code, this is normally a number 3-5 digits in length +- City: The city/region tied to the postal code +- Province: The larger region the address is located in. Also known as State in the US +- Country: Country the address is located in, written in CAPS + +Here are a couple of examples of how the address structure differs by country, but these components can construct a correctly formatted address for any given country. + +UK address format: +Recipient +Line 1 +Line 2 +City +Postal Code +Country + +US Address Format: +Recipient +Line 1 +Line 2 +City State Postal Code +Country + + +Addresses can be accessed by the {{ icon("map-2") }} Addresses navigation tab. + +#### Primary Address + +Each company can have exactly one (1) primary address. +This address is the default shown on the company profile, and the one that is automatically suggested when creating an order. +Marking a new address as primary will remove the mark from the old primary address. diff --git a/docs/docs/concepts/pricing.md b/docs/docs/concepts/pricing.md index f29520455d..037387e019 100644 --- a/docs/docs/concepts/pricing.md +++ b/docs/docs/concepts/pricing.md @@ -50,11 +50,11 @@ While InvenTree can support any of the currencies defined in the ISO 3166 standa ### Exchange Rate Data -The exchange rate data is provided by a [currency plugin](../extend/plugins/currency.md) which fetches exchange rate data from an external source. +The exchange rate data is provided by a [currency plugin](../plugins/mixins/currency.md) which fetches exchange rate data from an external source. InvenTree includes a default currency plugin which fetches exchange rate data from the [frankfurter](https://frankfurter.dev/) API, which is an open source currency API made freely available. -However, the user can configure a custom currency plugin to fetch exchange rate data from a different source. If a different currency exchange backend is needed, or a custom implementation is desired, the currency exchange framework can be extended [via plugins](../extend/plugins/currency.md). Plugins which implement custom currency exchange frameworks can be easily integrated into the InvenTree framework. +However, the user can configure a custom currency plugin to fetch exchange rate data from a different source. If a different currency exchange backend is needed, or a custom implementation is desired, the currency exchange framework can be extended [via plugins](../plugins/mixins/currency.md). Plugins which implement custom currency exchange frameworks can be easily integrated into the InvenTree framework. ### Exchange Rate Updates diff --git a/docs/docs/order/project_codes.md b/docs/docs/concepts/project_codes.md similarity index 87% rename from docs/docs/order/project_codes.md rename to docs/docs/concepts/project_codes.md index aa4d874a97..caebefcc39 100644 --- a/docs/docs/order/project_codes.md +++ b/docs/docs/concepts/project_codes.md @@ -6,7 +6,7 @@ title: Project Codes A project code is a unique identifier assigned to a specific project, which helps in tracking and organizing project-related activities and resources. It enables easy retrieval of project-related data and facilitates project management and reporting. -Individual orders (such as [Purchase Orders](./purchase_order.md) or [Sales Orders](./sales_order.md)) can be assigned a *Project Code* to allocate the order against a particular internal project. +Individual orders (such as [Purchase Orders](../purchasing/purchase_order.md) or [Sales Orders](../sales/sales_order.md)) can be assigned a *Project Code* to allocate the order against a particular internal project. ### Managing Project Codes diff --git a/docs/docs/concepts/threat_model.md b/docs/docs/concepts/threat_model.md index d1489cab0f..57d73b992e 100644 --- a/docs/docs/concepts/threat_model.md +++ b/docs/docs/concepts/threat_model.md @@ -1,7 +1,12 @@ +--- +title: Threat Model +--- + +## Thread Model Deploying InvenTree to production requires to knowledge of the security assumptions and threat model of the underlying system. This document outlines the security assumptions and threat model of InvenTree as a software. It is assumed that the system that InvenTree is deployed on top of is configured following best practices and is trusted. -## Assumed trust +## Assumed Trust 1. The InvenTree server is only available to trusted networks and there are detection mechanisms in place to detect unauthorised access. @@ -21,7 +26,7 @@ Deploying InvenTree to production requires to knowledge of the security assumpti 4. Plugins can access the inventree database and all data in the database 5. Plugins can access all environment variables that are accessible to the server and worker processes -## Possible attack vectors +## Possible Attack Vectors 1. Malicious plugins or templates can overwrite or delete files on the server, bypass security checks, or leak sensitive information. 2. Token phishing attacks can be used to impersonate users. Tokens are not scoped to specific IPs or devices. Limit their usage and use lowest possible user permissions. @@ -31,4 +36,4 @@ There are various checks to gate against common attack vectors but above vectors ## Secure Development Cycle -The InvenTree project is developed following best practices. Read more in the [project security guide](../project/security.md). +The InvenTree project is developed following best practices. Read more in the [project security guide](../security.md). diff --git a/docs/docs/concepts/units.md b/docs/docs/concepts/units.md index 7b26ae445f..2f78f34ede 100644 --- a/docs/docs/concepts/units.md +++ b/docs/docs/concepts/units.md @@ -53,11 +53,11 @@ Physical units are supported by the following InvenTree subsystems: ### Part -The [unit of measure](../part/part.md#units-of-measure) field for the [Part](../part/part.md) model uses real-world units. +The [unit of measure](../part/index.md#units-of-measure) field for the [Part](../part/index.md) model uses real-world units. ### Supplier Part -The [supplier part](../part/part.md/#supplier-parts) model uses real-world units to convert between supplier part quantities and internal stock quantities. Unit conversion rules ensure that only compatible unit types can be supplied +The [supplier part](../part/index.md/#supplier-parts) model uses real-world units to convert between supplier part quantities and internal stock quantities. Unit conversion rules ensure that only compatible unit types can be supplied ### Part Parameter diff --git a/docs/docs/develop/contributing.md b/docs/docs/develop/contributing.md index 64f707b923..f1d3c4f975 100644 --- a/docs/docs/develop/contributing.md +++ b/docs/docs/develop/contributing.md @@ -40,7 +40,7 @@ invoke update invoke dev.setup-dev --tests ``` -Read the [InvenTree setup documentation](../start/intro.md) for a complete installation reference guide. +Read the [InvenTree setup documentation](../start/index.md) for a complete installation reference guide. !!! note "Required Packages" Depending on your system, you may need to install additional software packages as required. diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 62e68cb90e..9c3045113c 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -63,7 +63,7 @@ invoke install ### 'str' object has no attribute 'removeSuffix' -This error occurs because your installed python version is not up to date. We [require Python {{ config.extra.min_python_version }} or newer](./start/intro.md#python-requirements) +This error occurs because your installed python version is not up to date. We [require Python {{ config.extra.min_python_version }} or newer](./start/index.md#python-requirements) You (or your system administrator) needs to update python to meet the minimum requirements for InvenTree. diff --git a/docs/docs/features.md b/docs/docs/features.md deleted file mode 100644 index d40ee9209d..0000000000 --- a/docs/docs/features.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Features ---- - -## InvenTree - -InvenTree is an open-source inventory management system which provides intuitive parts management and stock control. - - -It is designed to be lightweight and easy to use for SME or hobbyist applications, where many existing stock management solutions are bloated and cumbersome to use. However, powerful business logic works in the background to ensure that stock tracking history is maintained, and users have ready access to stock level information. InvenTree is designed to allow for a flexible installation. - -InvenTree is a [Python](https://www.python.org/) and [Django](https://www.djangoproject.com/) application which stores data in a relational database, and serves this data to the user(s) via a web browser, and (optionally) can be integrated into custom applications via an API. - - -## Organize Parts - -Parts are the fundamental element of any inventory. InvenTree groups parts into structured categories which allow you to arrange parts to meet your particular needs. - -[Read more...](./part/part.md) - -## Manage Suppliers - -InvenTree allows you to easily create, modify or delete suppliers and supplier items linked to any part in your inventory. - -[Read more...](./order/company.md#suppliers) - -## Instant Stock Knowledge - -Instantly view current stock for a certain part, in a particular location, or required for an individual build. Stock items are organized in cascading locations and sub-locations, allowing flexible inspection of stock under any location. Stock items can be serialized for tracking of individual items, and test results can be stored against a serialized stock item for the purpose of acceptance testing and commissioning. - -[Read more...](./stock/stock.md) - -## BOM Management - -Intelligent BOM (Bill of Material) management provides a clear understanding of the sub-parts required to make a new part. -InvenTree allows you to upload simple BOM files in multiple formats, and download a detailed BOM with all the information stored in its database. - -[Read more...](./build/bom.md) - -## Build Parts - -InvenTree features a build management system to help you track the progress of your builds. -Builds consume stock items to make new parts, you can decide to automatically or manually allocate parts from your current inventory. - -[Read more...](./build/build.md) - -## Report - -Generate a wide range of reports using custom templates. [Read more...](./report/report.md) - -## API - -The core InvenTree software is implemented on top of a RESTful API, which can be used by external applications. Additionally, a native Python binding library is provided, for rapid development of programs to integrate with InvenTree. - -[Read more...](./api/api.md) - -## Extend and Customize - -InvenTree is designed to be highly extensible. If the core InvenTree functionality does not meet your particular need, InvenTree provides a powerful plugin system which can be used to extend on base functions as required. - -[Read more...](./extend/plugins.md) diff --git a/docs/docs/hooks.py b/docs/docs/hooks.py index d06cea1aa9..c02f8fb092 100644 --- a/docs/docs/hooks.py +++ b/docs/docs/hooks.py @@ -160,7 +160,7 @@ def on_config(config, *args, **kwargs): We can use these to determine (at run time) where we are hosting """ - rtd = os.environ.get('READTHEDOCS', 'False') + rtd = os.environ.get('READTHEDOCS', None) # Note: version selection is handled by RTD internally # Check for 'versions.json' file diff --git a/docs/docs/index.md b/docs/docs/index.md index 49e4416b13..be8f6aec6a 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -5,8 +5,6 @@ hide: - toc --- -## Intuitive Inventory Management - InvenTree is an open-source inventory management system which provides intuitive parts management and stock control. @@ -15,4 +13,60 @@ It is designed to be lightweight and easy to use for SME or hobbyist application InvenTree is a [Python](https://www.python.org/) and [Django](https://www.djangoproject.com/) application which stores data in a relational database, and serves this data to the user(s) via a web browser, and (optionally) can be integrated into custom applications via an API. ----------------------- +------ + +{% with directory="indexgallery", per_page=1 %} +{% include "carousel.html" %} +{% endwith %} + +------ + +## Features + +### Organize Parts + +Parts are the fundamental element of any inventory. InvenTree groups parts into structured categories which allow you to arrange parts to meet your particular needs. + +[Read more...](./part/index.md) + +### Manage Suppliers + +InvenTree allows you to easily create, modify or delete suppliers and supplier items linked to any part in your inventory. + +[Read more...](./purchasing/supplier.md) + +### Instant Stock Knowledge + +Instantly view current stock for a certain part, in a particular location, or required for an individual build. Stock items are organized in cascading locations and sub-locations, allowing flexible inspection of stock under any location. Stock items can be serialized for tracking of individual items, and test results can be stored against a serialized stock item for the purpose of acceptance testing and commissioning. + +[Read more...](./stock/index.md) + +### BOM Management + +Intelligent BOM (Bill of Material) management provides a clear understanding of the sub-parts required to make a new part. +InvenTree allows you to upload simple BOM files in multiple formats, and download a detailed BOM with all the information stored in its database. + +[Read more...](./manufacturing/bom.md) + +### Build Parts + +InvenTree features a build management system to help you track the progress of your builds. +Builds consume stock items to make new parts, you can decide to automatically or manually allocate parts from your current inventory. + +[Read more...](./manufacturing/build.md) + +### Report + +Generate a wide range of reports using custom templates. [Read more...](./report/report.md) + +### API + +The core InvenTree software is implemented on top of a RESTful API, which can be used by external applications. Additionally, a native Python binding library is provided, for rapid development of programs to integrate with InvenTree. + +[Read more...](./api/index.md) + +### Extend and Customize + +InvenTree is designed to be highly extensible. If the core InvenTree functionality does not meet your particular need, InvenTree provides a powerful plugin system which can be used to extend on base functions as required. + +[Read more...](./plugins/index.md) diff --git a/docs/docs/build/allocate.md b/docs/docs/manufacturing/allocate.md similarity index 98% rename from docs/docs/build/allocate.md rename to docs/docs/manufacturing/allocate.md index 06512b4c1f..2505ac85f8 100644 --- a/docs/docs/build/allocate.md +++ b/docs/docs/manufacturing/allocate.md @@ -52,7 +52,7 @@ Navigate to the *Allocate Stock* tab to view the stock allocation table: 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. -In each row, pressing the icon expands the row, showing a list of stock items which have been allocated against this build. +Clicking on a particular row expands the row, showing a list of stock items which have been allocated against this build. !!! 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 diff --git a/docs/docs/build/bom.md b/docs/docs/manufacturing/bom.md similarity index 78% rename from docs/docs/build/bom.md rename to docs/docs/manufacturing/bom.md index e4ee23d29a..a9a275eb79 100644 --- a/docs/docs/build/bom.md +++ b/docs/docs/manufacturing/bom.md @@ -8,6 +8,10 @@ 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 %} + ## BOM Line Items A BOM for a particular assembly is comprised of a number (zero or more) of BOM "Line Items", each of which has the following properties: @@ -33,11 +37,7 @@ In the example below, see that the *Wood Screw* line item is marked as consumabl {% include 'img.html' %} {% endwith %} -Further, in the [Build Order](./build.md) stock allocation table, we see that this line item cannot be allocated, as it is *consumable*: - -{% with id="build_item_consumable", url="build/build_consumable_item.png", description="Consumable Build Item" %} -{% include 'img.html' %} -{% endwith %} +Further, in the [Build Order](./build.md) stock allocation table, we see that this line item cannot be allocated, as it is *consumable*. ### Substitute BOM Line Items @@ -96,7 +96,7 @@ BOMs can be created manually, by adjusting individual line items, or by upload a ### Add BOM Item -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 then, after the page reloads, click on the icon. +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" %} @@ -107,7 +107,7 @@ Fill-out the `Quantity` (required), `Reference`, `Overage` and `Note` (optional) ### Add Substitute for BOM Item -To manually add a substitute for a BOM item, click on the icon in the *Actions* columns. +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" %} @@ -116,32 +116,6 @@ The `Edit BOM Item Substitutes` form will be displayed: Select a part in the list and click on "Add Substitute" button to confirm. - -### Validate BOM - -After [adding BOM items manually](#add-bom-item) or uploading a BOM file, you should see the following view: -{% with id="bom_invalid", url="build/bom_invalid.png", description="Invalid BOM View" %} -{% include 'img.html' %} -{% endwith %} - -The first message in the red box `The BOM for PCBA TEST has changed, and must be validated.` points out that InvenTree BOM needs to be "validated". BOM validation is a way to ensure a BOM does not have duplicate items/parts. - -To process with BOM validation, click on the icon and the `Validate BOM` form will be displayed. Click one the "Validate" switch then click on Submit - -{% with id="bom_valid", url="build/bom_valid.png", description="Valid BOM View" %} -{% include 'img.html' %} -{% endwith %} - ## Multi Level BOMs Multi-level (hierarchical) BOMs are natively supported by InvenTree. A Bill of Materials (BOM) can contain sub-assemblies which themselves have a defined BOM. This can continue for an unlimited number of levels. - -When viewing a BOM table, sub-assemblies are not loaded by default, but can be loaded "on demand" by pressing the icon associated with the particular subassembly: - -{% with id="bom_flat", url="build/bom_flat.png", description="Flat BOM Table" %} -{% include 'img.html' %} -{% endwith %} - -{% with id="bom_expanded", url="build/bom_expanded.png", description="Expanded BOM Table" %} -{% include 'img.html' %} -{% endwith %} diff --git a/docs/docs/build/build.md b/docs/docs/manufacturing/build.md similarity index 97% rename from docs/docs/build/build.md rename to docs/docs/manufacturing/build.md index cfa1931bdf..197faaf432 100644 --- a/docs/docs/build/build.md +++ b/docs/docs/manufacturing/build.md @@ -6,7 +6,7 @@ title: Build Orders A *Build Order* is used to create new stock by assembling component parts, according to a [Bill of Materials](./bom.md) (BOM). -A BOM can be specified for any [Part](../part/part.md) which is designated as an *Assembly*. The BOM consists of other Parts which are designated as *Components*. +A BOM can be specified for any [Part](../part/index.md) which is designated as an *Assembly*. The BOM consists of other Parts which are designated as *Components*. A *Build Order* uses the BOM to allocate stock items to the assembly process. As the *Build Order* is completed, the required stock quantities are subtracted from allocated stock items. @@ -238,7 +238,7 @@ When creating a new build order, you have the option to automatically generate b ## Complete Build Order -To complete a build, click on icon on the build detail page, the `Complete Build` form will be displayed. +To complete a build, click on {{ icon("tools") }} icon on the build detail page, the `Complete Build` form will be displayed. The form will validate the build order is ready to be completed, and will prevent you from continuing if any of the below conditions are present unless you select one of the presented options to override the validation and accept completion of the build anyway. @@ -266,7 +266,7 @@ Finally, click on the "Complete Build" button to process the build completion. ## Cancel Build Order -To cancel a build, click on icon on the build detail page. +To cancel a build, click on {{ icon("circle-x", color="red") }} icon on the build detail page. The `Cancel Build` form will be displayed, click on the confirmation switch then click on the "Cancel Build" button to process the build cancellation. diff --git a/docs/docs/build/example.md b/docs/docs/manufacturing/example.md similarity index 100% rename from docs/docs/build/example.md rename to docs/docs/manufacturing/example.md diff --git a/docs/docs/manufacturing/index.md b/docs/docs/manufacturing/index.md new file mode 100644 index 0000000000..433f375e38 --- /dev/null +++ b/docs/docs/manufacturing/index.md @@ -0,0 +1,25 @@ +--- +title: Manufacturing +--- + +## Manufacturing + +InvenTree offers a comprehensive and flexible manufacturing system designed to streamline production workflows, manage inventory consumption, and track build progress in real-time. It is ideal for organizations looking to manage in-house manufacturing, sub-assemblies, and production lines with high visibility and control. + +### BOM Support + +InvenTree provides comprehensive multi-level BOM (Bill of Material) support, allowing users to define complex assemblies with multiple sub-components. BOMs can be created and managed directly within the InvenTree interface, enabling users to easily track the components required for each assembly. + +Read more about BOM management in the [BOM documentation](./bom.md). + +### Build Orders + +Build orders are used to manage the manufacturing process, allowing users to create and track production runs for specific assemblies. Each build order is linked to a specific BOM, ensuring that the correct components are consumed during the manufacturing process. + +Read more about build orders in the [Build Order documentation](./build.md). + +### Stock Allocation + +InvenTree allows users to allocate stock items to specific build orders, ensuring that the required components are reserved for production. This helps to prevent stock shortages and ensures that the right parts are available when needed. + +Read more about stock allocation in the [Stock Allocation documentation](./allocate.md). diff --git a/docs/docs/build/output.md b/docs/docs/manufacturing/output.md similarity index 96% rename from docs/docs/build/output.md rename to docs/docs/manufacturing/output.md index ebccedc338..e907c02dd6 100644 --- a/docs/docs/build/output.md +++ b/docs/docs/manufacturing/output.md @@ -28,7 +28,7 @@ The *Completed Outputs* tab displays any [completed](#complete-build-output) or ## Create Build Output -Create a new build output by pressing the New Build Output button under the [incomplete outputs](#incomplete-outputs) tab: +Create a new build output by pressing the {{ icon("plus-circle") }} New Build Output 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" %} @@ -74,7 +74,7 @@ The following options are available when completing a build output: | Option | Description | | --- | --- | | Status | The [stock status](../stock/status.md) for the completed outputs | -| Location | The [stock location](../stock/stock.md#stock-location) where the outputs will be located | +| Location | The [stock location](../stock/index.md#stock-location) where the outputs will be located | | Notes | Any additional notes associated with the completion of these outputs | | Accept Incomplete Allocation | If selected, this option allows [tracked build outputs](./allocate.md#tracked-build-outputs) to be completed in the case where required BOM items have not been fully allocated | diff --git a/docs/docs/order/company.md b/docs/docs/order/company.md deleted file mode 100644 index 4af748f8b2..0000000000 --- a/docs/docs/order/company.md +++ /dev/null @@ -1,250 +0,0 @@ ---- -title: External Companies ---- - -## Companies - -External companies are represented by the *Company* database model. Each company may be classified into the following categories: - -- [Customer](#customers) -- [Supplier](#suppliers) -- [Manufacturer](#manufacturers) - -!!! tip Multi Purpose - A company may be allocated to multiple categories, for example, a company may be both a supplier and a customer. - -### Edit Company - -To edit a company, click on the Edit Company icon in the actions menu. Edit the company information, and then click on Submit. - -!!! warning "Permission Required" - The edit button will not be available to users who do not have the required permissions to edit the company - -### Disable Company - -Rather than deleting a company, it is possible to disable it. This will prevent the company from being used in new orders, but will not remove it from the database. Additionally, any existing orders associated with the company (and other linked items such as supplier parts, for a supplier) will remain intact. Unless the company is re-enabled, it will not be available for selection in new orders. - -It is recommended to disable a company rather than deleting it, as this will preserve the integrity of historical data. - -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 %} - -To re-enable a company, simply follow the same process and set the `active` attribute to `True`. - -### Delete Company - -To delete a company, click on the icon under the actions menu. Confirm the deletion using the checkbox then click on Submit - -!!! warning "Permission Required" - The edit button will not be available to users who do not have the required permissions to delete the company - -!!! danger "Take Care" - Deleting a company instance will also remove any orders or supplied parts associated with that company! - -### Contacts - -Each company can have multiple assigned *Contacts*. A contact identifies an individual who is associated with the company, including information such as name, email address, phone number, etc. - -The list of contacts associated with a particular company is available in the Contacts navigation tab: - -{% with id="contact_list", url="order/contact_list.png", description="Contact List" %} -{% include "img.html" %} -{% endwith %} - - -A *contact* can be assigned to orders, (such as [purchase orders](./purchase_order.md) or [sales orders](./sales_order.md)). - -### Addresses - -A company can have multiple registered addresses for use with all types of orders. -An address is broken down to internationally recognised elements that are designed to allow for formatting an address according to user needs. -Addresses are composed differently across the world, and InvenTree reflects this by splitting addresses into components: -- Line 1: Main street address -- Line 2: Extra street address line -- Postal Code: Also known as ZIP code, this is normally a number 3-5 digits in length -- City: The city/region tied to the postal code -- Province: The larger region the address is located in. Also known as State in the US -- Country: Country the address is located in, written in CAPS - -Here are a couple of examples of how the address structure differs by country, but these components can construct a correctly formatted address for any given country. - -UK address format: -Recipient -Line 1 -Line 2 -City -Postal Code -Country - -US Address Format: -Recipient -Line 1 -Line 2 -City State Postal Code -Country - - -Addresses can be accessed by the Addresses navigation tab. - -#### Primary Address - -Each company can have exactly one (1) primary address. -This address is the default shown on the company profile, and the one that is automatically suggested when creating an order. -Marking a new address as primary will remove the mark from the old primary address. - -## Customers - -A *customer* is an external client to whom parts or services are sold. - -To access the customer page, click on the Sell navigation tab and click on Customers option in the dropdown list. - -!!! warning - **Viewing**, **adding**, **editing** and **deleting** customers require the corresponding [Sales Orders user permissions](../settings/permissions.md) - -### Add Customer - -Once the customer page is loaded, click on the New Customer button: the "Create new Customer" form opens. Fill-in the manufacturer information (`Company name` and `Company description` are required) then click on Submit - -## Manufacturers - -A manufacturer is an external **producer** of parts and raw materials. - -!!! info - **Viewing**, **adding**, **editing** and **deleting** manufacturers require the corresponding [Purchase Orders user permissions](../settings/permissions.md) - -To access the list of manufacturers , click on the Buy navigation tab and click on Manufacturers option in the dropdown list. - -{% with id="manufacturer_list", url="order/manufacturer_list.png", description="Manufacturer List" %} -{% include "img.html" %} -{% endwith %} - -### Add Manufacturer - -Once the manufacturer page is loaded, click on the New Manufacturer button: the "Create new Manufacturer" form opens. Fill-in the manufacturer information (`Company name` and `Company description` are required) then click on Submit - -!!! info "Manufacturer vs Supplier" - In the case the manufacturer sells directly to customers, you may want to enable the checkbox `is supplier` before submitting the form (you can also enable it later on). Purchase orders rely exclusively on [supplier parts](#supplier-parts), therefore the manufacturer will need to be set as a supplier too. - - -### Manufacturer Parts - -Manufacturer parts are linked to a manufacturer and defined as manufacturable items. - -!!! warning - **Viewing**, **adding**, **editing** and **deleting** manufacturer parts require the corresponding [Purchase Orders user permissions](../settings/permissions.md) - -#### Add Manufacturer Part - -To create a manufacturer part, you have the following options: - -* either navigate to a Part detail page then click on the Suppliers tab -* or navigate to a Manufacturer detail page then click on the Manufactured Parts tab. - -Whichever you pick, click on the New Manufacturer Part button to load the "Create New Manufacturer Part" form. Fill out the form with the manufacturer part information then click on Submit - -#### Edit Manufacturer Part - -To edit a manufacturer part, first access the manufacturer part detail page with one of the following options: - -* either navigate to a Part detail page, click on the Suppliers tab then, in the Part Manufacturers table, click on the _MPN_ link -* or navigate to a Manufacturer detail page, click on the Manufactured Parts tab then click on the _MPN_ link. - -After the manufacturer part details are loaded, click on the icon next to the manufacturer part image. Edit the manufacturer part information then click on Submit - -#### Delete Manufacturer Part - -To delete a manufacturer part, first access the manufacturer part detail page like in the [Edit Manufacturer Part](#edit-manufacturer-part) section. - -After the manufacturer part details are loaded, click on the icon next to the manufacturer part image. Review the the information for the manufacturer part to be deleted, confirm the deletion using the checkbox then click on Submit - -## Suppliers - -A supplier is an external **vendor** of parts and raw materials. - -To access the supplier page, click on the Buy navigation tab and click on Suppliers option in the dropdown list. - -{% with id="supplier_list", url="order/supplier_list.png", description="Supplier List" %} -{% include "img.html" %} -{% endwith %} - -!!! info - **Viewing**, **adding**, **editing** and **deleting** suppliers require the corresponding [Purchase Orders user permissions](../settings/permissions.md) - -### Add Supplier - -Once the supplier page is loaded, click on the New Supplier button: the "Create new Supplier" form opens. Fill-in the supplier information (`Company name` and `Company description` are required) then click on Submit - -!!! info "Supplier vs Manufacturer" - In the case the supplier is a manufacturer who sells directly to customers, you may want to enable the checkbox `is manufacturer` before submitting the form (you can also enable it later on). - -### Supplier Parts - -Supplier parts are linked to a supplier and defined as purchasable items. - -!!! warning - **Viewing**, **adding**, **editing** and **deleting** supplier parts require the corresponding [Purchase Orders user permissions](../settings/permissions.md) - -#### Add Supplier Part - -To create a supplier part, you have the following options: - -1. navigate to a Part detail page then click on the Suppliers tab -0. navigate to a Supplier detail page then click on the Supplied Parts tab -0. navigate to a Manufacturer detail page then click on the Supplied Parts tab. - -Whichever you pick, click on the New Supplier Part button to load the "Create new Supplier Part" form. Fill out the form with the supplier part information then click on Submit - -#### Edit Supplier Part - -To edit a supplier part, first access the supplier part detail page with one of the following options: - -1. navigate to a Part detail page, click on the Suppliers tab then, in the Part Suppliers table, click on the corresponding _Supplier Part_ link -0. navigate to a Supplier detail page, click on the Supplied Parts tab then click on the corresponding _Supplier Part_ link -0. navigate to a Manufacturer detail page, click on the Supplied Parts tab then click on the corresponding _Supplier Part_ link. - -After the supplier part details are loaded, click on the icon next to the supplier part image. Edit the supplier part information then click on Submit - -#### Disable Supplier Part - -Supplier parts can be individually disabled - for example, if a supplier part is no longer available for purchase. By disabling the part in the InvenTree system, it will no longer be available for selection in new purchase orders. However, any existing purchase orders which reference the supplier part will remain intact. - -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 %} - -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 %} - -It is recommended to disable a supplier part rather than deleting it, as this will preserve the integrity of historical data. - -#### Delete Supplier Part - -To delete a supplier part, first access the supplier part detail page like in the [Edit Supplier Part](#edit-supplier-part) section. - -After the supplier part details are loaded, click on the icon next to the supplier part image. Review the the information for the supplier part to be deleted, confirm the deletion using the checkbox then click on Submit - -#### Supplier Part Availability - -InvenTree supports tracking 'availability' information for supplier parts. While this information can be updated manually, it is more useful when used in conjunction with the InvenTree plugin system. - -A custom can periodically request availability information (via a supplier API), and update this availability information for each supplier part. - -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 %} - -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 %} diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md index 46750fbd67..43c9ff4a7a 100644 --- a/docs/docs/part/create.md +++ b/docs/docs/part/create.md @@ -9,7 +9,7 @@ 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", descript="New Part" %} +{% with id="new", url="part/new_part.png", description="New Part" %} {% include "img.html" %} {% endwith %} @@ -17,7 +17,7 @@ New parts can be created from the *Part Category* view, by pressing the *New Par A part creation form is opened as shown below: -{% with id="newform", url="part/part_create_form.png", descript="New Part Form" %} +{% with id="newform", url="part/part_create_form.png", description="New Part Form" %} {% include "img.html" %} {% endwith %} @@ -30,10 +30,6 @@ Once the form is completed, the browser window is redirected to the new part det If the *Create Initial Stock* setting is enabled, then an extra section is available in the part creation form to create an initial quantity of stock for the newly created part: -{% with id="setting", url="part/create_initial_stock_option.png", description="Create stock option" %} -{% include "img.html" %} -{% endwith %} - 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" %} @@ -64,6 +60,6 @@ If the *Add Supplier Data* option is checked, then supplier part and manufacture The following alternative methods for creating parts are supported: -- [Via the REST API](../api/api.md) -- [Using the Python library](../api/python/python.md) +- [Via the REST API](../api/index.md) +- [Using the Python library](../api/python/index.md) - [Within the Admin interface](../settings/admin.md) diff --git a/docs/docs/part/part.md b/docs/docs/part/index.md similarity index 87% rename from docs/docs/part/part.md rename to docs/docs/part/index.md index 280d787fcb..7f359ee2c8 100644 --- a/docs/docs/part/part.md +++ b/docs/docs/part/index.md @@ -41,11 +41,11 @@ A *Template* part is one which can have *variants* which exist underneath it. [R ### Assembly -If a part is designated as an *Assembly* it can be created (or built) from other component parts. As an example, a circuit board assembly is made using multiple electronic components, which are tracked in the system. An *Assembly* Part has a Bill of Materials (BOM) which lists all the required sub-components. [Read further information about BOM management here](../build/bom.md). +If a part is designated as an *Assembly* it can be created (or built) from other component parts. As an example, a circuit board assembly is made using multiple electronic components, which are tracked in the system. An *Assembly* Part has a Bill of Materials (BOM) which lists all the required sub-components. [Read further information about BOM management here](../manufacturing/bom.md). ### Component -If a part is designated as a *Component* it can be used as a sub-component of an *Assembly*. [Read further information about BOM management here](../build/bom.md) +If a part is designated as a *Component* it can be used as a sub-component of an *Assembly*. [Read further information about BOM management here](../manufacturing/bom.md) ### Testable @@ -63,15 +63,15 @@ If a part is designated as *Purchaseable* it can be purchased from external supp #### Suppliers -A [Supplier](../order/company.md#suppliers) is an external vendor who provides goods or services. +A [Supplier](../purchasing/supplier.md) is an external vendor who provides goods or services. #### Supplier Parts -Purchaseable parts can be linked to [Supplier Parts](../order/company.md#supplier-parts). A supplier part represents an individual piece or unit that is procured from an external vendor. +Purchaseable parts can be linked to [Supplier Parts](../purchasing/supplier.md#supplier-parts). A supplier part represents an individual piece or unit that is procured from an external vendor. #### Purchase Orders -A [Purchase Order](../order/purchase_order.md) allows parts to be ordered from an external supplier. +A [Purchase Order](../purchasing/purchase_order.md) allows parts to be ordered from an external supplier. ### Salable @@ -106,7 +106,7 @@ It is possible to track parts using physical quantity values, such as *metres* o ### Supplier Part Units -By default, units of measure for [supplier parts](../order/company.md#supplier-parts) are specified in the same unit as their base part. However, supplier part units can be changed to any unit *which is compatible with the base unit*. +By default, units of measure for [supplier parts](../purchasing/supplier.md#supplier-parts) are specified in the same unit as their base part. However, supplier part units can be changed to any unit *which is compatible with the base unit*. !!! info "Example: Supplier Part Units" If the base part has a unit of `metres` then valid units for any supplier parts would include `feet`, `cm`, `inches` (etc) @@ -147,7 +147,7 @@ In the web interface, part images can be uploaded directly from the [part view]( #### API -Image upload is supported via the [InvenTree API](../api/api.md), allowing images to be associated with parts programmatically. Further, this means that the [Python interface](../api/python/python.md) also supports image upload. +Image upload is supported via the [InvenTree API](../api/index.md), allowing images to be associated with parts programmatically. Further, this means that the [Python interface](../api/python/index.md) also supports image upload. #### Mobile App diff --git a/docs/docs/part/notification.md b/docs/docs/part/notification.md index 27aed5a9cd..745495434f 100644 --- a/docs/docs/part/notification.md +++ b/docs/docs/part/notification.md @@ -32,14 +32,6 @@ All past notification are listed in the history. They can be deleted one-by-one {% include 'img.html' %} {% endwith %} -## Subscription List - -Users can view the parts and categories they are subscribed to on the InvenTree home page: - -{% with id="cat_subs", url="part/cat_subs.png", description="Category subscription list" %} -{% include 'img.html' %} -{% endwith %} - ## Part Notification Events ### Low Stock Notification @@ -50,7 +42,7 @@ Any users who are subscribed to notifications for the part in question will rece ### Build Order Notification -When a new [Build Order](../build/build.md) is created, the InvenTree software checks to see if any of the parts required to complete the order are low on stock. +When a new [Build Order](../manufacturing/build.md) is created, the InvenTree software checks to see if any of the parts required to complete the order are low on stock. If there are any parts with low stock, a notification is generated for any users subscribed to notifications for the part being built. @@ -88,8 +80,4 @@ When subscribed to a *Part Category*, a user will receive notifications when par - Any parts contained in the category - Any parts contained in the lower level categories -Subscribing to a part category operates in the same manner as for a part - simply click on the notification icon: - -{% with id="cat_sub", url="part/category_notification.png", description="Subscribe to part category" %} -{% include 'img.html' %} -{% endwith %} +Subscribing to a part category operates in the same manner as for a part - simply click on the notification icon. diff --git a/docs/docs/part/parameter.md b/docs/docs/part/parameter.md index 01058c1c87..1eeffe254e 100644 --- a/docs/docs/part/parameter.md +++ b/docs/docs/part/parameter.md @@ -60,7 +60,7 @@ Select the parameter `Template` you would like to use for this parameter, fill-o ## Parametric Tables -Parametric tables gather all parameters from all parts inside a particular [part category](./part.md#part-category) to be sorted and filtered. +Parametric tables gather all parameters from all parts inside a particular [part category](./index.md#part-category) to be sorted and filtered. To access a category's parametric table, click on the "Parameters" tab within the category view: diff --git a/docs/docs/part/pricing.md b/docs/docs/part/pricing.md index 46a08f8741..507e72ce0c 100644 --- a/docs/docs/part/pricing.md +++ b/docs/docs/part/pricing.md @@ -11,10 +11,10 @@ Pricing information can be determined from multiple sources: | Pricing Source | Description | Linked to | | --- | --- | ---| -| Internal Price | How much a part costs to make | [Part](../part/part.md) | -| Supplier Price | The price to theoretically purchase a part from a given supplier (with price-breaks) | [Supplier](../order/company.md#suppliers) | -| Purchase Cost | Historical cost information for parts purchased | [Purchase Order](../order/purchase_order.md) | -| BOM Price | Total price for an assembly (total price of all component items) | [Part](../part/part.md) | +| Internal Price | How much a part costs to make | [Part](../part/index.md) | +| Supplier Price | The price to theoretically purchase a part from a given supplier (with price-breaks) | [Supplier](../purchasing/supplier.md) | +| Purchase Cost | Historical cost information for parts purchased | [Purchase Order](../purchasing/purchase_order.md) | +| BOM Price | Total price for an assembly (total price of all component items) | [Part](../part/index.md) | #### Override Pricing @@ -26,8 +26,8 @@ Additionally, the following information is stored for each part, in relation to | Pricing Source | Description | Linked to | | --- | --- | --- | -| Sale Price | How much a salable item is sold for (with price-breaks) | [Part](../part/part.md) | -| Sale Cost | How much an item was sold for | [Sales Order](../order/sales_order.md) | +| Sale Price | How much a salable item is sold for (with price-breaks) | [Part](../part/index.md) | +| Sale Cost | How much an item was sold for | [Sales Order](../sales/sales_order.md) | ## Pricing Tab @@ -75,7 +75,7 @@ If the **Internal Price Override** setting is enabled, then internal pricing dat ### Purchase History -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](../order/purchase_order.md). +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' %} @@ -91,7 +91,7 @@ If supplier pricing information is available, this can be also used to determine ### BOM Pricing -If a Part is designated as an *assembly*, then the [Bill of Materials](../build/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. +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' %} @@ -122,7 +122,7 @@ If the Part is designated as *Salable* then sale price breaks are made available ### 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](../order/sales_order.md). +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' %} diff --git a/docs/docs/part/stocktake.md b/docs/docs/part/stocktake.md index 377eac8868..85ad6676d0 100644 --- a/docs/docs/part/stocktake.md +++ b/docs/docs/part/stocktake.md @@ -9,8 +9,8 @@ A *Stocktake* refers to a "snapshot" of stock levels for a particular part, at a In particular, an individual *Stocktake* record tracks the following information: - The date of the Stocktake event -- A reference to the [part](./part.md) which is being counted -- The total number of individual [stock items](../stock/stock.md) available +- A reference to the [part](./index.md) which is being counted +- The total number of individual [stock items](../stock/index.md) available - The total stock quantity of available stock - The total cost of stock on hand @@ -107,9 +107,9 @@ When performing a stocktake, various options are presented to the user: | Option | Description | | --- | --- | -| Part | Limit stocktake context to a part. If the selected part is a [template part](./part.md#template), any variant parts will also be included in the stocktake | -| Category | Limit stocktake context to a single [part category](./part.md#part-category). Parts which exist in child categories (under the selected parent category) will also be included. | -| Location | Limit stocktake context to a single [stock location](../stock/stock.md#stock-location). Any parts which have stock items contained in this location (or any child locations) will be included in the stocktake | +| Part | Limit stocktake context to a part. If the selected part is a [template part](./index.md#template), any variant parts will also be included in the stocktake | +| Category | Limit stocktake context to a single [part category](./index.md#part-category). Parts which exist in child categories (under the selected parent category) will also be included. | +| Location | Limit stocktake context to a single [stock location](../stock/index.md#stock-location). Any parts which have stock items contained in this location (or any child locations) will be included in the stocktake | | Generate Report | Select this option to generate a [stocktake report](#stocktake-reports) for the selected parts. | | Update Parts | Select this option to save a new stocktake record for each selected part. | @@ -143,4 +143,4 @@ If enabled, stocktake reports can be generated automatically at a configured int ### API Functionality -Stocktake actions can also be performed via the [API](../api/api.md). +Stocktake actions can also be performed via the [API](../api/index.md). diff --git a/docs/docs/part/template.md b/docs/docs/part/template.md index cb7a6d212b..dcbd2acb92 100644 --- a/docs/docs/part/template.md +++ b/docs/docs/part/template.md @@ -23,13 +23,10 @@ The template / variant relationship is subtly different to the category / part r Any part can be set as "Template" part. To do so: -1. navigate to a specific part detail page -0. click on the "Details" tab -0. locate the part options on the right-hand side -0. toggle the `Template` option so it shows green / slider to the right: -{% with id="enable_template_part", url="part/enable_template_part.png", description="Enable Template Part Option" %} -{% include 'img.html' %} -{% endwith %} +1. Navigate to a specific part detail page +2. Click on the "Details" tab +3. Locate the part options on the right-hand side +4. Toggle the `Template` option so it shows green / slider to the right: ### Create Variant diff --git a/docs/docs/part/test.md b/docs/docs/part/test.md index 56e947099d..c3c0fc8ff0 100644 --- a/docs/docs/part/test.md +++ b/docs/docs/part/test.md @@ -4,7 +4,7 @@ title: Part Test Templates ## Part Test Templates -Parts which are designated as [testable](./part.md#testable) can define templates for tests which are to be performed against individual stock items corresponding to the part. +Parts which are designated as [testable](./index.md#testable) can define templates for tests which are to be performed against individual stock items corresponding to the part. A test template defines the parameters of the test; the individual stock items can then have associated test results which correspond to a test template. diff --git a/docs/docs/part/trackable.md b/docs/docs/part/trackable.md index 4810c0a94c..834a60d407 100644 --- a/docs/docs/part/trackable.md +++ b/docs/docs/part/trackable.md @@ -2,13 +2,13 @@ title: Trackable Parts --- -Denoting a part as *Trackble* changes the way that [stock items](../stock/stock.md) associated with the particular part are handled in the database. A trackable part also has more restrictions imposed by the database scheme. +Denoting a part as *Trackble* changes the way that [stock items](../stock/index.md) associated with the particular part are handled in the database. A trackable part also has more restrictions imposed by the database scheme. ## Stock Tracking For many parts in an InvenTree database, simply tracking current stock levels (and locations) is sufficient. However, some parts require more extensive tracking than simple stock level knowledge. -Any stock item associated with a trackable part *must* have either a batch number or a serial number. This includes stock created manually or via an internal process (such as a [Purchase Order](../order/purchase_order.md) or a [Build Order](../build/build.md)). +Any stock item associated with a trackable part *must* have either a batch number or a serial number. This includes stock created manually or via an internal process (such as a [Purchase Order](../purchasing/purchase_order.md) or a [Build Order](../manufacturing/build.md)). ## Assign Serial Numbers @@ -35,4 +35,4 @@ For example: ## Build Orders -[Build orders](../build/build.md) have some extra requirements when either building a trackable part, or using parts in the Bill of Materials which are themselves trackable. +[Build orders](../manufacturing/build.md) have some extra requirements when either building a trackable part, or using parts in the Bill of Materials which are themselves trackable. diff --git a/docs/docs/part/views.md b/docs/docs/part/views.md index 2371a7f26d..10882707c1 100644 --- a/docs/docs/part/views.md +++ b/docs/docs/part/views.md @@ -4,22 +4,12 @@ title: Part Views ## Part Views -The main part view is divided into 4 different panels: +The Part detail view page provides a detailed view of a single part in the system. The page is divided into several sections, which are described in this document. -1. Categories -2. Details -3. Tabs -4. Content of each tab - -{% with id="part_view_intro", url="part/part_view_intro.png", description="Part View Introduction" %} -{% include 'img.html' %} -{% endwith %} -

- -## Categories +### Category Breadcrumb List The categories of each part is displayed on the top navigation bar as show in the above screenshot. -[Click here](./part.md#part-category) for more information about categories. +[Click here](./index.md#part-category) for more information about categories. ## Part Details @@ -93,7 +83,7 @@ The *Allocated* tab displays how many units of this part have been allocated to ### Bill of Materials -The *BOM* tab displays the [Bill of Materials](../build/bom.md) - a list of sub-components used to build an assembly. Each row in the BOM specifies a quantity of another Part which is required to build the assembly. This tab is only visible if the Part is an *assembly* (meaning it can be build from other parts). +The *BOM* tab displays the [Bill of Materials](../manufacturing/bom.md) - a list of sub-components used to build an assembly. Each row in the BOM specifies a quantity of another Part which is required to build the assembly. This tab is only visible if the Part is an *assembly* (meaning it can be build from other parts). ### Build Orders @@ -145,11 +135,7 @@ Related parts can be added and are shown under a table of the same name in the " {% include 'img.html' %} {% endwith %} -This feature can be enabled or disabled in the global part settings: - -{% with id="related_parts_setting", url="part/part_related_setting.png", description="Related Parts Example View" %} -{% include 'img.html' %} -{% endwith %} +This feature can be enabled or disabled in the global part settings. ### Attachments diff --git a/docs/docs/extend/how_to_plugin.md b/docs/docs/plugins/how_to.md similarity index 80% rename from docs/docs/extend/how_to_plugin.md rename to docs/docs/plugins/how_to.md index 57d5726362..4666da89bc 100644 --- a/docs/docs/extend/how_to_plugin.md +++ b/docs/docs/plugins/how_to.md @@ -15,40 +15,41 @@ If you want to remove parts of the user interface -> remove the permissions for If you add a lot of code (over ~1000 LOC) maybe split it into multiple plugins to make upgrading and testing simpler. ### It will be a plugin! -Great. Now please read the [plugin documentation](./plugins.md) to get an overview of the architecture. It is rather short as a the (builtin) mixins come with extensive docstrings. +Great. Now please read the [plugin documentation](./index.md) to get an overview of the architecture. It is rather short as a the (builtin) mixins come with extensive docstrings. ### Pick your building blocks Consider the use-case for your plugin and define the exact function of the plugin, maybe write it down in a short readme. Then pick the mixins you need (they help reduce custom code and keep the system reliable if internal calls change). -- Is it just a simple REST-endpoint that runs a function ([ActionMixin](./plugins/action.md)) or a parser for a custom barcode format ([BarcodeMixin](./plugins/barcode.md))? -- How does the user interact with the plugin? Is it a UI separate from the main InvenTree UI ([UrlsMixin](./plugins/urls.md)), does it need multiple pages with navigation-links ([NavigationMixin](./plugins/navigation.md)). -- Do you need to extend reporting functionality? Check out the [ReportMixin](./plugins/report.md). -- Will it make calls to external APIs ([APICallMixin](./plugins/api.md) helps there)? -- Do you need to run in the background ([ScheduleMixin](./plugins/schedule.md)) or when things in InvenTree change ([EventMixin](./plugins/event.md))? -- Does the plugin need configuration that should be user changeable ([SettingsMixin](./plugins/settings.md)) or static (just use a yaml in the config dir)? +- Is it just a simple REST-endpoint that runs a function ([ActionMixin](./mixins/action.md)) or a parser for a custom barcode format ([BarcodeMixin](./mixins/barcode.md))? +- How does the user interact with the plugin? Is it a UI separate from the main InvenTree UI ([UrlsMixin](./mixins/urls.md)), does it need multiple pages with navigation-links ([NavigationMixin](./mixins/navigation.md)). +- Do you need to extend reporting functionality? Check out the [ReportMixin](./mixins/report.md). +- Will it make calls to external APIs ([APICallMixin](./mixins/api.md) helps there)? +- Do you need to run in the background ([ScheduleMixin](./mixins/schedule.md)) or when things in InvenTree change ([EventMixin](./mixins/event.md))? +- Does the plugin need configuration that should be user changeable ([SettingsMixin](./mixins/settings.md)) or static (just use a yaml in the config dir)? - You want to receive webhooks? Do not code your own untested function, use the WebhookEndpoint model as a base and override the perform_action method. -- Do you need the full power of Django with custom models and all the complexity that comes with that – welcome to the danger zone and [AppMixin](./plugins/app.md). The plugin will be treated as a app by django and can maybe rack the whole instance. +- Do you need the full power of Django with custom models and all the complexity that comes with that – welcome to the danger zone and [AppMixin](./mixins/app.md). The plugin will be treated as a app by django and can maybe rack the whole instance. ### Define the metadata -Do not forget to [declare the metadata](./plugins.md#plugin-options) for your plugin, those will be used in the settings. At least provide a web link so users can file issues / reach you. + +Do not forget to [declare the metadata](./index.md#plugin-options) for your plugin, those will be used in the settings. At least provide a web link so users can file issues / reach you. ### Development guidelines If you want to make your life easier, try to follow these guidelines; break where it makes sense for your use case. -- keep it simple - more that 1000 LOC are normally to much for a plugin -- use mixins where possible - we try to keep coverage high for them so they are not likely to break -- do not use internal functions - if a functions name starts with `_` it is internal and might change at any time -- keep you imports clean - the APIs for plugins and mixins are young and evolving (see [here](plugins.md#imports)). Use +- Keep it simple - more that 1000 LOC are normally to much for a plugin +- Use mixins where possible - we try to keep coverage high for them so they are not likely to break +- Do not use internal functions - if a functions name starts with `_` it is internal and might change at any time +- Keep you imports clean - the APIs for plugins and mixins are young and evolving (see [here](./index.md#imports)). Use ``` from plugin import InvenTreePlugin, registry from plugin.mixins import APICallMixin, SettingsMixin, ScheduleMixin, BarcodeMixin ``` -- deliver as a package (see [below](#packaging)) -- if you need to use a private infrastructure, use the 'Releases' functions in GitHub or Gitlab. Point to the 'latest' release endpoint when installing to make sure the update function works -- tag your GitHub repo with `inventree` and `inventreeplugins` to make discovery easier. A discovery mechanism using these tags is on the roadmap. -- use GitHub actions to test your plugin regularly (you can [schedule actions](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#schedule)) against the 'latest' [docker-build](https://hub.docker.com/r/inventree/inventree) of InvenTree -- if you use the AppMixin pin your plugin against the stable branch of InvenTree, your migrations might get messed up otherwise +- Feliver as a package (see [below](#packaging)) +- If you need to use a private infrastructure, use the 'Releases' functions in GitHub or Gitlab. Point to the 'latest' release endpoint when installing to make sure the update function works +- Tag your GitHub repo with `inventree` and `inventreeplugins` to make discovery easier. A discovery mechanism using these tags is on the roadmap. +- Use GitHub actions to test your plugin regularly (you can [schedule actions](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#schedule)) against the 'latest' [docker-build](https://hub.docker.com/r/inventree/inventree) of InvenTree +- If you use the AppMixin pin your plugin against the stable branch of InvenTree, your migrations might get messed up otherwise ### Packaging diff --git a/docs/docs/extend/plugins.md b/docs/docs/plugins/index.md similarity index 83% rename from docs/docs/extend/plugins.md rename to docs/docs/plugins/index.md index e7287e3e82..46f4265380 100644 --- a/docs/docs/extend/plugins.md +++ b/docs/docs/plugins/index.md @@ -12,7 +12,7 @@ Plugins can be added from multiple sources: - Plugins can be placed in the external [plugins directory](../start/config.md#plugin-options) - InvenTree built-in plugins are located within the InvenTree source code -For further information, read more about [installing plugins](./plugins/install.md). +For further information, read more about [installing plugins](./install.md). ### Configuration Options @@ -69,7 +69,7 @@ Mixins are split up internally to keep the source tree clean and enable better t The APIs outside of the `plugin` namespace are not structured for public usage and require a more in-depth knowledge of the Django framework. Please ask in GitHub discussions of the `InvenTree` org if you are not sure you are using something the intended way. We do not provide stable interfaces to models or any other internal python APIs. If you need to integrate into these parts please make yourself familiar with the codebase. We follow general Django patterns and only stray from them in limited, special cases. -If you need to react to state changes please use the [EventMixin](./plugins/event.md). +If you need to react to state changes please use the [EventMixin](./mixins/event.md). ### Plugin Options @@ -108,22 +108,22 @@ Supported mixin classes are: | Mixin | Description | | --- | --- | -| [ActionMixin](./plugins/action.md) | Run custom actions | -| [APICallMixin](./plugins/api.md) | Perform calls to external APIs | -| [AppMixin](./plugins/app.md) | Integrate additional database tables | -| [BarcodeMixin](./plugins/barcode.md) | Support custom barcode actions | -| [CurrencyExchangeMixin](./plugins/currency.md) | Custom interfaces for currency exchange rates | -| [DataExport](./plugins/export.md) | Customize data export functionality | -| [EventMixin](./plugins/event.md) | Respond to events | -| [LabelPrintingMixin](./plugins/label.md) | Custom label printing support | -| [LocateMixin](./plugins/locate.md) | Locate and identify stock items | -| [NavigationMixin](./plugins/navigation.md) | Add custom pages to the web interface | -| [ReportMixin](./plugins/report.md) | Add custom context data to reports | -| [ScheduleMixin](./plugins/schedule.md) | Schedule periodic tasks | -| [SettingsMixin](./plugins/settings.md) | Integrate user configurable settings | -| [UserInterfaceMixin](./plugins/ui.md) | Add custom user interface features | -| [UrlsMixin](./plugins/urls.md) | Respond to custom URL endpoints | -| [ValidationMixin](./plugins/validation.md) | Provide custom validation of database models | +| [ActionMixin](./mixins/action.md) | Run custom actions | +| [APICallMixin](./mixins/api.md) | Perform calls to external APIs | +| [AppMixin](./mixins/app.md) | Integrate additional database tables | +| [BarcodeMixin](./mixins/barcode.md) | Support custom barcode actions | +| [CurrencyExchangeMixin](./mixins/currency.md) | Custom interfaces for currency exchange rates | +| [DataExport](./mixins/export.md) | Customize data export functionality | +| [EventMixin](./mixins/event.md) | Respond to events | +| [LabelPrintingMixin](./mixins/label.md) | Custom label printing support | +| [LocateMixin](./mixins/locate.md) | Locate and identify stock items | +| [NavigationMixin](./mixins/navigation.md) | Add custom pages to the web interface | +| [ReportMixin](./mixins/report.md) | Add custom context data to reports | +| [ScheduleMixin](./mixins/schedule.md) | Schedule periodic tasks | +| [SettingsMixin](./mixins/settings.md) | Integrate user configurable settings | +| [UserInterfaceMixin](./mixins/ui.md) | Add custom user interface features | +| [UrlsMixin](./mixins/urls.md) | Respond to custom URL endpoints | +| [ValidationMixin](./mixins/validation.md) | Provide custom validation of database models | ## Static Files diff --git a/docs/docs/extend/plugins/install.md b/docs/docs/plugins/install.md similarity index 93% rename from docs/docs/extend/plugins/install.md rename to docs/docs/plugins/install.md index 24cb1cf545..08c6b0ba08 100644 --- a/docs/docs/extend/plugins/install.md +++ b/docs/docs/plugins/install.md @@ -13,7 +13,7 @@ Installing plugins can be complex! Some common issues are outlined below: #### Enable Plugin Support -To enable custom plugins, plugin support must be activated in the [server configuration](../../start/config.md#plugin-options). This step must be performed by a system administrator before the InvenTree server is started. +To enable custom plugins, plugin support must be activated in the [server configuration](../start/config.md#plugin-options). This step must be performed by a system administrator before the InvenTree server is started. #### Restart Server @@ -59,7 +59,7 @@ Installation via PIP (using the *plugins.txt* file) provides a number of advanta When the server installation is updated via the `invoke update` command, the plugins (as specified in *plugins.txt*) will also be updated automatically. !!! info "Plugin File Location" - The location of your plugin configuration file will depend on your [server configuration](../../start/config.md) + The location of your plugin configuration file will depend on your [server configuration](../start/config.md) #### Web Interface @@ -86,7 +86,7 @@ Custom plugins can be placed in the `data/plugins/` directory, where they will b If you wish to install plugins from local source, rather than PIP, it is better to place your plugins in a directory outside the InvenTree source directory. -To achieve this, set the `INVENTREE_PLUGIN_DIR` environment variable to the directory where locally sourced plugins are located. Refer to the [configuration options](../../start/config.md#plugin-options) for further information. +To achieve this, set the `INVENTREE_PLUGIN_DIR` environment variable to the directory where locally sourced plugins are located. Refer to the [configuration options](../start/config.md#plugin-options) for further information. !!! info "Docker" When running InvenTree in docker, a *plugins* directory is automatically created in the mounted data volume. Any plugins can be placed there, and will be automatically loaded when the server is started. diff --git a/docs/docs/extend/integrate.md b/docs/docs/plugins/integrate.md similarity index 100% rename from docs/docs/extend/integrate.md rename to docs/docs/plugins/integrate.md diff --git a/docs/docs/extend/machines/label_printer.md b/docs/docs/plugins/machines/label_printer.md similarity index 81% rename from docs/docs/extend/machines/label_printer.md rename to docs/docs/plugins/machines/label_printer.md index 060bd3ec0d..2ca8c3a748 100644 --- a/docs/docs/extend/machines/label_printer.md +++ b/docs/docs/plugins/machines/label_printer.md @@ -1,6 +1,6 @@ ## Label printer -Label printer machines can directly print labels for various items in InvenTree. They replace standard [`LabelPrintingMixin`](../plugins/label.md) plugins that are used to connect to physical printers. Using machines rather than a standard `LabelPrintingMixin` plugin has the advantage that machines can be created multiple times using different settings but the same driver. That way multiple label printers of the same brand can be connected. +Label printer machines can directly print labels for various items in InvenTree. They replace standard [`LabelPrintingMixin`](../mixins/label.md) plugins that are used to connect to physical printers. Using machines rather than a standard `LabelPrintingMixin` plugin has the advantage that machines can be created multiple times using different settings but the same driver. That way multiple label printers of the same brand can be connected. ### Writing your own printing driver diff --git a/docs/docs/extend/machines/overview.md b/docs/docs/plugins/machines/overview.md similarity index 98% rename from docs/docs/extend/machines/overview.md rename to docs/docs/plugins/machines/overview.md index 1ec4cc26be..e3d80214c0 100644 --- a/docs/docs/extend/machines/overview.md +++ b/docs/docs/plugins/machines/overview.md @@ -145,7 +145,7 @@ class XYZDriver(ABCBaseDriver): ### Settings -Each machine can have different settings configured. There are machine settings that are specific to that machine type and driver settings that are specific to the driver, but both can be specified individually for each machine. Define them by adding a `MACHINE_SETTINGS` dictionary attribute to either the driver or the machine type. The format follows the same pattern as the `SETTINGS` for normal plugins documented on the [`SettingsMixin`](../plugins/settings.md) +Each machine can have different settings configured. There are machine settings that are specific to that machine type and driver settings that are specific to the driver, but both can be specified individually for each machine. Define them by adding a `MACHINE_SETTINGS` dictionary attribute to either the driver or the machine type. The format follows the same pattern as the `SETTINGS` for normal plugins documented on the [`SettingsMixin`](../mixins/settings.md) ```py class MyXYZDriver(ABCBaseDriver): diff --git a/docs/docs/extend/plugins/metadata.md b/docs/docs/plugins/metadata.md similarity index 85% rename from docs/docs/extend/plugins/metadata.md rename to docs/docs/plugins/metadata.md index 216fe28fad..86999d52af 100644 --- a/docs/docs/extend/plugins/metadata.md +++ b/docs/docs/plugins/metadata.md @@ -4,9 +4,9 @@ title: Model Metadata ## Model Metadata -Plugins have access to internal database models (such at [Parts](../../part/part.md)), and any associated data associated with these models. It may be the case that a particular plugin needs to store some extra information about a particular model instance, to be able to perform custom functionality. +Plugins have access to internal database models (such at [Parts](../part/index.md)), and any associated data associated with these models. It may be the case that a particular plugin needs to store some extra information about a particular model instance, to be able to perform custom functionality. -One way of achieving this would be to create an entirely new database model to keep track of this information, using the [app plugin mixin](./app.md). However, this is a very heavy-handed (and complicated) approach! +One way of achieving this would be to create an entirely new database model to keep track of this information, using the [app plugin mixin](./mixins/app.md). However, this is a very heavy-handed (and complicated) approach! A much simpler and more accessible method of recording custom information against a given model instance is provided "out of the box" - using *Model Metadata*. @@ -83,7 +83,7 @@ An important note with regard to metadata access via the API is the behaviour of ### Python API Access -The [Python API library](../../api/python/python.md) provides similar support for accessing model metadata. Use the `setMetadata` method to retrieve metadata information from the server: +The [Python API library](../api/python/index.md) provides similar support for accessing model metadata. Use the `setMetadata` method to retrieve metadata information from the server: ```python from inventree.api import InvenTreeAPI @@ -128,4 +128,4 @@ There is no guarantee that the data added to a particular model will *not* be ov ### Structured Data -If you need to store data which is more "structured" than JSON objects, consider using the (more complex) [app mixin](../plugins/app.md) to develop custom database tables for your data. +If you need to store data which is more "structured" than JSON objects, consider using the (more complex) [app mixin](./mixins/app.md) to develop custom database tables for your data. diff --git a/docs/docs/extend/plugins/action.md b/docs/docs/plugins/mixins/action.md similarity index 100% rename from docs/docs/extend/plugins/action.md rename to docs/docs/plugins/mixins/action.md diff --git a/docs/docs/extend/plugins/api.md b/docs/docs/plugins/mixins/api.md similarity index 100% rename from docs/docs/extend/plugins/api.md rename to docs/docs/plugins/mixins/api.md diff --git a/docs/docs/extend/plugins/app.md b/docs/docs/plugins/mixins/app.md similarity index 100% rename from docs/docs/extend/plugins/app.md rename to docs/docs/plugins/mixins/app.md diff --git a/docs/docs/extend/plugins/barcode.md b/docs/docs/plugins/mixins/barcode.md similarity index 100% rename from docs/docs/extend/plugins/barcode.md rename to docs/docs/plugins/mixins/barcode.md diff --git a/docs/docs/extend/plugins/currency.md b/docs/docs/plugins/mixins/currency.md similarity index 100% rename from docs/docs/extend/plugins/currency.md rename to docs/docs/plugins/mixins/currency.md diff --git a/docs/docs/extend/plugins/event.md b/docs/docs/plugins/mixins/event.md similarity index 100% rename from docs/docs/extend/plugins/event.md rename to docs/docs/plugins/mixins/event.md diff --git a/docs/docs/extend/plugins/export.md b/docs/docs/plugins/mixins/export.md similarity index 94% rename from docs/docs/extend/plugins/export.md rename to docs/docs/plugins/mixins/export.md index 98c893cfc8..938e7cce36 100644 --- a/docs/docs/extend/plugins/export.md +++ b/docs/docs/plugins/mixins/export.md @@ -4,7 +4,7 @@ title: Data Export Mixin ## DataExportMixin -The `DataExportMixin` class provides a plugin with the ability to customize the data export process. The [InvenTree API](../../api/api.md) provides an integrated method to export a dataset to a tabulated file. The default export process is generic, and simply exports the data presented via the API in a tabulated file format. +The `DataExportMixin` class provides a plugin with the ability to customize the data export process. The [InvenTree API](../../api/index.md) provides an integrated method to export a dataset to a tabulated file. The default export process is generic, and simply exports the data presented via the API in a tabulated file format. Custom data export plugins allow this process to be adjusted: @@ -105,7 +105,7 @@ A generic exporter class which simply serializes the API output into a data file ### BOM Exporter -A custom exporter which only supports [bill of materials](../../build/bom.md) exporting. +A custom exporter which only supports [bill of materials](../../manufacturing/bom.md) exporting. ::: plugin.builtin.exporter.bom_exporter.BomExporterPlugin options: diff --git a/docs/docs/extend/plugins/icon.md b/docs/docs/plugins/mixins/icon.md similarity index 100% rename from docs/docs/extend/plugins/icon.md rename to docs/docs/plugins/mixins/icon.md diff --git a/docs/docs/extend/plugins/label.md b/docs/docs/plugins/mixins/label.md similarity index 100% rename from docs/docs/extend/plugins/label.md rename to docs/docs/plugins/mixins/label.md diff --git a/docs/docs/extend/plugins/locate.md b/docs/docs/plugins/mixins/locate.md similarity index 93% rename from docs/docs/extend/plugins/locate.md rename to docs/docs/plugins/mixins/locate.md index c3bac48679..1f45ba32a6 100644 --- a/docs/docs/extend/plugins/locate.md +++ b/docs/docs/plugins/mixins/locate.md @@ -20,7 +20,7 @@ The possibilities are endless! ### App Integration -If a locate plugin is installed and activated, the [InvenTree mobile app](../../app/app.md) displays a button for locating a StockItem or StockLocation (see below): +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' %} diff --git a/docs/docs/extend/plugins/navigation.md b/docs/docs/plugins/mixins/navigation.md similarity index 92% rename from docs/docs/extend/plugins/navigation.md rename to docs/docs/plugins/mixins/navigation.md index 83f5962519..e7dc8924bc 100644 --- a/docs/docs/extend/plugins/navigation.md +++ b/docs/docs/plugins/mixins/navigation.md @@ -13,11 +13,11 @@ class MyNavigationPlugin(NavigationMixin, InvenTreePlugin): NAME = "NavigationPlugin" NAVIGATION = [ - {'name': 'SampleIntegration', 'link': 'plugin:sample:hi', 'icon': 'fas fa-box'}, + {'name': 'SampleIntegration', 'link': 'plugin:sample:hi', 'icon': 'ti ti-box'}, ] NAVIGATION_TAB_NAME = "Sample Nav" - NAVIGATION_TAB_ICON = 'fas fa-plus' + NAVIGATION_TAB_ICON = 'ti ti-plus-circle' ``` The optional class constants `NAVIGATION_TAB_NAME` and `NAVIGATION_TAB_ICON` can be used to change the name and icon for the parent navigation node. diff --git a/docs/docs/extend/plugins/report.md b/docs/docs/plugins/mixins/report.md similarity index 100% rename from docs/docs/extend/plugins/report.md rename to docs/docs/plugins/mixins/report.md diff --git a/docs/docs/extend/plugins/schedule.md b/docs/docs/plugins/mixins/schedule.md similarity index 100% rename from docs/docs/extend/plugins/schedule.md rename to docs/docs/plugins/mixins/schedule.md diff --git a/docs/docs/extend/plugins/settings.md b/docs/docs/plugins/mixins/settings.md similarity index 100% rename from docs/docs/extend/plugins/settings.md rename to docs/docs/plugins/mixins/settings.md diff --git a/docs/docs/extend/plugins/ui.md b/docs/docs/plugins/mixins/ui.md similarity index 99% rename from docs/docs/extend/plugins/ui.md rename to docs/docs/plugins/mixins/ui.md index a1f7f53ab0..f9ce26ae66 100644 --- a/docs/docs/extend/plugins/ui.md +++ b/docs/docs/plugins/mixins/ui.md @@ -179,7 +179,7 @@ When distributing a custom UI plugin, the plugin should include the necessary fr The simplest (and recommended) way to achieve this is to distribute the compiled javascript files with the plugin package, in a top-level `static` directory. This directory will be automatically collected by InvenTree when the plugin is installed, and the files will be copied to the appropriate location. -Read more about [static plugin files](../plugins.md#static-files) for more information. +Read more about [static plugin files](../index.md#static-files) for more information. ## Sample Plugin diff --git a/docs/docs/extend/plugins/urls.md b/docs/docs/plugins/mixins/urls.md similarity index 100% rename from docs/docs/extend/plugins/urls.md rename to docs/docs/plugins/mixins/urls.md diff --git a/docs/docs/extend/plugins/validation.md b/docs/docs/plugins/mixins/validation.md similarity index 100% rename from docs/docs/extend/plugins/validation.md rename to docs/docs/plugins/mixins/validation.md diff --git a/docs/docs/extend/plugins/tags.md b/docs/docs/plugins/tags.md similarity index 85% rename from docs/docs/extend/plugins/tags.md rename to docs/docs/plugins/tags.md index c7853e0baa..d73749f983 100644 --- a/docs/docs/extend/plugins/tags.md +++ b/docs/docs/plugins/tags.md @@ -8,8 +8,11 @@ Several models in InvenTree can be tagged with arbitrary tags. Tags are useful f Tags are shared between all models that can be tagged. The following models can be tagged: -- [Parts](../../part/part.md) and [Supplier Parts](../../order/company.md#supplier-parts)/[Manufacturer Part](../../order/company.md#manufacturer-parts) -- [Stock Items](../../stock/stock.md#stock-item) / [Stock Location](../../stock/stock.md#stock-location) +- [Parts](../part/index.md) +- [Supplier Parts](../purchasing/supplier.md#supplier-parts) +- [Manufacturer Part](../purchasing/manufacturer.md#manufacturer-parts) +- [Stock Items](../stock/index.md#stock-item) +- [Stock Location](../stock/index.md#stock-location) ## Accessing Tags diff --git a/docs/docs/extend/plugins/test.md b/docs/docs/plugins/test.md similarity index 98% rename from docs/docs/extend/plugins/test.md rename to docs/docs/plugins/test.md index b45e76dbed..c5f3d3dd93 100644 --- a/docs/docs/extend/plugins/test.md +++ b/docs/docs/plugins/test.md @@ -8,7 +8,7 @@ that plugins work correctly and are compatible with future versions too. You can run these tests as part of your ci against the current stable and latest tag to get notified when something breaks before it gets released as part of stable. InvenTree offers a framework for testing. Please refer -to [Unit Tests](../../develop/contributing.md) for more information. +to [Unit Tests](../develop/contributing.md) for more information. ### Prerequisites For plugin testing the following environment variables must be set to True: diff --git a/docs/docs/project/governance.md b/docs/docs/project/governance.md index 90384b4292..f1b09ce156 100644 --- a/docs/docs/project/governance.md +++ b/docs/docs/project/governance.md @@ -1,6 +1,6 @@ As a MIT licensed open-source project, there are not legal obligations for the InvenTree project team or any contributor to provide support or maintenance. The software is provided "as-is" - without warranty of any kind. -However, the project team is committed to providing a reliable and [secure](security.md) code base with predictable upgrade paths. +However, the project team is committed to providing a reliable and [secure](../security.md) code base with predictable upgrade paths. ## Team organisation diff --git a/docs/docs/project/privacy.md b/docs/docs/project/privacy.md new file mode 100644 index 0000000000..3809c1478d --- /dev/null +++ b/docs/docs/project/privacy.md @@ -0,0 +1,38 @@ +--- +title: Privacy +--- + +## InvenTree Privacy Statement + +As far as is practicable, the InvenTree application (comprising the database, web server and associated software) does not record, track or share any identifiable information about its users. InvenTree does not share any user data (as stored in the product database) with other parties. + +### Data Collection + +The InvenTree application does not collect any user information beyond what is stored in the InvenTree database itself. + +Data stored within the InvenTree database is used only for the purposes of fulfilling InvenTree functionality. + +### Cookies + +The InvenTree web application makes use of local cookies to perform core InvenTree functionality maintain a persistent user experience. + +- These cookies are necessary for InvenTree functionality +- These cookies do not record or track any information which can be used to identify the user +- Stored data are not shared with any third parties + +!!! info "Tracking Cookies" + The InvenTree web server does not make use of any tracking cookies, or any third party cookies which share user information with other parties. + +### Data Sharing + +The InvenTree application does not share any information with outside parties or servers. The InvenTree application is completely self contained on the server where it is hosted. + +### Plugins + +Any third party plugins which integrate with the InvenTree server should provide their own privacy notice. The privacy implications of plugins not provided directly by InvenTree may differ to the details on this page. + +## InvenTree Documentation + +The InvenTree documentation is hosted by [readthedocs](https://readthedocs.org/). You can read their privacy policy [here](https://docs.readthedocs.io/en/stable/privacy-policy.html). + +Third party tracking cookies (e.g. Google Analytics) are *explicitly disabled* for the InvenTree documentation server. diff --git a/docs/docs/project/security.md b/docs/docs/project/security.md deleted file mode 100644 index 55f85db06e..0000000000 --- a/docs/docs/project/security.md +++ /dev/null @@ -1,55 +0,0 @@ - -The InvenTree project is committed to providing a secure and safe environment for all users. We know that many of our users rely on InvenTree to manage the inventory and manufacturing for their small and mid-size businesses, and we take that responsibility seriously. - -To that end, we have implemented a number of security measures over the years, which we will outline in this document. - -## Organisational measures - -The InvenTree project is managed by a small team of developers, who are responsible for the ongoing development and maintenance of the software. Two geographically distributed users have administrative access to the InvenTree codebase. Merges are only done by one of these two users, the maintainer Oliver. -Read the Project [Governance](governance.md) document for more information. - -InvenTree is open-source, and we welcome contributions from the community. However, all contributions are reviewed and scrutinised before being merged into the codebase. - -We provide a written [Security Policy]({{ sourcefile("SECURITY.md") }}) in our main repo to ensure that all security issues are handled in a timely manner. - -If we become aware of a security issue, we will take immediate action to address the issue, and will provide a public disclosure of the issue once it has been resolved. We support assigning CVEs to security issues where appropriate. Our [past security advisories can be found here](https://github.com/inventree/InvenTree/security/advisories). - -## Technical measures - -### Code hosting - -The InvenTree project is hosted on GitHub, and we rely on the security measures provided by GitHub to help protect the integrity of the codebase. - -Among those are: - -- Short-lived tokens where possible -- Dependabot for automated dependency updates / alerts -- Integrated security reporting -- (Optional but encouraged) Two-factor authentication for user accounts -- (Optional but encouraged) Signed commits / actions - -### Code style - -We enforce style and security checks in our CI/CD pipeline, and we have several automated tests to ensure that the codebase is secure and functional. -Checks are run on every pull request, and we require that all checks pass before a pull request can be merged. - -### Current versions - -InvenTree is built using the Django framework, which has a strong focus on security. We follow best practices for Django development, and we are committed to keeping the codebase up-to-date with the latest security patches and within supported versions. - -### Test coverage - -We run coverage tests on our codebase to ensure that we have a high level of test coverage above 90%. This is public and can be found [here](https://app.codecov.io/gh/inventree/InvenTree). - -### Pinning dependencies - -We are pinning dependencies to specific versions - aiming for complete reproducibility of builds - wherever possible. Combined with continuous OSV checks, we are able to react quickly to security issues in our dependencies. - -## Best practices - -We follow most of GitHubs community best practices, check our compliance [here](https://github.com/inventree/InvenTree/community). - -We also follow OpenSSF recommendations where applicable and take part in multiple of their security efforts: - -- OSSF Best Practices, currently at a [level of passing](https://www.bestpractices.dev/de/projects/7179) -- OSSF Scorecard, running with each merge [check current state](https://securityscorecards.dev/viewer/?uri=github.com/inventree/InvenTree) diff --git a/docs/docs/purchasing/index.md b/docs/docs/purchasing/index.md new file mode 100644 index 0000000000..35bec174f4 --- /dev/null +++ b/docs/docs/purchasing/index.md @@ -0,0 +1,25 @@ +--- +title: Purchasing +--- + +## Purchasing + +InvenTree provides a comprehensive purchasing system designed to streamline the procurement process, manage suppliers, and track purchase orders. The purchasing system is designed to seamlessly control the ingestion of stock items into the InvenTree database, ensuring that all parts are properly accounted for and tracked throughout their lifecycle. + +### Purchase Orders + +The core of the InvenTree purchasing system is the purchase order (PO). A purchase order is a formal request to a supplier to provide specific parts or materials. Each purchase order is linked to one or more supplier parts, allowing users to easily track the procurement process and manage supplier relationships. + +Read more about purchase orders in the [Purchase Order documentation](./purchase_order.md). + +### Supplier Parts + +InvenTree allows users to define supplier parts, which represent individual pieces or units that are procured from an external vendor. Supplier parts can be linked to specific parts in the InvenTree database, enabling users to easily track the procurement process and manage supplier relationships. + +Read more about supplier parts in the [Supplier Parts documentation](./supplier.md). + +### Manufacturer Parts + +InvenTree also supports manufacturer parts, which represent parts that are manufactured by a specific vendor. Manufacturer parts may be available from multiple suppliers, and users can easily manage these relationships within the InvenTree system. + +Read more about manufacturer parts in the [Manufacturer Parts documentation](./manufacturer.md). diff --git a/docs/docs/purchasing/manufacturer.md b/docs/docs/purchasing/manufacturer.md new file mode 100644 index 0000000000..0e391f5159 --- /dev/null +++ b/docs/docs/purchasing/manufacturer.md @@ -0,0 +1,55 @@ +--- +title: Manufacturers +--- + +## Manufacturers + +A manufacturer is an external **producer** of parts and raw materials. + +!!! info + **Viewing**, **adding**, **editing** and **deleting** manufacturers require the corresponding [Purchase Orders user permissions](../settings/permissions.md) + +To access the list of manufacturers , click on the {{ icon("shopping-cart") }} Buy navigation tab and click on {{ icon("building-factory-2") }} Manufacturers option in the dropdown list. + +{% with id="manufacturer_list", url="order/manufacturer_list.png", description="Manufacturer List" %} +{% include "img.html" %} +{% endwith %} + +### Add Manufacturer + +Once the manufacturer page is loaded, click on the {{ icon("plus-circle") }} New Manufacturer button: the "Create new Manufacturer" form opens. Fill-in the manufacturer information (`Company name` and `Company description` are required) then click on Submit + +!!! info "Manufacturer vs Supplier" + In the case the manufacturer sells directly to customers, you may want to enable the checkbox `is supplier` before submitting the form (you can also enable it later on). Purchase orders rely exclusively on [supplier parts](./supplier.md#supplier-parts), therefore the manufacturer will need to be set as a supplier too. + + +### Manufacturer Parts + +Manufacturer parts are linked to a manufacturer and defined as manufacturable items. + +!!! warning + **Viewing**, **adding**, **editing** and **deleting** manufacturer parts require the corresponding [Purchase Orders user permissions](../settings/permissions.md) + +#### Add Manufacturer Part + +To create a manufacturer part, you have the following options: + +* either navigate to a Part detail page then click on the {{ icon("building") }} Suppliers tab +* or navigate to a Manufacturer detail page then click on the {{ icon("building-factory-2") }} Manufactured Parts tab. + +Whichever you pick, click on the {{ icon("plus-circle") }} New Manufacturer Part button to load the "Create New Manufacturer Part" form. Fill out the form with the manufacturer part information then click on Submit + +#### Edit Manufacturer Part + +To edit a manufacturer part, first access the manufacturer part detail page with one of the following options: + +* either navigate to a Part detail page, click on the {{ icon("building") }} Suppliers tab then, in the Part Manufacturers table, click on the _MPN_ link +* or navigate to a Manufacturer detail page, click on the {{ icon("building-factory-2") }} Manufactured Parts tab then click on the _MPN_ link. + +After the manufacturer part details are loaded, click on the {{ icon("edit", color="blue", title="Edit") }} icon next to the manufacturer part image. Edit the manufacturer part information then click on Submit + +#### Delete Manufacturer Part + +To delete a manufacturer part, first access the manufacturer part detail page like in the [Edit Manufacturer Part](#edit-manufacturer-part) section. + +After the manufacturer part details are loaded, click on the {{ icon("trash", color="red", title="Delete") }} icon next to the manufacturer part image. Review the the information for the manufacturer part to be deleted, confirm the deletion using the checkbox then click on Submit diff --git a/docs/docs/order/purchase_order.md b/docs/docs/purchasing/purchase_order.md similarity index 83% rename from docs/docs/order/purchase_order.md rename to docs/docs/purchasing/purchase_order.md index e78bc2c54e..16827fce53 100644 --- a/docs/docs/order/purchase_order.md +++ b/docs/docs/purchasing/purchase_order.md @@ -62,7 +62,7 @@ Purchase Order Status supports [custom states](../concepts/custom_states.md). ### Purchase Order Currency -The currency code can be specified for an individual purchase order. If not specified, the default currency specified against the [supplier](./company.md#suppliers) will be used. Additionally, the currency can be specified separately for each line item. +The currency code can be specified for an individual purchase order. If not specified, the default currency specified against the [supplier](./supplier.md) will be used. Additionally, the currency can be specified separately for each line item. So, when determining the cost of each line item in the purchase order, the following order of precedence is used: @@ -73,7 +73,7 @@ So, when determining the cost of each line item in the purchase order, the follo ## Create Purchase Order -Once the purchase order page is loaded, click on New Purchase Order which opens the "Create Purchase Order" form. +Once the purchase order page is loaded, click on {{ icon("plus-circle") }} New Purchase Order which opens the "Create Purchase Order" form. A purchase order is linked to a specific supplier, select one in the list of existing suppliers. @@ -88,7 +88,8 @@ Each Purchase Order is uniquely identified by its *Reference* field. Read more a ### Add Line Items -On the purchase order detail page, user can link parts to the purchase order selecting the Order Items tab then clicking on the Add Line Item button. +On the purchase order detail page, user can link parts to the purchase order selecting the {{ icon("list") }} Order Items tab then clicking on the {{ icon("plus-circle") }} Add Line Item button. + Once the "Add Line Item" form opens, select a supplier part in the list. @@ -99,14 +100,14 @@ Fill out the rest of the form then click on Upload File button next to the Add Line Item button and follow the steps. +It is possible to upload an exported purchase order from the supplier instead of manually entering each line item. To start the process, click on {{ icon("upload") }} Upload File button next to the {{ icon("plus-circle") }} Add Line Item button and follow the steps. !!! info "Supported Formats" This process only supports tabular data and the following formats are supported: CSV, TSV, XLS, XLSX, JSON and YAML ## Issue Order -Once all the line items were added, click on the button on the main purchase order detail panel and confirm the order has been submitted. +Once all the line items were added, click on the {{ icon("send", title="Issue") }} button on the main purchase order detail panel and confirm the order has been submitted. ## Receive Line Items @@ -114,8 +115,8 @@ After receiving all the items from the order, the purchase order will convert th There are two options to mark items as "received": -* either individually: click on button on each line item -* or globally: click on the button on the main purchase order detail panel and confirm all items in the order have been received. +* either individually: click on {{ icon("clipboard-check") }} button on each line item +* or globally: click on the {{ icon("clipboard-check") }} button on the main purchase order detail panel and confirm all items in the order have been received. !!! note "Permissions" Marking line items as received requires the "Purchase order" ADD permission. @@ -132,7 +133,7 @@ When receiving items from a purchase order, the location of the items must be sp Each item marked as "received" is automatically converted into a stock item. -To see the list of stock items created from the purchase order, click on the Received Items tab. +To see the list of stock items created from the purchase order, click on the {{ icon("arrow-right") }} Received Items tab. ### Item Value Currency @@ -145,12 +146,12 @@ However, if the [Convert Currency](#purchase-order-settings) setting is enabled, Once the quantity of all __received__ items is equal or above the quantity of all line items, the order will be automatically marked as __complete__. It is also possible to complete the order before all items were received (or if there were missing items). -To do so, click on the button on the main purchase order detail panel and confirm the order was completed. +To do so, click on the {{ icon("circle-check", color="green") }} button on the main purchase order detail panel and confirm the order was completed. ## Cancel Order In the event that the order won't be processed, user has the option of cancelling the order instead. -To do so, simply click on the button on the main purchase order detail panel and confirm the purchase order has been cancelled. +To do so, simply click on the {{ icon("circle-x", color="red") }} button on the main purchase order detail panel and confirm the purchase order has been cancelled. ## Duplicate Purchase Order @@ -192,7 +193,7 @@ If the *Target Date* of the purchase order is reached but the order has not been ## Calendar view -Using the button to the top right of the list of Purchase Orders, the view can be switched to a calendar view using the button . This view shows orders with a defined target date only. +Using the button to the top right of the list of Purchase Orders, the view can be switched to a calendar view using the button {{ icon("calendar") }}. This view shows orders with a defined target date only. This view can be accessed externally as an ICS calendar using a URL like the following: `http://inventree.example.org/api/order/calendar/purchase-order/calendar.ics` diff --git a/docs/docs/purchasing/supplier.md b/docs/docs/purchasing/supplier.md new file mode 100644 index 0000000000..30d9c7d050 --- /dev/null +++ b/docs/docs/purchasing/supplier.md @@ -0,0 +1,101 @@ +--- +title: Suppliers +--- + + +## Suppliers + +A supplier is an external **vendor** of parts and raw materials. + +To access the supplier page, click on the {{ icon("shopping-cart") }} Buy navigation tab and click on {{ icon("building") }} Suppliers option in the dropdown list. + +{% with id="supplier_list", url="order/supplier_list.png", description="Supplier List" %} +{% include "img.html" %} +{% endwith %} + +!!! info + **Viewing**, **adding**, **editing** and **deleting** suppliers require the corresponding [Purchase Orders user permissions](../settings/permissions.md) + +### Add Supplier + +Once the supplier page is loaded, click on the {{ icon("plus-circle") }} New Supplier button: the "Create new Supplier" form opens. Fill-in the supplier information (`Company name` and `Company description` are required) then click on Submit + +!!! info "Supplier vs Manufacturer" + In the case the supplier is a manufacturer who sells directly to customers, you may want to enable the checkbox `is manufacturer` before submitting the form (you can also enable it later on). + +### Supplier Parts + +Supplier parts are linked to a supplier and defined as purchasable items. + +!!! warning + **Viewing**, **adding**, **editing** and **deleting** supplier parts require the corresponding [Purchase Orders user permissions](../settings/permissions.md) + +#### Add Supplier Part + +To create a supplier part, you have the following options: + +1. navigate to a Part detail page then click on the {{ icon("building") }} Suppliers tab +0. navigate to a Supplier detail page then click on the {{ icon("building") }} Supplied Parts tab +0. navigate to a Manufacturer detail page then click on the {{ icon("building") }} Supplied Parts tab. + +Whichever you pick, click on the {{ icon("plus-circle") }} New Supplier Part button to load the "Create new Supplier Part" form. Fill out the form with the supplier part information then click on Submit + +#### Edit Supplier Part + +To edit a supplier part, first access the supplier part detail page with one of the following options: + +1. navigate to a Part detail page, click on the {{ icon("building") }} Suppliers tab then, in the Part Suppliers table, click on the corresponding _Supplier Part_ link +0. navigate to a Supplier detail page, click on the {{ icon("building") }} Supplied Parts tab then click on the corresponding _Supplier Part_ link +0. navigate to a Manufacturer detail page, click on the {{ icon("building") }} Supplied Parts tab then click on the corresponding _Supplier Part_ link. + +After the supplier part details are loaded, click on the {{ icon("edit", color="blue", title="Edit") }} icon next to the supplier part image. Edit the supplier part information then click on Submit + +#### Disable Supplier Part + +Supplier parts can be individually disabled - for example, if a supplier part is no longer available for purchase. By disabling the part in the InvenTree system, it will no longer be available for selection in new purchase orders. However, any existing purchase orders which reference the supplier part will remain intact. + +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 %} + +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 %} + +It is recommended to disable a supplier part rather than deleting it, as this will preserve the integrity of historical data. + +#### Delete Supplier Part + +To delete a supplier part, first access the supplier part detail page like in the [Edit Supplier Part](#edit-supplier-part) section. + +After the supplier part details are loaded, click on the {{ icon("trash", color="red", title="Delete") }} icon next to the supplier part image. Review the the information for the supplier part to be deleted, confirm the deletion using the checkbox then click on Submit + +#### Supplier Part Availability + +InvenTree supports tracking 'availability' information for supplier parts. While this information can be updated manually, it is more useful when used in conjunction with the InvenTree plugin system. + +A custom can periodically request availability information (via a supplier API), and update this availability information for each supplier part. + +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 %} + +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 %} + +## Supplier Part Pack Size + +Supplier parts can have a pack size defined. This value is defined when creating or editing a part. By default, the pack size is 1. + +When buying parts, they are bought in packs. This is taken into account in Purchase Orders: if a supplier part with a pack size of 5 is bought in a quantity of 4, 20 parts will be added to stock when the parts are received. + +When adding stock manually, the supplier part can be added in packs or in individual parts. This is to allow the addition of items in opened packages. Set the flag "Use pack size" (`use_pack_size` in the API) to True in order to add parts in packs. diff --git a/docs/docs/releases/0.1.5.md b/docs/docs/releases/0.1.5.md index 1199a8e317..580f5c6f78 100644 --- a/docs/docs/releases/0.1.5.md +++ b/docs/docs/releases/0.1.5.md @@ -12,7 +12,7 @@ title: Release 0.1.5 [#1168](https://github.com/inventree/InvenTree/pull/1168) introduces the concept of *Target Date* for a Build Order. This is the intended completion date for the build. If the date is reached but the build is not yet complete, the build is consider *overdue*. -Refer to the [build documentation](../build/build.md#overdue-builds) for more information. +Refer to the [build documentation](../manufacturing/build.md#overdue-builds) for more information. ### Target Date for Sales Order diff --git a/docs/docs/releases/0.1.6.md b/docs/docs/releases/0.1.6.md index 2e550c6ca9..645cec0e6c 100644 --- a/docs/docs/releases/0.1.6.md +++ b/docs/docs/releases/0.1.6.md @@ -24,13 +24,13 @@ Refer to the [report documentation](../report/report.md) for further information !!! warning "LaTeX Support" LaTeX report templates are no longer supported for a number of technical and ideological reasons -[#1292](https://github.com/inventree/InvenTree/pull/1292) adds support for build order / work order reports. Refer to the [report documentation](../report/templates.md) for further information. +[#1292](https://github.com/inventree/InvenTree/pull/1292) adds support for build order / work order reports. Refer to the [report documentation](../report/index.md) for further information. ### Inherited BOM Items [#1313](https://github.com/inventree/InvenTree/pull/1313) adds support for inherited BOM items, allowing greater flexibility for Bill of Materials management when combined with the Template / Variant part system. -Refer to the [BOM documentation](../build/bom.md) for further information. +Refer to the [BOM documentation](../manufacturing/bom.md) for further information. ### Stock Item Packaging diff --git a/docs/docs/releases/0.1.7.md b/docs/docs/releases/0.1.7.md index 7287287ce0..a62a557827 100644 --- a/docs/docs/releases/0.1.7.md +++ b/docs/docs/releases/0.1.7.md @@ -31,7 +31,7 @@ Label printing functionality has been simplified and brought into line with the ### API Permissions -[#1363](https://github.com/inventree/InvenTree/pull/1363) enforces user role permissions onto the REST API endpoints. Authenticated users can now only perform REST actions which align with their allocated role(s). Refer to the [API documentation](../api/api.md#authorization) for further information. +[#1363](https://github.com/inventree/InvenTree/pull/1363) enforces user role permissions onto the REST API endpoints. Authenticated users can now only perform REST actions which align with their allocated role(s). Refer to the [API documentation](../api/index.md#authorization) for further information. ### Query Pagination diff --git a/docs/docs/releases/0.1.8.md b/docs/docs/releases/0.1.8.md index 309fd5945b..78da6ec046 100644 --- a/docs/docs/releases/0.1.8.md +++ b/docs/docs/releases/0.1.8.md @@ -29,7 +29,7 @@ title: Release 0.1.8 ### Assign by Serial Number -[#1426](https://github.com/inventree/InvenTree/pull/1426) introduces a new feature which allows stock items to be allocated to a sales order using serial number references. This provides a much more streamlined user experience. Refer to the [sales order documentation](../order/sales_order.md) for further information. +[#1426](https://github.com/inventree/InvenTree/pull/1426) introduces a new feature which allows stock items to be allocated to a sales order using serial number references. This provides a much more streamlined user experience. Refer to the [sales order documentation](../sales/sales_order.md) for further information. ## Major Bug Fixes diff --git a/docs/docs/releases/0.2.1.md b/docs/docs/releases/0.2.1.md index 506cce8d4c..9c868c4729 100644 --- a/docs/docs/releases/0.2.1.md +++ b/docs/docs/releases/0.2.1.md @@ -26,7 +26,7 @@ sourcing information for a part. Soon, InvenTree will allow the use of manufacturer data directly in purchase orders. Details on how to create and manage manufacturer parts were added -[here](../order/company.md#add-manufacturer-part) +[here](../purchasing/manufacturer.md#add-manufacturer-part) ### URL-style QR Code for StockItem diff --git a/docs/docs/releases/0.2.2.md b/docs/docs/releases/0.2.2.md index d76eb5b6ca..eaed8d7550 100644 --- a/docs/docs/releases/0.2.2.md +++ b/docs/docs/releases/0.2.2.md @@ -26,7 +26,7 @@ title: Release 0.2.2 ### Build Order Improvements -[#1492](https://github.com/inventree/InvenTree/pull/1492) drastically improves the build order process, streamlining the stock allocation process and providing a more intuitive user experience. Refer to the [build order documentation](../build/build.md) for further information. +[#1492](https://github.com/inventree/InvenTree/pull/1492) drastically improves the build order process, streamlining the stock allocation process and providing a more intuitive user experience. Refer to the [build order documentation](../manufacturing/build.md) for further information. ### Javascript Translation diff --git a/docs/docs/releases/0.6.0.md b/docs/docs/releases/0.6.0.md index 5edd0d2d97..f4dafa01e4 100644 --- a/docs/docs/releases/0.6.0.md +++ b/docs/docs/releases/0.6.0.md @@ -15,7 +15,7 @@ A few highlights for this release: - A major UI overhaul - A new / improved plugin ecosystem -If you are as excited as we are [set up your own instance](https://inventree.readthedocs.io/en/latest/start/intro/), check out the [demo](https://inventree.readthedocs.io/en/latest/demo/) or browse the [documentation](https://inventree.readthedocs.io/en/latest/)! +If you are as excited as we are set up your own instance, check out the [demo](https://inventree.readthedocs.io/en/latest/demo/) or browse the [documentation](https://inventree.readthedocs.io/en/latest/)! ### Release Survey diff --git a/docs/docs/releases/0.7.0.md b/docs/docs/releases/0.7.0.md index 80c6c57d2d..26d39ed9f6 100644 --- a/docs/docs/releases/0.7.0.md +++ b/docs/docs/releases/0.7.0.md @@ -8,7 +8,7 @@ title: Release 0.7.0 ### Plugins -In addition to providing a slew of new features and stability improvements (as listed below), this version focuses heavily on improvements to the [plugin system](../extend/plugins.md). The plugin ecosystem has received a major overhaul, and now provides a number of new plugin "mixins" for supporting custom functionality. The plugin system will continue to receive attention over the next major release cycle. +In addition to providing a slew of new features and stability improvements (as listed below), this version focuses heavily on improvements to the [plugin system](../plugins/index.md). The plugin ecosystem has received a major overhaul, and now provides a number of new plugin "mixins" for supporting custom functionality. The plugin system will continue to receive attention over the next major release cycle. !!! warning "Plugin Changes" diff --git a/docs/docs/releases/0.8.0.md b/docs/docs/releases/0.8.0.md index 41a1c1f93a..20ced5fb67 100644 --- a/docs/docs/releases/0.8.0.md +++ b/docs/docs/releases/0.8.0.md @@ -14,7 +14,7 @@ title: Release 0.8.0 ### Shipment Features -[#3058](https://github.com/inventree/InvenTree/pull/3058) implements new data fields for the [Sales Order Shipment](../order/sales_order.md#sales-order-shipments). +[#3058](https://github.com/inventree/InvenTree/pull/3058) implements new data fields for the [Sales Order Shipment](../sales/sales_order.md#sales-order-shipments). ### Calendar Displays diff --git a/docs/docs/releases/release_notes.md b/docs/docs/releases/release_notes.md index ae205a7b95..46e74da528 100644 --- a/docs/docs/releases/release_notes.md +++ b/docs/docs/releases/release_notes.md @@ -10,14 +10,14 @@ The InvenTree project follows a formalized release numbering scheme, according t The head of the *stable* code branch represents the most recent stable tagged release of InvenTree. -!!! info " Stable Docker" +!!! info "{{ icon("brand-docker") }} Stable Docker" To pull down the latest *stable* release of InvenTree in docker, use `inventree/inventree:stable` ### Development Branch The head of the *master* code branch represents the "latest and greatest" working codebase. All features and bug fixes are merged into the master branch, in addition to relevant stable release branches. -!!! info " Latest Docker" +!!! info "{{ icon("brand-docker") }} Latest Docker" To pull down the latest *development* version of InvenTree in docker, use `inventree/inventree:latest` ## Stable Releases diff --git a/docs/docs/report/context_variables.md b/docs/docs/report/context_variables.md index 04428be83f..670a26fea5 100644 --- a/docs/docs/report/context_variables.md +++ b/docs/docs/report/context_variables.md @@ -47,18 +47,18 @@ Templates (whether for generating [reports](./report.md) or [labels](./labels.md | Model Type | Description | | --- | --- | -| [build](#build-order) | A [Build Order](../build/build.md) instance | -| [buildline](#build-line) | A [Build Order Line Item](../build/build.md) instance | -| [salesorder](#sales-order) | A [Sales Order](../order/sales_order.md) instance | -| [returnorder](#return-order) | A [Return Order](../order/return_order.md) instance | -| [purchaseorder](#purchase-order) | A [Purchase Order](../order/purchase_order.md) instance | -| [stockitem](#stock-item) | A [StockItem](../stock/stock.md#stock-item) instance | -| [stocklocation](#stock-location) | A [StockLocation](../stock/stock.md#stock-location) instance | -| [part](#part) | A [Part](../part/part.md) instance | +| [build](#build-order) | A [Build Order](../manufacturing/build.md) instance | +| [buildline](#build-line) | A [Build Order Line Item](../manufacturing/build.md) instance | +| [salesorder](#sales-order) | A [Sales Order](../sales/sales_order.md) instance | +| [returnorder](#return-order) | A [Return Order](../sales/return_order.md) instance | +| [purchaseorder](#purchase-order) | A [Purchase Order](../purchasing/purchase_order.md) instance | +| [stockitem](#stock-item) | A [StockItem](../stock/index.md#stock-item) instance | +| [stocklocation](#stock-location) | A [StockLocation](../stock/index.md#stock-location) instance | +| [part](#part) | A [Part](../part/index.md) instance | ### Build Order -When printing a report or label against a [Build Order](../build/build.md) object, the following context variables are available: +When printing a report or label against a [Build Order](../manufacturing/build.md) object, the following context variables are available: {{ report_context("models", "build") }} @@ -68,7 +68,7 @@ When printing a report or label against a [Build Order](../build/build.md) objec ### Build Line -When printing a report or label against a [BuildOrderLineItem](../build/build.md) object, the following context variables are available: +When printing a report or label against a [BuildOrderLineItem](../manufacturing/build.md) object, the following context variables are available: {{ report_context("models", "buildline") }} @@ -78,7 +78,7 @@ When printing a report or label against a [BuildOrderLineItem](../build/build.md ### Sales Order -When printing a report or label against a [SalesOrder](../order/sales_order.md) object, the following context variables are available: +When printing a report or label against a [SalesOrder](../sales/sales_order.md) object, the following context variables are available: {{ report_context("models", "salesorder") }} @@ -88,7 +88,7 @@ When printing a report or label against a [SalesOrder](../order/sales_order.md) ### Sales Order Shipment -When printing a report or label against a [SalesOrderShipment](../order/sales_order.md#sales-order-shipments) object, the following context variables are available: +When printing a report or label against a [SalesOrderShipment](../sales/sales_order.md#sales-order-shipments) object, the following context variables are available: {{ report_context("models", "salesordershipment") }} @@ -98,19 +98,19 @@ When printing a report or label against a [SalesOrderShipment](../order/sales_or ### Return Order -When printing a report or label against a [ReturnOrder](../order/return_order.md) object, the following context variables are available: +When printing a report or label against a [ReturnOrder](../sales/return_order.md) object, the following context variables are available: {{ report_context("models", "returnorder") }} ### Purchase Order -When printing a report or label against a [PurchaseOrder](../order/purchase_order.md) object, the following context variables are available: +When printing a report or label against a [PurchaseOrder](../purchasing/purchase_order.md) object, the following context variables are available: {{ report_context("models", "purchaseorder") }} ### Stock Item -When printing a report or label against a [StockItem](../stock/stock.md#stock-item) object, the following context variables are available: +When printing a report or label against a [StockItem](../stock/index.md#stock-item) object, the following context variables are available: {{ report_context("models", "stockitem") }} @@ -120,7 +120,7 @@ When printing a report or label against a [StockItem](../stock/stock.md#stock-it ### Stock Location -When printing a report or label against a [StockLocation](../stock/stock.md#stock-location) object, the following context variables are available: +When printing a report or label against a [StockLocation](../stock/index.md#stock-location) object, the following context variables are available: {{ report_context("models", "stocklocation") }} @@ -130,7 +130,7 @@ When printing a report or label against a [StockLocation](../stock/stock.md#stoc ### Part -When printing a report or label against a [Part](../part/part.md) object, the following context variables are available: +When printing a report or label against a [Part](../part/index.md) object, the following context variables are available: {{ report_context("models", "part") }} @@ -155,7 +155,7 @@ Each part object has access to a lot of context variables about the part. The fo | name | Brief name for this part | | full_name | Full name for this part (including IPN, if not null and including variant, if not null) | | variant | Optional variant number for this part - Must be unique for the part name -| category | The [PartCategory](./context_variables.md#part-category) object to which this part belongs +| category | The [PartCategory](#part-category) object to which this part belongs | description | Longer form description of the part | keywords | Optional keywords for improving part search results | IPN | Internal part number (optional) @@ -163,8 +163,8 @@ Each part object has access to a lot of context variables about the part. The fo | is_template | If True, this part is a 'template' part | link | Link to an external page with more information about this part (e.g. internal Wiki) | image | Image of this part -| default_location | The default [StockLocation](./context_variables.md#stocklocation) object where the item is normally stored (may be null) -| default_supplier | The default [SupplierPart](./context_variables.md#supplierpart) which should be used to procure and stock this part +| default_location | The default [StockLocation](#stock-location) object where the item is normally stored (may be null) +| default_supplier | The default [SupplierPart](#supplierpart) which should be used to procure and stock this part | default_expiry | The default expiry duration for any StockItem instances of this part | minimum_stock | Minimum preferred quantity to keep in stock | units | Units of measure for this part (default='pcs') @@ -200,7 +200,7 @@ Each part object has access to a lot of context variables about the part. The fo |----------|-------------| | name | Name of this category | | parent | Parent category | -| default_location | Default [StockLocation](./context_variables.md#stocklocation) object for parts in this category or child categories | +| default_location | Default [StockLocation](#stock-location) object for parts in this category or child categories | | default_keywords | Default keywords for parts created in this category | ### Stock @@ -210,37 +210,37 @@ Each part object has access to a lot of context variables about the part. The fo | Variable | Description | |----------|-------------| -| parent | Link to another [StockItem](./context_variables.md#stockitem) from which this StockItem was created | +| parent | Link to another [StockItem](#stock-item) from which this StockItem was created | | uid | Field containing a unique-id which is mapped to a third-party identifier (e.g. a barcode) | -| part | Link to the master abstract [Part](./context_variables.md#part) that this [StockItem](./context_variables.md#stockitem) is an instance of | -| supplier_part | Link to a specific [SupplierPart](./context_variables.md#supplierpart) (optional) | -| location | The [StockLocation](./context_variables.md#stocklocation) Where this [StockItem](./context_variables.md#stockitem) is located | +| part | Link to the master abstract [Part](#part) that this [StockItem](#stock-item) is an instance of | +| supplier_part | Link to a specific [SupplierPart](#supplierpart) (optional) | +| location | The [StockLocation](#stock-location) Where this [StockItem](#stock-item) is located | | quantity | Number of stocked units | -| batch | Batch number for this [StockItem](./context_variables.md#stockitem) | -| serial | Unique serial number for this [StockItem](./context_variables.md#stockitem) | +| batch | Batch number for this [StockItem](#stock-item) | +| serial | Unique serial number for this [StockItem](#stock-item) | | link | Optional URL to link to external resource | | updated | Date that this stock item was last updated (auto) | -| expiry_date | Expiry date of the [StockItem](./context_variables.md#stockitem) (optional) | +| expiry_date | Expiry date of the [StockItem](#stock-item) (optional) | | stocktake_date | Date of last stocktake for this item | | stocktake_user | User that performed the most recent stocktake | -| review_needed | Flag if [StockItem](./context_variables.md#stockitem) needs review | -| delete_on_deplete | If True, [StockItem](./context_variables.md#stockitem) will be deleted when the stock level gets to zero | -| status | Status of this [StockItem](./context_variables.md#stockitem) (ref: InvenTree.status_codes.StockStatus) | +| review_needed | Flag if [StockItem](#stock-item) needs review | +| delete_on_deplete | If True, [StockItem](#stock-item) will be deleted when the stock level gets to zero | +| status | Status of this [StockItem](#stock-item) (ref: InvenTree.status_codes.StockStatus) | | status_label | Textual representation of the status e.g. "OK" | | notes | Extra notes field | | build | Link to a Build (if this stock item was created from a build) | | is_building | Boolean field indicating if this stock item is currently being built (or is "in production") | -| purchase_order | Link to a [PurchaseOrder](./context_variables.md#purchase-order) (if this stock item was created from a PurchaseOrder) | -| infinite | If True this [StockItem](./context_variables.md#stockitem) can never be exhausted | -| sales_order | Link to a [SalesOrder](./context_variables.md#salesorder) object (if the StockItem has been assigned to a SalesOrder) | -| purchase_price | The unit purchase price for this [StockItem](./context_variables.md#stockitem) - this is the unit price at time of purchase (if this item was purchased from an external supplier) | +| purchase_order | Link to a [PurchaseOrder](#purchase-order) (if this stock item was created from a PurchaseOrder) | +| infinite | If True this [StockItem](#stock-item) can never be exhausted | +| sales_order | Link to a [SalesOrder](#sales-order) object (if the StockItem has been assigned to a SalesOrder) | +| purchase_price | The unit purchase price for this [StockItem](#stock-item) - this is the unit price at time of purchase (if this item was purchased from an external supplier) | | packaging | Description of how the StockItem is packaged (e.g. "reel", "loose", "tape" etc) | #### StockLocation | Variable | Description | |----------|-------------| -| barcode | Brief payload data (e.g. for labels). Example: {"stocklocation": 826} where 826 is the primary key| +| barcode | Brief payload data (e.g. for labels). Example: `{"stocklocation": 826}` where 826 is the primary key| | description | The description of the location | | icon | The name of the icon if set, e.g. fas fa-warehouse | | item_count | Simply returns the number of stock items in this location | @@ -261,7 +261,7 @@ Each part object has access to a lot of context variables about the part. The fo | name | Name of the company | | description | Longer form description | | website | URL for the company website | -| primary_address | [Address](./context_variables.md#address) object that is marked as primary address | +| primary_address | [Address](#address) object that is marked as primary address | | address | String format of the primary address | | contact | Contact Name | | phone | Contact phone number | @@ -301,8 +301,8 @@ Each part object has access to a lot of context variables about the part. The fo | Variable | Description | |----------|-------------| | part | Link to the master Part (Obsolete) | -| source_item | The sourcing [StockItem](./context_variables.md#stockitem) linked to this [SupplierPart](./context_variables.md#supplierpart) instance | -| supplier | [Company](./context_variables.md#company) that supplies this part | +| source_item | The sourcing [StockItem](#stock-item) linked to this [SupplierPart](#supplierpart) instance | +| supplier | [Company](#company) that supplies this part | | SKU | Stock keeping unit (supplier part number) | | link | Link to external website for this supplier part | | description | Descriptive notes field | @@ -314,8 +314,8 @@ Each part object has access to a lot of context variables about the part. The fo | pretty_name | The IPN, supplier name, supplier SKU and (if not null) manufacturer string joined by `|`. Ex. `P00037 | Company | 000021` | | unit_pricing | The price for one unit. | | price_breaks | Return the associated price breaks in the correct order | -| has_price_breaks | Whether this [SupplierPart](./context_variables.md#supplierpart) has price breaks | -| manufacturer_string | Format a MPN string for this [SupplierPart](./context_variables.md#supplierpart). Concatenates manufacture name and part number. | +| has_price_breaks | Whether this [SupplierPart](#supplierpart) has price breaks | +| manufacturer_string | Format a MPN string for this [SupplierPart](#supplierpart). Concatenates manufacture name and part number. | ### User diff --git a/docs/docs/report/helpers.md b/docs/docs/report/helpers.md index e441f14c64..f6d27e9bf8 100644 --- a/docs/docs/report/helpers.md +++ b/docs/docs/report/helpers.md @@ -148,7 +148,7 @@ Generate a list of all active customers: ### Advanced Database Queries -More advanced database filtering should be achieved using a [report plugin](../extend/plugins/report.md), and adding custom context data to the report template. +More advanced database filtering should be achieved using a [report plugin](../plugins/mixins/report.md), and adding custom context data to the report template. ## Number Formatting @@ -466,7 +466,7 @@ If you have a custom logo, but explicitly wish to load the InvenTree logo itself ## Report Assets -[Report Assets](./templates.md#report-assets) are files specifically uploaded by the user for inclusion in generated reports and labels. +[Report Assets](./index.md#report-assets) are files specifically uploaded by the user for inclusion in generated reports and labels. You can add asset images to the reports and labels by using the `{% raw %}{% asset ... %}{% endraw %}` template tag: @@ -489,7 +489,7 @@ If you need to load a part parameter for a particular Part, within the context o ### Example -The following example assumes that you have a report or label which contains a valid [Part](../part/part.md) instance: +The following example assumes that you have a report or label which contains a valid [Part](../part/index.md) instance: ``` {% raw %} diff --git a/docs/docs/report/templates.md b/docs/docs/report/index.md similarity index 96% rename from docs/docs/report/templates.md rename to docs/docs/report/index.md index e7585fa06c..5bfd05d8d8 100644 --- a/docs/docs/report/templates.md +++ b/docs/docs/report/index.md @@ -43,7 +43,7 @@ InvenTree is supplied with a number of default templates "out of the box" - for ### Extending with Plugins -The [ReportMixin plugin class](../extend/plugins/report.md) allows reporting functionality to be extended with custom features. +The [ReportMixin plugin class](../plugins/mixins/report.md) allows reporting functionality to be extended with custom features. ## WeasyPrint Template Rendering @@ -82,7 +82,7 @@ Boolean field which determines if the specific report template is enabled, and a The filename pattern used to generate the output `.pdf` file. Defaults to "report.pdf". -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/stock.md#stock-item) can use the part name and serial number of the stock item when generating the report name: +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' %} @@ -93,7 +93,7 @@ The filename pattern allows custom rendering with any context variables which ar Each template instance provides a *filters* field, which can be used to filter which items a report or label template can be generated against. The target of the *filters* field depends on the model type associated with the particular template. -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/part.md) is *trackable*: +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' %} @@ -110,7 +110,7 @@ If you enter an invalid option for the filter field, an error message will be di ### Metadata -A JSON field made available to any [plugins](../extend/plugins.md) - but not used by internal code. +A JSON field made available to any [plugins](../plugins/index.md) - but not used by internal code. ## Reporting Options diff --git a/docs/docs/report/samples.md b/docs/docs/report/samples.md index 493728bf1b..0c0e2fecaf 100644 --- a/docs/docs/report/samples.md +++ b/docs/docs/report/samples.md @@ -14,14 +14,14 @@ The following report templates are provided "out of the box" and can be used as | Template | Model Type | Description | | --- | --- | --- | -| [Bill of Materials](#bill-of-materials-report) | [Part](../part/part.md) | Bill of Materials report | -| [Build Order](#build-order) | [BuildOrder](../build/build.md) | Build Order report | -| [Purchase Order](#purchase-order) | [PurchaseOrder](../order/purchase_order.md) | Purchase Order report | -| [Return Order](#return-order) | [ReturnOrder](../order/return_order.md) | Return Order report | -| [Sales Order](#sales-order) | [SalesOrder](../order/sales_order.md) | Sales Order report | -| [Sales Order Shipment](#sales-order-shipment) | [SalesOrderShipment](../order/sales_order.md) | Sales Order Shipment report | -| [Stock Location](#stock-location) | [StockLocation](../stock/stock.md#stock-location) | Stock Location report | -| [Test Report](#test-report) | [StockItem](../stock/stock.md#stock-item) | Test Report | +| [Bill of Materials](#bill-of-materials-report) | [Part](../part/index.md) | Bill of Materials report | +| [Build Order](#build-order) | [BuildOrder](../manufacturing/build.md) | Build Order report | +| [Purchase Order](#purchase-order) | [PurchaseOrder](../purchasing/purchase_order.md) | Purchase Order report | +| [Return Order](#return-order) | [ReturnOrder](../sales/return_order.md) | Return Order report | +| [Sales Order](#sales-order) | [SalesOrder](../sales/sales_order.md) | Sales Order report | +| [Sales Order Shipment](#sales-order-shipment) | [SalesOrderShipment](../sales/sales_order.md) | Sales Order Shipment report | +| [Stock Location](#stock-location) | [StockLocation](../stock/index.md#stock-location) | Stock Location report | +| [Test Report](#test-report) | [StockItem](../stock/index.md#stock-item) | Test Report | ### Bill of Materials Report @@ -61,10 +61,10 @@ The following label templates are provided "out of the box" and can be used as a | Template | Model Type | Description | | --- | --- | --- | -| [Build Line](#build-line-label) | [Build line item](../build/build.md) | Build Line label | -| [Part](#part-label) | [Part](../part/part.md) | Part label | -| [Stock Item](#stock-item-label) | [StockItem](../stock/stock.md#stock-item) | Stock Item label | -| [Stock Location](#stock-location-label) | [StockLocation](../stock/stock.md#stock-location) | Stock Location label | +| [Build Line](#build-line-label) | [Build line item](../manufacturing/build.md) | Build Line label | +| [Part](#part-label) | [Part](../part/index.md) | Part label | +| [Stock Item](#stock-item-label) | [StockItem](../stock/index.md#stock-item) | Stock Item label | +| [Stock Location](#stock-location-label) | [StockLocation](../stock/index.md#stock-location) | Stock Location label | ### Build Line Label diff --git a/docs/docs/sales/customer.md b/docs/docs/sales/customer.md new file mode 100644 index 0000000000..481e503c61 --- /dev/null +++ b/docs/docs/sales/customer.md @@ -0,0 +1,16 @@ +--- +title: Customers +--- + +## Customers + +A *customer* is an external client to whom parts or services are sold. + +To access the customer page, click on the {{ icon("truck-delivery") }} Sales navigation tab and click on {{ icon("building-store") }} Customers option in the dropdown list. + +!!! warning + **Viewing**, **adding**, **editing** and **deleting** customers require the corresponding [Sales Orders user permissions](../settings/permissions.md) + +### Add Customer + +Once the customer page is loaded, click on the {{ icon("plus-circle") }} New Customer button: the "Create new Customer" form opens. Fill-in the manufacturer information (`Company name` and `Company description` are required) then click on Submit diff --git a/docs/docs/sales/index.md b/docs/docs/sales/index.md new file mode 100644 index 0000000000..7c64b85157 --- /dev/null +++ b/docs/docs/sales/index.md @@ -0,0 +1,25 @@ +--- +title: Sales +--- + +## Sales + +InvenTree provides support for managing sales orders, allowing users to track the sale of parts and materials to customers. The sales system is designed to seamlessly control the distribution of stock items from the InvenTree database, ensuring that all parts are properly accounted for and tracked throughout their lifecycle. + +### Customers + +InvenTree allows users to define customers, which represent individuals or organizations that purchase parts or materials from the company. Customers can be linked to specific sales orders, enabling users to easily track customer relationships and manage sales processes. + +Read more about customers in the [Customer documentation](./customer.md). + +### Sales Orders + +The core of the InvenTree sales system is the sales order (SO). A sales order is a formal request from a customer to purchase specific parts or materials. Each sales order is linked to one or more internal parts, allowing users to easily track the sales process and manage customer relationships. + +Read more about sales orders in the [Sales Order documentation](./sales_order.md). + +### Return Orders + +InvenTree also supports return orders, which represent the return of parts or materials from a customer. + +Read more about return orders in the [Return Order documentation](./return_order.md). diff --git a/docs/docs/order/return_order.md b/docs/docs/sales/return_order.md similarity index 92% rename from docs/docs/order/return_order.md rename to docs/docs/sales/return_order.md index d2e3a3bfe3..decacb9f88 100644 --- a/docs/docs/order/return_order.md +++ b/docs/docs/sales/return_order.md @@ -91,7 +91,7 @@ Return Order Status supports [custom states](../concepts/custom_states.md). ## Create a Return Order -From the Return Order index, click on New Return Order which opens the "Create Return Order" form. +From the Return Order index, click on {{ icon("plus-circle") }} New Return Order which opens the "Create Return Order" form. A Return Order is linked to a specific customer, which can be selected from the list of existing customers @@ -124,7 +124,7 @@ Here the details of the return order are available, and specific actions can be ### Edit Return Order -The Return Order can be edit by selecting the icon under the actions menu. +The Return Order can be edit by selecting the {{ icon("edit", color="blue", title="Edit") }} icon under the {{ icon("tools") }} actions menu. ### Line Items @@ -139,7 +139,7 @@ While [line items](#line-items) must reference a particular stock item, extra li ## Return Order Reports -Custom [reports](../report/templates.md) can be generated against each Return Order. +Custom [reports](../report/index.md) can be generated against each Return Order. ## Order Scheduling @@ -159,7 +159,7 @@ If the *Target Date* of a return order has passed, the order will be marked as * ## Calendar view -Using the button to the top right of the list of Return Orders, the view can be switched to a calendar view using the button . This view shows orders with a defined target date only. +Using the button to the top right of the list of Return Orders, the view can be switched to a calendar view using the button {{ icon("calendar") }}. This view shows orders with a defined target date only. This view can be accessed externally as an ICS calendar using a URL like the following: `http://inventree.example.org/api/order/calendar/return-order/calendar.ics` diff --git a/docs/docs/order/sales_order.md b/docs/docs/sales/sales_order.md similarity index 75% rename from docs/docs/order/sales_order.md rename to docs/docs/sales/sales_order.md index 1923ea5d9f..b3b368e053 100644 --- a/docs/docs/order/sales_order.md +++ b/docs/docs/sales/sales_order.md @@ -63,11 +63,11 @@ Sales Order Status supports [custom states](../concepts/custom_states.md). ### Sales Order Currency -The currency code can be specified for an individual sales order. If not specified, the default currency specified against the [customer](./company.md#customers) will be used. +The currency code can be specified for an individual sales order. If not specified, the default currency specified against the [customer](./customer.md) will be used. ## Create a Sales Order -Once the sales order page is loaded, click on New Sales Order which opens the "Create Sales Order" form. +Once the sales order page is loaded, click on {{ icon("plus-circle") }} New Sales Order which opens the "Create Sales Order" form. A Sales Order is linked to a specific customer, select one in the list of existing customers. @@ -82,7 +82,7 @@ Each Sales Order is uniquely identified by its *Reference* field. Read more abou ### Add Line Items -On the sales order detail page, user can link parts to the sales order selecting the Line Items tab then clicking on the Add Line Item button. +On the sales order detail page, user can link parts to the sales order selecting the {{ icon("list") }} Line Items tab then clicking on the {{ icon("plus-circle") }} Add Line Item button. Once the "Add Line Item" form opens, select a part in the list. @@ -97,8 +97,8 @@ After all line items were added to the sales order, user needs to create one or In order to create a new shipment: -1. Click on the Pending Shipments tab -2. Click on New Shipment button, fill out the form with the shipment number (tracking number can be added but is optional) then click on Submit +1. Click on the {{ icon("truck-loading") }} Pending Shipments tab +2. Click on {{ icon("plus-circle") }} New Shipment button, fill out the form with the shipment number (tracking number can be added but is optional) then click on Submit Repeat the two steps above to create more shipments. @@ -106,26 +106,26 @@ Repeat the two steps above to create more shipments. After shipments were created, user can either: -* allocate stock items for that part to the sales order (click on button) -* or create a build order for that part to cover the quantity of the sales order (click on button) +* Allocate stock items for that part to the sales order (click on {{ icon("arrow-right") }} button) +* Create a build order for that part to cover the quantity of the sales order (click on {{ icon("tools") }} button) During the allocation process, user is required to select the desired shipment that will contain the stock items. ### Complete Shipment -To complete a shipment, click on the Pending Shipments tab then click on button shown in the shipment table. +To complete a shipment, click on the {{ icon("truck-loading") }} Pending Shipments tab then click on {{ icon("truck-delivery") }} button shown in the shipment table. Fill out the "Complete Shipment" form then click on Submit. -To view all the completed shipment, click on the Completed Shipments tab. In the completed shipments table, click on the icon next to each shipment reference to see the items and quantities which were shipped. +To view all the completed shipment, click on the {{ icon("truck-delivery") }} Completed Shipments tab. In the completed shipments table, click on each shipment to view the shipment details. ## Complete Order -Once all items in the sales order have been shipped, click on Complete Order to mark the sales order as shipped. Confirm then click on Submit to complete the order. +Once all items in the sales order have been shipped, click on {{ icon("circle-check", color="green") }} Complete Order to mark the sales order as shipped. Confirm then click on Submit to complete the order. ## Cancel Order -To cancel the order, click on the menu button next to the Complete Order button, then click on the " Cancel Order" menu option. Confirm then click on the Submit to cancel the order. +To cancel the order, click on the {{ icon("tools") }} menu button next to the {{ icon("circle-check", color="green") }} Complete Order button, then click on the "{{ icon("tools") }} Cancel Order" menu option. Confirm then click on the Submit to cancel the order. ## Order Scheduling @@ -145,7 +145,7 @@ If the *Target Date* of the sales order has passed, the order will be marked as ## Calendar view -Using the button to the top right of the list of Sales Orders, the view can be switched to a calendar view using the button . This view shows orders with a defined target date only. +Using the button to the top right of the list of Sales Orders, the view can be switched to a calendar view using the button {{ icon("calendar") }}. This view shows orders with a defined target date only. This view can be accessed externally as an ICS calendar using a URL like the following: `http://inventree.example.org/api/order/calendar/sales-order/calendar.ics` @@ -183,12 +183,6 @@ To complete a shipment, press the *Complete Shipment* button associated with the {% include "img.html" %} {% endwith %} -Alternatively, pending shipments can be completed by selecting the *Complete Shipments* action from the sales order actions menu: - -{% with id="complete-shipment-action", url="order/complete_shipment_action.png", description="Complete shipment" %} -{% include "img.html" %} -{% endwith %} - ### Completed Shipments {% with id="completed-shipments", url="order/completed_shipments.png", description="Completed shipments" %} diff --git a/docs/docs/security.md b/docs/docs/security.md index f5ef65bd3f..c5ca4b1eb1 100644 --- a/docs/docs/security.md +++ b/docs/docs/security.md @@ -1,7 +1,59 @@ -There a 2 different documents regarding security: +The InvenTree project is committed to providing a secure and safe environment for all users. We know that many of our users rely on InvenTree to manage the inventory and manufacturing for their small and mid-size businesses, and we take that responsibility seriously. -- [Project Security](project/security.md) addresses security measures taken by the InvenTree project around the code base and the project itself -- [Threat Model](concepts/threat_model.md) describes the assumptions made regarding running an instance of InvenTree +To that end, we have implemented a number of security measures over the years, which we will outline in this document. + +## Organisational measures + +The InvenTree project is managed by a small team of developers, who are responsible for the ongoing development and maintenance of the software. Two geographically distributed users have administrative access to the InvenTree codebase. Merges are only done by one of these two users, the maintainer Oliver. +Read the Project [Governance](./project/governance.md) document for more information. + +InvenTree is open-source, and we welcome contributions from the community. However, all contributions are reviewed and scrutinised before being merged into the codebase. + +We provide a written [Security Policy]({{ sourcefile("SECURITY.md") }}) in our main repo to ensure that all security issues are handled in a timely manner. + +If we become aware of a security issue, we will take immediate action to address the issue, and will provide a public disclosure of the issue once it has been resolved. We support assigning CVEs to security issues where appropriate. Our [past security advisories can be found here](https://github.com/inventree/InvenTree/security/advisories). + +## Technical measures + +### Code hosting + +The InvenTree project is hosted on GitHub, and we rely on the security measures provided by GitHub to help protect the integrity of the codebase. + +Among those are: + +- Short-lived tokens where possible +- Dependabot for automated dependency updates / alerts +- Integrated security reporting +- (Optional but encouraged) Two-factor authentication for user accounts +- (Optional but encouraged) Signed commits / actions + +### Code style + +We enforce style and security checks in our CI/CD pipeline, and we have several automated tests to ensure that the codebase is secure and functional. +Checks are run on every pull request, and we require that all checks pass before a pull request can be merged. + +### Current versions + +InvenTree is built using the Django framework, which has a strong focus on security. We follow best practices for Django development, and we are committed to keeping the codebase up-to-date with the latest security patches and within supported versions. + +### Test coverage + +We run coverage tests on our codebase to ensure that we have a high level of test coverage above 90%. This is public and can be found [here](https://app.codecov.io/gh/inventree/InvenTree). + +### Pinning dependencies + +We are pinning dependencies to specific versions - aiming for complete reproducibility of builds - wherever possible. Combined with continuous OSV checks, we are able to react quickly to security issues in our dependencies. + +## Best practices + +We follow most of GitHubs community best practices, check our compliance [here](https://github.com/inventree/InvenTree/community). + +We also follow OpenSSF recommendations where applicable and take part in multiple of their security efforts: + +- OSSF Best Practices, currently at a [level of passing](https://www.bestpractices.dev/de/projects/7179) +- OSSF Scorecard, running with each merge [check current state](https://securityscorecards.dev/viewer/?uri=github.com/inventree/InvenTree) + +## Security Policy The official [Security Policy]({{ sourcefile("SECURITY.md") }}) is available in the code repository. diff --git a/docs/docs/settings/error_codes.md b/docs/docs/settings/error_codes.md index e59ee0f790..ddf293df88 100644 --- a/docs/docs/settings/error_codes.md +++ b/docs/docs/settings/error_codes.md @@ -69,7 +69,7 @@ See [INVE-W1](#inve-w1) InvenTree is running in debug mode. This is **not** recommended for production use, as it exposes sensitive information and makes the server more vulnerable to attacks. Debug mode is not intended for production/exposed instances, **even for short duration**. -It is recommended to run InvenTree in production mode for better security and performance. See [Debug Mode Information](../start/intro.md#debug-mode). +It is recommended to run InvenTree in production mode for better security and performance. See [Debug Mode Information](../start/index.md#debug-mode). #### INVE-W5 **Background worker process not running - Backend** diff --git a/docs/docs/settings/experimental.md b/docs/docs/settings/experimental.md index 9e90bd2f7d..ae765509bf 100644 --- a/docs/docs/settings/experimental.md +++ b/docs/docs/settings/experimental.md @@ -14,4 +14,4 @@ Superusers can configure run-time conditions [as per django-flags](https://cfpb. | Feature | Key | Description | | ------- | ----------- | -| oAuth provider / api | OIDC | Use oAuth and OIDC to authenticate users with the API - [read more](../api/api.md#oauth2--oidc). | +| oAuth provider / api | OIDC | Use oAuth and OIDC to authenticate users with the API - [read more](../api/index.md#oauth2--oidc). | diff --git a/docs/docs/settings/global.md b/docs/docs/settings/global.md index 950eea326a..68bfbcd0d9 100644 --- a/docs/docs/settings/global.md +++ b/docs/docs/settings/global.md @@ -91,7 +91,7 @@ Configuration of barcode functionality: {{ globalsetting("BARCODE_STORE_RESULTS") }} {{ globalsetting("BARCODE_RESULTS_MAX_NUM") }} -Read more about [barcode scanning](../barcodes/barcodes.md). +Read more about [barcode scanning](../barcodes/index.md). ### Pricing and Currency @@ -157,6 +157,7 @@ Configuration of report generation: {{ globalsetting("PART_COPY_TESTS") }} {{ globalsetting("PART_CATEGORY_PARAMETERS") }} {{ globalsetting("PART_CATEGORY_DEFAULT_ICON") }} +{{ globalsetting("PART_PARAMETER_ENFORCE_UNITS") }} #### Part Parameter Templates @@ -169,7 +170,7 @@ In this section of the settings, staff users can set a list of parameters associ To add a parameter to a part category: 1. select the category in the dropdown list -2. click the New Parameter button on the top right +2. click the {{ icon("plus-circle") }} New Parameter button on the top right 3. fill out the "Create Category Parameter Template" form 4. click the Submit button. @@ -199,19 +200,19 @@ Configuration of stock item options ### Build Orders -Refer to the [build order settings](../build/build.md#build-order-settings). +Refer to the [build order settings](../manufacturing/build.md#build-order-settings). ### Purchase Orders -Refer to the [purchase order settings](../order/purchase_order.md#purchase-order-settings). +Refer to the [purchase order settings](../purchasing/purchase_order.md#purchase-order-settings). ### Sales Orders -Refer to the [sales order settings](../order/sales_order.md#sales-order-settings). +Refer to the [sales order settings](../sales/sales_order.md#sales-order-settings). ### Return Orders -Refer to the [return order settings](../order/return_order.md#return-order-settings). +Refer to the [return order settings](../sales/return_order.md#return-order-settings). ### Plugin Settings diff --git a/docs/docs/settings/reference.md b/docs/docs/settings/reference.md index 55758f555a..b270037831 100644 --- a/docs/docs/settings/reference.md +++ b/docs/docs/settings/reference.md @@ -4,7 +4,7 @@ title: Reference Patterns ## Reference Patterns -InvenTree contains a number of data models which require a *unique* reference field (such as [Purchase Orders](../order/purchase_order.md)). In addition to being *unique* these reference values must conform to a specific *pattern* (which can be defined by the user). Defined reference patterns also make it simple for the user to control how references are generated. +InvenTree contains a number of data models which require a *unique* reference field (such as [Purchase Orders](../purchasing/purchase_order.md)). In addition to being *unique* these reference values must conform to a specific *pattern* (which can be defined by the user). Defined reference patterns also make it simple for the user to control how references are generated. ### Default Patterns diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index cd2b2c0161..e6cdb1d17f 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -91,7 +91,7 @@ The following debugging / logging options are available: | Environment Variable | Configuration File | Description | Default | | --- | --- | --- | --- | -| INVENTREE_DEBUG | debug | Enable [debug mode](./intro.md#debug-mode) | False | +| INVENTREE_DEBUG | debug | Enable [debug mode](./index.md#debug-mode) | False | | INVENTREE_DEBUG_QUERYCOUNT | debug_querycount | Enable [query count logging](https://github.com/bradmontgomery/django-querycount) in the terminal | False | | INVENTREE_DB_LOGGING | db_logging | Enable logging of database messages | False | | INVENTREE_LOG_LEVEL | log_level | Set level of logging to terminal | WARNING | @@ -101,7 +101,7 @@ The following debugging / logging options are available: ### Debug Mode -Enabling the `INVENTREE_DEBUG` setting will turn on [Django debug mode]({% include "django.html" %}/ref/settings/#debug). This mode is intended for development purposes, and should not be enabled in a production environment. Read more about [InvenTree debug mode](./intro.md#debug-mode). +Enabling the `INVENTREE_DEBUG` setting will turn on [Django debug mode]({% include "django.html" %}/ref/settings/#debug). This mode is intended for development purposes, and should not be enabled in a production environment. Read more about [InvenTree debug mode](./index.md#debug-mode). ### Query Count Logging @@ -143,7 +143,7 @@ Depending on how your InvenTree installation is configured, you will need to pay ### Debug Mode -Note that in [debug mode](./intro.md#debug-mode), some of the above settings are automatically adjusted to allow for easier development. The following settings are internally overridden in debug mode with the values specified below: +Note that in [debug mode](./index.md#debug-mode), some of the above settings are automatically adjusted to allow for easier development. The following settings are internally overridden in debug mode with the values specified below: | Setting | Value in Debug Mode | Description | | --- | --- | --- | @@ -218,7 +218,7 @@ You can either specify the password directly using `INVENTREE_ADMIN_PASSWORD`, o !!! info "Administrator Account" Providing `INVENTREE_ADMIN` credentials will result in the provided account being created with *superuser* permissions when InvenTree is started. -## Secret Key material +## Secret Key Material InvenTree requires secret keys for providing cryptographic signing and oidc private keys- this should be a secret (and unpredictable) value. @@ -455,7 +455,7 @@ If you want to remove the InvenTree branding as far as possible from your end-us ## Plugin Options -The following [plugin](../extend/plugins.md) configuration options are available: +The following [plugin](../plugins/index.md) configuration options are available: | Environment Variable | Configuration File | Description | Default | | --- | --- | --- | --- | diff --git a/docs/docs/start/docker.md b/docs/docs/start/docker.md index 405c139e70..3a3f17a2c0 100644 --- a/docs/docs/start/docker.md +++ b/docs/docs/start/docker.md @@ -64,7 +64,7 @@ By default, this file will be created as `config.yaml` in the external data volu InvenTree uses a secret key to provide cryptographic signing for the application. -As specified in the [configuration documentation](./config.md#secret-key) this can be passed to the InvenTree application directly as an environment variable, or provided via a file. +As specified in the [configuration documentation](./config.md#secret-key-material) this can be passed to the InvenTree application directly as an environment variable, or provided via a file. By default, the InvenTree container expects the secret key file to exist as `secret_key.txt` (within the external data volume). If this file does not exist, it will be created and a new key will be randomly generated. @@ -73,7 +73,7 @@ By default, the InvenTree container expects the secret key file to exist as `sec #### Plugins -Plugins are supported natively when running under docker. There are two ways to [install plugins](../extend/plugins/install.md) when using docker: +Plugins are supported natively when running under docker. There are two ways to [install plugins](../plugins/install.md) when using docker: - Install via the `plugins.txt` file provided in the external data directory - Install into the `plugins/` subdirectory in the external data directory diff --git a/docs/docs/start/intro.md b/docs/docs/start/index.md similarity index 100% rename from docs/docs/start/intro.md rename to docs/docs/start/index.md diff --git a/docs/docs/start/processes.md b/docs/docs/start/processes.md index d6fde5c0c4..826644a596 100644 --- a/docs/docs/start/processes.md +++ b/docs/docs/start/processes.md @@ -22,7 +22,7 @@ In running InvenTree via [docker compose](./docker_install.md), the database pro The InvenTree web server is responsible for serving the InvenTree web interface to users. The web server is a [Django](https://www.djangoproject.com/) application, which is run using the [Gunicorn](https://gunicorn.org/) WSGI server. -The web server interfaces with the backend database and provides a [REST API](../api/api.md) (via the [Django REST framework](https://www.django-rest-framework.org/)) which is used by the frontend web interface. +The web server interfaces with the backend database and provides a [REST API](../api/index.md) (via the [Django REST framework](https://www.django-rest-framework.org/)) which is used by the frontend web interface. In running InvenTree via [docker compose](./docker_install.md), the web server process is managed by the `inventree-server` service, which runs from a custom docker image. diff --git a/docs/docs/stock/adjust.md b/docs/docs/stock/adjust.md index 6ae0a1cd68..992e7abbdf 100644 --- a/docs/docs/stock/adjust.md +++ b/docs/docs/stock/adjust.md @@ -68,7 +68,7 @@ then the merge would not be possible. If the conditions are met, the process of merging will add up the stock quantity for all items involved in the merge and create a new stock item with the final calculated quantity. -To merge stock items, check two or more items in a stock table and click on the icon above the table, then click on " Merge Stock" menu option. +To merge stock items, check two or more items in a stock table and click on the {{ icon("packages", title="Stock Actions") }} icon above the table, then click on {{ icon("arrow-merge", title="Merge") }} menu option. In the Merge Stock Items form, user can decide to allow mismatched suppliers or status to be merged together (disabled by default). diff --git a/docs/docs/stock/stock.md b/docs/docs/stock/index.md similarity index 79% rename from docs/docs/stock/stock.md rename to docs/docs/stock/index.md index afe87d3892..1106c202cb 100644 --- a/docs/docs/stock/stock.md +++ b/docs/docs/stock/index.md @@ -12,7 +12,7 @@ Stock locations can be assigned custom icons (either directly or through [Stock By default, the tabler icons package (with prefix: `ti`) is available. To manually select an item, search on the [tabler icons](https://tabler.io/icons) page for an icon and copy its name e.g. `bookmark`. Some icons have a filled and an outline version (if no variants are specified, it's an outline variant). Now these values can be put into the format: `::`. E.g. `ti:bookmark:outline` or `ti:bookmark:filled`. -If there are some icons missing in the tabler icons package, users can even install their own custom icon packs through a plugin. See [`IconPackMixin`](../extend/plugins/icon.md). +If there are some icons missing in the tabler icons package, users can even install their own custom icon packs through a plugin. See [`IconPackMixin`](../plugins/mixins/icon.md). ## Stock Location Type @@ -33,7 +33,7 @@ The external flag does not get inherited to sublocations. ## Stock Item -A *Stock Item* is an actual instance of a [*Part*](../part/part.md) item. It represents a physical quantity of the *Part* in a specific location. +A *Stock Item* is an actual instance of a [*Part*](../part/index.md) item. It represents a physical quantity of the *Part* in a specific location. ### Stock Item Details @@ -60,11 +60,3 @@ The *Stock Item* detail view shows information regarding the particular stock it Every time a *Stock Item* is adjusted, a *Stock Tracking* entry is automatically created. This ensures a complete history of the *Stock Item* is maintained as long as the item is in the system. Each stock tracking historical item records the user who performed the action. - -## Supplier Part Pack Size - -Supplier parts can have a pack size defined. This value is defined when creating or editing a part. By default, the pack size is 1. - -When buying parts, they are bought in packs. This is taken into account in Purchase Orders: if a supplier part with a pack size of 5 is bought in a quantity of 4, 20 parts will be added to stock when the parts are received. - -When adding stock manually, the supplier part can be added in packs or in individual parts. This is to allow the addition of items in opened packages. Set the flag "Use pack size" (`use_pack_size` in the API) to True in order to add parts in packs. diff --git a/docs/docs/stock/owner.md b/docs/docs/stock/owner.md index bd7b2b8812..03a4765ea6 100644 --- a/docs/docs/stock/owner.md +++ b/docs/docs/stock/owner.md @@ -39,7 +39,7 @@ There are two types of owners in InvenTree: [groups](../settings/permissions.md# * If a group is selected as owner, **all** users linked to the specified group will be able to edit the stock location or item. * If a user is selected as owner, only the specified user will be able to edit the stock location or item. -When selecting an owner, in the drop-down list, groups are annotated with the icon and users are annotated with the icon: +When selecting an owner, in the drop-down list, groups are annotated with the {{ icon("users", title="Users") }} icon and users are annotated with the {{ icon("user", title="User") }} icon: {% with id="stock_owner_type", url="stock/stock_owner_type.png", description="Display stock owner type" %} {% include 'img.html' %} @@ -47,10 +47,10 @@ When selecting an owner, in the drop-down list, groups are annotated with the icon under the location's name then click on "Edit Location". +To specify the owner of a stock location, navigate to the stock location detail page. Click on the {{ icon("sitemap") }}icon under the location's name then click on "Edit Location". !!! warning - If you cannot see the icon, it means that you do **not** have permissions to edit stock locations. Refer to [the permissions documentation](../settings/permissions.md#roles) and/or contact your InvenTree administrator. + If you cannot see the {{ icon("sitemap") }}icon, it means that you do **not** have permissions to edit stock locations. Refer to [the permissions documentation](../settings/permissions.md#roles) and/or contact your InvenTree administrator. In the "Edit Stock Location" form, select the owner and click the "Submit" button: @@ -74,10 +74,10 @@ is moved to a location owned by Daniel. ### Set Stock Item Owner -To specify the owner of a stock item, navigate to the stock item detail page. Click on the icon under the item's name then click on "Edit stock item". +To specify the owner of a stock item, navigate to the stock item detail page. Click on the {{ icon("tools") }} icon under the item's name then click on "Edit stock item". !!! warning - If you cannot see the icon, it means that you do **not** have permissions to edit stock items. Refer to [the permissions documentation](../settings/permissions.md/#roles) and/or contact your InvenTree administrator. + If you cannot see the {{ icon("tools") }} icon, it means that you do **not** have permissions to edit stock items. Refer to [the permissions documentation](../settings/permissions.md/#roles) and/or contact your InvenTree administrator. In the "Edit Stock Item" form, select the owner and click the "Save" button: diff --git a/docs/docs/stock/status.md b/docs/docs/stock/status.md index aadf175de9..fc4df03af5 100644 --- a/docs/docs/stock/status.md +++ b/docs/docs/stock/status.md @@ -4,7 +4,7 @@ title: Stock Status ## Stock Status -Each [Stock Item](./stock.md#stock-item) has a *status* attribute, which serves to identify the current condition of the individual stock item. +Each [Stock Item](./index.md#stock-item) has a *status* attribute, which serves to identify the current condition of the individual stock item. Certain stock item status codes will restrict the availability of the stock item. diff --git a/docs/docs/stock/test.md b/docs/docs/stock/test.md index 1374266cf3..40d212e1cb 100644 --- a/docs/docs/stock/test.md +++ b/docs/docs/stock/test.md @@ -4,7 +4,7 @@ title: Stock Test Result ## Stock Test Result -Stock items which are associated with a [testable part](../part/part.md#testable) can have associated test data - this is particularly useful for tracking unit testing / commissioning / acceptance data against a serialized stock item. +Stock items which are associated with a [testable part](../part/index.md#testable) can have associated test data - this is particularly useful for tracking unit testing / commissioning / acceptance data against a serialized stock item. The master "Part" record for the stock item can define multiple [test templates](../part/test.md), against which test data can be uploaded. Additionally, arbitrary test information can be assigned to the stock item. @@ -44,7 +44,7 @@ For any information regarding the reporting architecture, please refer to the [R ### Automated Test Integration -The stock item testing framework is especially useful when integrating with an automated acceptance testing framework. Test results can be uploaded using the [InvenTree API](../api/api.md) or the [InvenTree Python Interface](../api/python/python.md). +The stock item testing framework is especially useful when integrating with an automated acceptance testing framework. Test results can be uploaded using the [InvenTree API](../api/index.md) or the [InvenTree Python Interface](../api/python/index.md). !!! info "Example" You design and sell a temperature sensor which needs to be calibrated before it can be sold. An automated calibration tool sets the offset in the device, and uploads a test result to the InvenTree database. diff --git a/docs/docs/stock/tracking.md b/docs/docs/stock/tracking.md index 12b858c352..274ec55cc6 100644 --- a/docs/docs/stock/tracking.md +++ b/docs/docs/stock/tracking.md @@ -45,7 +45,7 @@ The following context variables are available by default when generating a batch #### Plugin Support -To implement custom batch code functionality, refer to the details on the [Validation Plugin Mixin](../extend/plugins/validation.md#batch-codes). +To implement custom batch code functionality, refer to the details on the [Validation Plugin Mixin](../plugins/mixins/validation.md#batch-codes). ### Serial Numbers @@ -53,7 +53,7 @@ A serial "number" is used to uniquely identify a single, unique stock item. Note #### Uniqueness Requirements -By default, serial numbers must be unique across any given [Part](../part/part.md) instance (including any variants of that part). +By default, serial numbers must be unique across any given [Part](../part/index.md) instance (including any variants of that part). However, it is also possible to specify that serial numbers must be globally unique across all types of parts. This is configurable in the settings display (see below): @@ -146,7 +146,7 @@ If a provided serial number (or group of numbers) is not considered valid, an er #### Plugin Support -Custom serial number functionality, with any arbitrary requirements or level of complexity, can be implemented using the [Validation Plugin Mixin class](../extend/plugins/validation.md#serial-numbers). Refer to the documentation for this plugin for technical details. +Custom serial number functionality, with any arbitrary requirements or level of complexity, can be implemented using the [Validation Plugin Mixin class](../plugins/mixins/validation.md#serial-numbers). Refer to the documentation for this plugin for technical details. A custom plugin allows the user to determine how a "valid" serial number is defined, and (crucially) how any given serial number value is incremented to provide the next value in the sequence. diff --git a/docs/main.py b/docs/main.py index 2d16e02d17..40db2bdb4d 100644 --- a/docs/main.py +++ b/docs/main.py @@ -4,7 +4,7 @@ import json import os import subprocess import textwrap -from typing import Literal +from typing import Literal, Optional import requests import yaml @@ -355,3 +355,26 @@ def define_env(env): ret_data += f'| {k} | `{v["type"]}` | {v["description"]} |\n' return ret_data + + @env.macro + def icon( + source: str, + size: str = '20px', + color: Optional[str] = None, + title: Optional[str] = None, + ): + """Return a tabler icon for a given source. + + Arguments: + source: The name of the icon to display (e.g. 'check', 'cross', etc.) + size: The size of the icon (default: 20px) + color: The color of the icon (default: None) + title: The title of the icon (default: None) + + Requires CSS to be loaded from: + https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@3.31.0/dist/tabler-icons.min.css + """ + c = f' color: {color};' if color else '' + t = f' {title}' if title else '' + + return f"{t}" diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index fba0e3256e..09fd49fd36 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -58,6 +58,7 @@ extra_css: - stylesheets/splide.min.css - stylesheets/extra.css - stylesheets/neoteroi-mkdocs.css + - https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@3.31.0/dist/tabler-icons.min.css extra_javascript: - javascripts/extra.js - javascripts/fontawesome.js @@ -72,27 +73,58 @@ extra_javascript: nav: - InvenTree: - InvenTree: index.md - - Features: features.md - FAQ: faq.md + - Demo: demo.md + - Release Notes: releases/release_notes.md - Core Concepts: - Terminology: concepts/terminology.md + - Threat Model: concepts/threat_model.md - Physical Units: concepts/units.md + - Companies: concepts/company.md - Custom States: concepts/custom_states.md - Pricing: concepts/pricing.md - - Threat Model: concepts/threat_model.md + - Project Codes: concepts/project_codes.md + - Barcodes: + - Barcode Support: barcodes/index.md + - Internal Barcodes: barcodes/internal.md + - External Barcodes: barcodes/external.md + - Custom Barcodes: barcodes/custom.md - Development: - Contributing: develop/contributing.md - Devcontainer: develop/devcontainer.md - React Frontend: develop/react-frontend.md - - Privacy: privacy.md - - Release Notes: releases/release_notes.md - - Project: + - Mobile App: + - Mobile App: app/index.md + - Connect: app/connect.md + - Navigation: app/navigation.md + - Search: app/search.md + - Barcodes: app/barcode.md + - Parts: app/part.md + - Stock: app/stock.md + - Purchase Orders: app/po.md + - Sales Orders: app/so.md + - Settings: app/settings.md + - Privacy: app/privacy.md + - Translation: app/translation.md + - Suggestions: app/issues.md + - InvenTree API: + - Overview: api/index.md + - API Schema: api/schema.md + - Model Metadata: api/metadata.md + - Download Data: api/download.md + - Bulk Delete: api/bulk_delete.md + - Interactive API: api/browse.md + - Python Interface: + - Overview: api/python/index.md + - Currency Support: api/python/currency.md + - Examples: api/python/examples.md + - Project Details: - Governance: project/governance.md - - Project Security: project/security.md + - Project Security: security.md - Resources: project/resources.md - - Security: security.md + - Privacy: privacy.md - Install: - - Introduction: start/intro.md + - Introduction: start/index.md - Processes: start/processes.md - Configuration: start/config.md - Docker: @@ -109,7 +141,7 @@ nav: - Migrating Data: start/migrate.md - Advanced Topics: start/advanced.md - Parts: - - Parts: part/part.md + - Parts: part/index.md - Creating Parts: part/create.md - Part Views: part/views.md - Tracking: part/trackable.md @@ -122,27 +154,32 @@ nav: - Stocktake: part/stocktake.md - Notifications: part/notification.md - Stock: - - Stock Items: stock/stock.md + - Stock Items: stock/index.md - Stock Status: stock/status.md - Stock Tracking: stock/tracking.md - Adjusting Stock: stock/adjust.md - Stock Expiry: stock/expiry.md - Stock Ownership: stock/owner.md - Test Results: stock/test.md - - Build: - - Build Orders: build/build.md - - Build Outputs: build/output.md - - Allocating Stock: build/allocate.md - - Example Build Order: build/example.md - - Bill of Materials: build/bom.md - - Orders: - - Companies: order/company.md - - Purchase Orders: order/purchase_order.md - - Sales Orders: order/sales_order.md - - Return Orders: order/return_order.md - - Project Codes: order/project_codes.md + - Manufacturing: + - Manufacturing: manufacturing/index.md + - Bill of Materials: manufacturing/bom.md + - Build Orders: manufacturing/build.md + - Build Outputs: manufacturing/output.md + - Allocating Stock: manufacturing/allocate.md + - Example Build Order: manufacturing/example.md + - Purchasing: + - Purchasing: purchasing/index.md + - Suppliers: purchasing/supplier.md + - Manufacturers: purchasing/manufacturer.md + - Purchase Orders: purchasing/purchase_order.md + - Sales: + - Sales: sales/index.md + - Customers: sales/customer.md + - Sales Orders: sales/sales_order.md + - Return Orders: sales/return_order.md - Report: - - Templates: report/templates.md + - Templates: report/index.md - Template Rendering: report/weasyprint.md - Template Editor: report/template_editor.md - Reports: report/report.md @@ -151,7 +188,7 @@ nav: - Helper Functions: report/helpers.md - Barcodes: report/barcodes.md - Sample Templates: report/samples.md - - Admin: + - Administration: - Global Settings: settings/global.md - User Settings: settings/user.md - Reference Patterns: settings/reference.md @@ -168,66 +205,35 @@ nav: - Background Tasks: settings/tasks.md - Error Logs: settings/logs.md - Error Codes: settings/error_codes.md - - App: - - InvenTree App: app/app.md - - Connect: app/connect.md - - Navigation: app/navigation.md - - Search: app/search.md - - Barcodes: app/barcode.md - - Parts: app/part.md - - Stock: app/stock.md - - Purchase Orders: app/po.md - - Sales Orders: app/so.md - - Settings: app/settings.md - - Privacy: app/privacy.md - - Translation: app/translation.md - - Suggestions: app/issues.md - - Extend: - - InvenTree API: - - Overview: api/api.md - - API Schema: api/schema.md - - Model Metadata: api/metadata.md - - Download Data: api/download.md - - Bulk Delete: api/bulk_delete.md - - Interactive API: api/browse.md - - Python Interface: - - Overview: api/python/python.md - - Currency Support: api/python/currency.md - - Examples: api/python/examples.md - - Barcodes: - - Overview: barcodes/barcodes.md - - Internal Barcodes: barcodes/internal.md - - External Barcodes: barcodes/external.md - - Custom Barcodes: barcodes/custom.md - - Plugins: - - Overview: extend/plugins.md - - Installation: extend/plugins/install.md - - Developing a Plugin: extend/how_to_plugin.md - - Model Metadata: extend/plugins/metadata.md - - Tags: extend/plugins/tags.md - - Unit Test: extend/plugins/test.md + - Plugins: + - Overview: plugins/index.md + - Installation: plugins/install.md + - Developing a Plugin: plugins/how_to.md + - Model Metadata: plugins/metadata.md + - Tags: plugins/tags.md + - Unit Test: plugins/test.md - Plugin Mixins: - - Action Mixin: extend/plugins/action.md - - API Mixin: extend/plugins/api.md - - App Mixin: extend/plugins/app.md - - Barcode Mixin: extend/plugins/barcode.md - - Currency Mixin: extend/plugins/currency.md - - Data Export Mixin: extend/plugins/export.md - - Event Mixin: extend/plugins/event.md - - Icon Pack Mixin: extend/plugins/icon.md - - Label Printing Mixin: extend/plugins/label.md - - Locate Mixin: extend/plugins/locate.md - - Navigation Mixin: extend/plugins/navigation.md - - Report Mixin: extend/plugins/report.md - - Schedule Mixin: extend/plugins/schedule.md - - Settings Mixin: extend/plugins/settings.md - - URL Mixin: extend/plugins/urls.md - - User Interface Mixin: extend/plugins/ui.md - - Validation Mixin: extend/plugins/validation.md + - Action Mixin: plugins/mixins/action.md + - API Mixin: plugins/mixins/api.md + - App Mixin: plugins/mixins/app.md + - Barcode Mixin: plugins/mixins/barcode.md + - Currency Mixin: plugins/mixins/currency.md + - Event Mixin: plugins/mixins/event.md + - Data Export Mixin: plugins/mixins/export.md + - Icon Pack Mixin: plugins/mixins/icon.md + - Label Printing Mixin: plugins/mixins/label.md + - Locate Mixin: plugins/mixins/locate.md + - Navigation Mixin: plugins/mixins/navigation.md + - Report Mixin: plugins/mixins/report.md + - Schedule Mixin: plugins/mixins/schedule.md + - Settings Mixin: plugins/mixins/settings.md + - URL Mixin: plugins/mixins/urls.md + - User Interface Mixin: plugins/mixins/ui.md + - Validation Mixin: plugins/mixins/validation.md - Machines: - - Overview: extend/machines/overview.md - - Label Printer: extend/machines/label_printer.md - - Third-Party: extend/integrate.md + - Overview: plugins/machines/overview.md + - Label Printer: plugins/machines/label_printer.md + - Third-Party: plugins/integrate.md # Plugins plugins: diff --git a/src/frontend/src/components/nav/NavigationTree.tsx b/src/frontend/src/components/nav/NavigationTree.tsx index decfa835d7..805ee96ef0 100644 --- a/src/frontend/src/components/nav/NavigationTree.tsx +++ b/src/frontend/src/components/nav/NavigationTree.tsx @@ -142,6 +142,7 @@ export default function NavigationTree({ (payload: RenderTreeNodePayload) => { return ( - + + + + {t`Selected build outputs will be completed, but marked as scrapped`} + + {t`Allocated stock items will be consumed`} + + + ), fields: buildOutputScrapFields, onFormSuccess: onFormSuccess, successMessage: t`Build outputs have been scrapped`, @@ -417,6 +427,16 @@ export function useCancelBuildOutputsForm({ url: apiUrl(ApiEndpoints.build_output_delete, build.pk), method: 'POST', title: t`Cancel Build Outputs`, + preFormContent: ( + + + {t`Selected build outputs will be removed`} + + {t`Allocated stock items will be returned to stock`} + + + + ), fields: buildOutputCancelFields, onFormSuccess: onFormSuccess, successMessage: t`Build outputs have been cancelled`, diff --git a/src/frontend/src/forms/StockForms.tsx b/src/frontend/src/forms/StockForms.tsx index 6fc9bfdf95..dc6c7a3bf7 100644 --- a/src/frontend/src/forms/StockForms.tsx +++ b/src/frontend/src/forms/StockForms.tsx @@ -1,5 +1,14 @@ import { t } from '@lingui/core/macro'; -import { Flex, Group, Skeleton, Stack, Table, Text } from '@mantine/core'; +import { + Alert, + Flex, + Group, + List, + Skeleton, + Stack, + Table, + Text +} from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { modals } from '@mantine/modals'; import { @@ -1021,6 +1030,7 @@ function stockOperationModal({ endpoint, filters, title, + preFormContent, successMessage, modalFunc = useCreateApiFormModal }: { @@ -1032,6 +1042,7 @@ function stockOperationModal({ fieldGenerator: (items: any[]) => ApiFormFieldSet; endpoint: ApiEndpoints; title: string; + preFormContent?: JSX.Element; successMessage?: string; modalFunc?: apiModalFunc; }) { @@ -1083,6 +1094,7 @@ function stockOperationModal({ return modalFunc({ url: endpoint, fields: fields, + preFormContent: preFormContent, title: title, size: '80%', successMessage: successMessage, @@ -1154,7 +1166,16 @@ export function useMergeStockItem(props: StockOperationProps) { fieldGenerator: stockMergeFields, endpoint: ApiEndpoints.stock_merge, title: t`Merge Stock`, - successMessage: t`Stock merged` + successMessage: t`Stock merged`, + preFormContent: ( + + + {t`Merge operation cannot be reversed`} + {t`Tracking information may be lost when merging items`} + {t`Supplier information may be lost when merging items`} + + + ) }); } diff --git a/src/frontend/src/pages/Index/Settings/SystemSettings.tsx b/src/frontend/src/pages/Index/Settings/SystemSettings.tsx index ece4aaef76..7cf65b7fb0 100644 --- a/src/frontend/src/pages/Index/Settings/SystemSettings.tsx +++ b/src/frontend/src/pages/Index/Settings/SystemSettings.tsx @@ -207,7 +207,8 @@ export default function SystemSettings() { 'PART_COPY_PARAMETERS', 'PART_COPY_TESTS', 'PART_CATEGORY_PARAMETERS', - 'PART_CATEGORY_DEFAULT_ICON' + 'PART_CATEGORY_DEFAULT_ICON', + 'PART_PARAMETER_ENFORCE_UNITS' ]} /> )
Release Date GitHub Docker{{ icon("clipboard") }} Release{{ icon("calendar") }} Date{{ icon("brand-github") }} GitHub{{ icon("brand-docker") }} Docker