From 229af4b093a553c3f8484c131b55808d5a523909 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 00:22:06 +1100 Subject: [PATCH 01/19] Update 0.6.0.md https://github.com/inventree/InvenTree/pull/2198 --- docs/releases/0.6.0.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/releases/0.6.0.md b/docs/releases/0.6.0.md index 96985b8..b14e03d 100644 --- a/docs/releases/0.6.0.md +++ b/docs/releases/0.6.0.md @@ -54,6 +54,10 @@ PR [#2205](https://github.com/inventree/InvenTree/pull/2205) represents a major PR [#2208](https://github.com/inventree/InvenTree/pull/2208) provides notification emails when the stock level for a particular part falls below the configured "minimum stock" threshold for that part. An email is automatically sent to any users who are subscribed to notifications for that part. +### Stock Item Forms + +PR [#2198](https://github.com/inventree/InvenTree/pull/2198) provides a major refactor of stock item forms, for creating and editing stock items. These forms have been migrated to the REST API, providing a much more responsive user experience. + ## Major Bug Fixes | Pull Request | Description | From c5bac2d5d45dd1b88c1d5552e14454d8aeed107d Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 10:33:50 +1100 Subject: [PATCH 02/19] Improvements to installation instructions --- _includes/config.yaml | 60 --------------------------------------- docs/start/config.md | 20 +++++++++---- docs/start/development.md | 6 ++-- docs/start/docker.md | 9 ++++-- docs/start/docker_prod.md | 10 +++++-- docs/start/install.md | 39 +++++++++++++------------ docs/start/intro.md | 15 ++++++---- docs/start/migrate.md | 6 ++-- docs/start/update.md | 5 +++- mkdocs.yml | 2 +- 10 files changed, 69 insertions(+), 103 deletions(-) diff --git a/_includes/config.yaml b/_includes/config.yaml index 0e6232d..a5e3f34 100644 --- a/_includes/config.yaml +++ b/_includes/config.yaml @@ -68,19 +68,6 @@ currencies: # Email backend configuration # Ref: https://docs.djangoproject.com/en/dev/topics/email/ -# Available options: -# host: Email server host address -# port: Email port -# username: Account username -# password: Account password -# prefix: Email subject prefix -# tls: Enable TLS support -# ssl: Enable SSL support - -# Alternatively, these options can all be set using environment variables, -# with the INVENTREE_EMAIL_ prefix: -# e.g. INVENTREE_EMAIL_HOST / INVENTREE_EMAIL_PORT / INVENTREE_EMAIL_USERNAME -# Refer to the InvenTree documentation for more information email: # backend: 'django.core.mail.backends.smtp.EmailBackend' @@ -96,33 +83,11 @@ email: # Use the environment variable INVENTREE_DEBUG debug: True -# Set debug_toolbar to True to enable a debugging toolbar for InvenTree -# Note: This will only be displayed if DEBUG mode is enabled, -# and only if InvenTree is accessed from a local IP (127.0.0.1) -debug_toolbar: False - # Configure the system logging level # Use environment variable INVENTREE_LOG_LEVEL # Options: DEBUG / INFO / WARNING / ERROR / CRITICAL log_level: WARNING -# Allowed hosts (see ALLOWED_HOSTS in Django settings documentation) -# A list of strings representing the host/domain names that this Django site can serve. -# Default behaviour is to allow all hosts (THIS IS NOT SECURE!) -allowed_hosts: - - '*' - -# Cross Origin Resource Sharing (CORS) settings (see https://github.com/ottoyiu/django-cors-headers) -# Following parameters are -cors: - # CORS_ORIGIN_ALLOW_ALL - If True, the whitelist will not be used and all origins will be accepted. - allow_all: True - - # CORS_ORIGIN_WHITELIST - A list of origins that are authorized to make cross-site HTTP requests. Defaults to [] - # whitelist: - # - https://example.com - # - https://sub.example.com - # MEDIA_ROOT is the local filesystem location for storing uploaded files # By default, it is stored under /home/inventree/data/media # Use environment variable INVENTREE_MEDIA_ROOT @@ -132,28 +97,3 @@ media_root: '/home/inventree/data/media' # By default, it is stored under /home/inventree/data/static # Use environment variable INVENTREE_STATIC_ROOT static_root: '/home/inventree/data/static' - -# Optional URL schemes to allow in URL fields -# By default, only the following schemes are allowed: ['http', 'https', 'ftp', 'ftps'] -# Uncomment the lines below to allow extra schemes -#extra_url_schemes: -# - mailto -# - git -# - ssh - -# Permit custom authentication backends -#authentication_backends: -# - 'django.contrib.auth.backends.ModelBackend' - -# Custom middleware, sometimes needed alongside an authentication backend change. -#middleware: -# - 'django.middleware.security.SecurityMiddleware' -# - 'django.contrib.sessions.middleware.SessionMiddleware' -# - 'django.middleware.locale.LocaleMiddleware' -# - 'django.middleware.common.CommonMiddleware' -# - 'django.middleware.csrf.CsrfViewMiddleware' -# - 'corsheaders.middleware.CorsMiddleware' -# - 'django.contrib.auth.middleware.AuthenticationMiddleware' -# - 'django.contrib.messages.middleware.MessageMiddleware' -# - 'django.middleware.clickjacking.XFrameOptionsMiddleware' -# - 'InvenTree.middleware.AuthRequiredMiddleware' diff --git a/docs/start/config.md b/docs/start/config.md index 91612c0..dc9f0ee 100644 --- a/docs/start/config.md +++ b/docs/start/config.md @@ -19,7 +19,7 @@ The default InvenTree config file is located at `./InvenTree/config.yaml` However, the config file can be placed elsewhere, and specified with the `INVENTREE_CONFIG_FILE` environment variable. -The default configuration file file is shown below: +A short snippet from an example configuration file file is shown below. The entire default configuration file can be found on [GitHub](https://github.com/inventree/InvenTree/blob/master/InvenTree/config_template.yaml) ``` yaml {% include 'config.yaml' %} @@ -32,10 +32,10 @@ In addition to specifying InvenTree options via the `config.yaml` file, these op - Environment variable settings use the `INVENTREE_` prefix, and are all uppercase. - Config file settings do not use this prefix, and are all lowercase -!!! info Priotity +!!! info "Configuration Priority" Configuration options set via environment variables will take priority over the values set in the `config.yaml` file. -!!! warning Available Variables +!!! warning "Available Variables" Some configuration options cannot be set via environment variables. Refer to the documentation below. ## Basic Options @@ -101,7 +101,13 @@ The following email settings are available: ## Allowed Hosts / CORS -By default, all hosts are allowed, and CORS requests are enabled from any origin. **This is not secure and should be adjusted for your installation**. These options can be changed in the configuration file. +By default, all hosts are allowed, and CORS requests are enabled from any origin. + +!!! danger "Not Secure" + Allowing access from any host is not secure, and should be adjusted for your installation. + +!!! info "Configuration File" + Allowed hosts and CORS options must be changed in the configuration file, and cannot be set via environment variables For further information, refer to the following documentation: @@ -124,13 +130,15 @@ Alternatively this location can be specified with the `INVENTREE_MEDIA_ROOT` env ## Authentication +InvenTree provides allowance for additional sign-in options. The following options are not enabled by default, and care must be taken by the system administrator when configuring these settings. + ### Single Sign on -SSO backends for all wanted providers need to be added to the config file as a list under the key `social_backends`. The correct backend-name can be found in django-allauths [configuration documentation](https://django-allauth.readthedocs.io/en/latest/installation.html#django). +SSO backends for all required authentication providers need to be added to the config file as a list under the key `social_backends`. The correct backend-name can be found in django-allauths [configuration documentation](https://django-allauth.readthedocs.io/en/latest/installation.html#django). If the selected providers need additional settings they must be added as dicts under the key `social_providers`. The correct settings can be found in the django-allauths [provider documentation](https://django-allauth.readthedocs.io/en/latest/providers.html). -!!! note "You are not done" +!!! warning "You are not done" SSO still needs credentials for all providers and has to be enabled in the [global settings](../settings/global.md)! diff --git a/docs/start/development.md b/docs/start/development.md index c4ce785..3c530d3 100644 --- a/docs/start/development.md +++ b/docs/start/development.md @@ -17,7 +17,7 @@ InvenTree includes a simple server application, suitable for use in a developmen To run the development server on a local machine, run the command: ``` -(env) inv server +(env) invoke server ``` This will launch the InvenTree web interface at `http://127.0.0.1:8000`. @@ -25,7 +25,7 @@ This will launch the InvenTree web interface at `http://127.0.0.1:8000`. A different port can be specified using the `-a` flag: ``` -(env) inv server -a 127.0.0.1:8123 +(env) invoke server -a 127.0.0.1:8123 ``` Serving on the address `127.0.0.1` means that InvenTree will only be available *on that computer*. The server will be accessible from a web browser on the same computer, but not from any other computers on the local network. @@ -35,7 +35,7 @@ Serving on the address `127.0.0.1` means that InvenTree will only be available * To enable access to the InvenTree server from other computers on a local network, you need to know the IP of the computer running the server. For example, if the server IP address is `192.168.120.1`: ``` -(env) inv server -a 192.168.120.1:8000 +(env) invoke server -a 192.168.120.1:8000 ``` ## Background Worker diff --git a/docs/start/docker.md b/docs/start/docker.md index 6358e8a..db7756c 100644 --- a/docs/start/docker.md +++ b/docs/start/docker.md @@ -12,14 +12,17 @@ The InvenTree docker image contains all the required system packages, python mod Docker images are available with the following tags: -- **inventree:stable** - represents the most recent stable release version of InvenTree -- **inventree:latest** - represents the most up-to-date *development* version of InvenTree. -- **inventree:tag** - specific tagged images are built for each tagged release of InvenTree +| Tag | Description | +| --- | --- | +| **inventree:stable** | The most recent *stable* release version of InvenTree | +| **inventree:latest** | The most up-to-date *development* version of InvenTree. | +| **inventree:tag** | Specific tagged images are built for each tagged release of InvenTree | ### Docker Compose InvenTree provides sample docker-compose files to get you up and running. +| Compose File | Target | Description | - A *production* compose file is intended to be used in a production environment, running the web server behind a nginx proxy. - A *development* compose file provides a simple way to spin up a development environment diff --git a/docs/start/docker_prod.md b/docs/start/docker_prod.md index 7f749fc..ed78bb8 100644 --- a/docs/start/docker_prod.md +++ b/docs/start/docker_prod.md @@ -13,8 +13,13 @@ Using the [InvenTree docker image](./docker.md) streamlines the setup process fo It is strongly recommended that you use a [docker-compose](https://docs.docker.com/compose/) script to manage your InvenTree docker image. +### Example Script + An example docker compose file can be [found here](https://github.com/inventree/InvenTree/blob/master/docker/docker-compose.yml) - the documentation below will be using this docker compose file. +!!! info "Stable Version" + The example docker-compose file targets `inventree:stable` docker image by default + ### Containers The example docker-compose file launches the following containers: @@ -46,9 +51,10 @@ Nginx working as a reverse proxy, separating requests for static and media files This container uses the official [nginx image](https://hub.docker.com/_/nginx). -An nginx configuration file must be provided to the image. Use the [example configuration file](https://github.com/inventree/InvenTree/blob/master/docker/nginx.conf) as a starting point. +!!! info "Configuration File" + An nginx configuration file must be provided to the image. Use the [example configuration file](https://github.com/inventree/InvenTree/blob/master/docker/nginx.conf) as a starting point. -*__Note__: You must save this conf file in the same directory as your docker-compose.yml file* + *__Note__: You must save the `nginx.conf` file in the same directory as your docker-compose.yml file* !!! info "Proxy Pass" If you change the name (or port) of the InvenTree web server container, you will need to also adjust the `proxy_pass` setting in the nginx.conf file! diff --git a/docs/start/install.md b/docs/start/install.md index afbca99..c713587 100644 --- a/docs/start/install.md +++ b/docs/start/install.md @@ -63,6 +63,9 @@ Download InvenTree source code, into the `./src` directory: git clone https://github.com/inventree/inventree src ``` +!!! info "Main Branch = Development" + The "main" branch of the InvenTree code base represents the "latest" (development) code. If you would like to use most recent "stable" release, target the `stable` branch. + ### Create Virtual Environment Create a python virtual environment for installing required Python packages and binaries: @@ -89,24 +92,6 @@ This installs all required Python packages using pip package manager. It also cr As part of the initial setup, an empty database needs to be created. Follow the instructions below particular to your database engine of choice: -### SQLite - -SQLite uses a simple portable database file which is easy to use for debug and testing purposes. - -Install required packages as follows: - -!!! info "Sudo Actions" - Perform sudo actions from a separate shell, as 'inventree' user does not have sudo access - -``` -sudo apt-get install sqlite3 -``` - -A `.sqlite3` database file will be automatically created, at the location specified in the configuration options. No further steps necessary. - -!!! warning "SQLite Case Sensitivity" - SQLite has a known [string matching limitation](https://docs.djangoproject.com/en/dev/ref/databases/#substring-matching-and-case-sensitivity) for non ASCII characters. If you are using non ASCII characters (e.g. Cyrillic text), it is recommended that you do not use SQLite, as search functionality will not work correctly. - ### PostgreSQL #### Install PostgreSQL @@ -205,6 +190,24 @@ mysql> EXIT; !!! info "Username / Password" You should change the username and password from the values specified above. This username and password will also be for the InvenTree database connection configuration. +### SQLite + +SQLite uses a simple portable database file which is easy to use for debug and testing purposes. + +Install required packages as follows: + +!!! info "Sudo Actions" + Perform sudo actions from a separate shell, as 'inventree' user does not have sudo access + +``` +sudo apt-get install sqlite3 +``` + +A `.sqlite3` database file will be automatically created, at the location specified in the configuration options. No further steps necessary. + +!!! warning "SQLite Case Sensitivity" + SQLite has a known [string matching limitation](https://docs.djangoproject.com/en/dev/ref/databases/#substring-matching-and-case-sensitivity) for non ASCII characters. If you are using non ASCII characters (e.g. Cyrillic text), it is recommended that you do not use SQLite, as search functionality will not work correctly. + ## Configure InvenTree Options Once the required software packages are installed and the database has been created, the InvenTree server options must be configured. diff --git a/docs/start/intro.md b/docs/start/intro.md index ab39623..d7c3dff 100644 --- a/docs/start/intro.md +++ b/docs/start/intro.md @@ -10,14 +10,14 @@ The InvenTree server ecosystem consists of the following components: ### Database -A persistent database is required to store stock information. The database backend must be installed and configured separately to the InvenTree application. +A persistent database is required for data storage. InvenTree can be used with any of the following database backends: -InvenTree can be used with any of the following database backends: - -* SQLite * PostgreSQL -* MariaDB -* MySQL +* MySQL / MariaDB +* SQLite + +!!! warning "SQLite" + While SQLite provides a simpler setup and is useful for a development environment, we strongly recommend against using it for a production environment. Use PostgreSQL or MySQL instead Database selection should be determined by your particular installation requirements. @@ -44,6 +44,9 @@ The InvenTree documentation assumes that the operating system is a debian based !!! warning "Installing on Windows" Installation on Windows is *not guaranteed* to work (at all). To install on a Windows system, it is highly recommended that you [install WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10#manual-installation-steps), and then follow installation procedure from within the WSL environment. +!!! success "Docker" + Installation on any OS is simplified by following the [docker setup guide](../docker). + ## Python Requirements InvenTree runs on [Python](https://python.org). diff --git a/docs/start/migrate.md b/docs/start/migrate.md index d41842f..1005395 100644 --- a/docs/start/migrate.md +++ b/docs/start/migrate.md @@ -19,7 +19,7 @@ For example, if you wish to migrate from an SQLite database backend to a MySQL d Export the database contents to a JSON file using the following command: ``` -inv export-records -f data.json +invoke export-records -f data.json ``` This will create JSON file at the specified location which contains all database records. @@ -34,7 +34,7 @@ Configure the new database using the normal processes (see [Configuration](./con Then, ensure that the database schema are correctly initialized in the new database: ``` -inv migrate +invoke migrate ``` This ensures that the required database tables exist, which must be the case before data can be imported. @@ -47,7 +47,7 @@ The new database should now be correctly initialized with the correct table stru If the database is not *empty* (i.e. it contains data records) then the data import process will fail. If errors occur during the import process, run `invoke delete-data` to clear all existing data from the database. ``` -inv import-records -f data.json +invoke import-records -f data.json ``` !!! info "Import Filename" diff --git a/docs/start/update.md b/docs/start/update.md index 1b73a2e..ec78dd9 100644 --- a/docs/start/update.md +++ b/docs/start/update.md @@ -26,12 +26,15 @@ For example, pull down the latest InvenTree sourcecode using Git: git pull origin master ``` +!!! info "Release Versions" + If you are using a particular version of InvenTree, you may wish to target a specific code branch or tag, instead of just pulling down latest master + ### Perform Database Migrations Updating the database is as simple as calling the `update` script: ``` -inv update +invoke update ``` This command performs the following steps: diff --git a/mkdocs.yml b/mkdocs.yml index cb607f0..83d9d02 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -169,4 +169,4 @@ extra: name: InvenTree on Docker use_directory_urls: true -strict: true +strict: false From 63386b2457d98915ca734b6bc31193b811215da3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 16:24:22 +1100 Subject: [PATCH 03/19] Adds documentation for notifications --- .../images/part/category_notification.png | Bin 0 -> 12121 bytes .../assets/images/part/part_subscribe_off.png | Bin 0 -> 8469 bytes docs/assets/images/part/part_subscribe_on.png | Bin 0 -> 8745 bytes docs/part/notification.md | 65 ++++++++++++++++++ mkdocs.yml | 3 +- 5 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 docs/assets/images/part/category_notification.png create mode 100644 docs/assets/images/part/part_subscribe_off.png create mode 100644 docs/assets/images/part/part_subscribe_on.png create mode 100644 docs/part/notification.md diff --git a/docs/assets/images/part/category_notification.png b/docs/assets/images/part/category_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..3de3a74d19e1bf45455c125c55949d14095f6aa6 GIT binary patch literal 12121 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 literal 0 HcmV?d00001 diff --git a/docs/part/notification.md b/docs/part/notification.md new file mode 100644 index 0000000..e6ff528 --- /dev/null +++ b/docs/part/notification.md @@ -0,0 +1,65 @@ +--- +title: Part Notifications +--- + +## Notifications + +Users can select to receive email notifications when certain events occur. + +!!! warning "Email Configuration Required" + Notifications require correct [email configuration](../../start/config/#email-settings) + +!!! warning "Valid Email Address" + Each user must have a valid email address associated with their account to receive email notifications + +### Low Stock Notification + +If the *minimum stock* threshold is set for a *Part*, then a "low stock" notification can be generated when the stock level for that part falls below the configured level. + +Any users who are subscribed to notifications for the part in question will receive a low stock notification via email. + +### Build Order Notification + +When a new [Build Order](../../build/build/) 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. + +## Subscribing to Notifications + +Users can "subscribe" to either a *Part* or *Part Category*, to receive notifications. + +### Part + +When subscribed to a *Part*, a user will receive notifications when events occur which pertain to: + +- That particular part +- Any variant parts + +If a user is subscribed to a particular part, it will be indicated as shown below: + +{% with id="part_sub_on", url="part/part_subscribe_on.png", description="Subscribe" %} +{% include 'img.html' %} +{% endwith %} + +If the user is not subscibed, the subscription icon is greyed out, as shown here: + +{% with id="part_sub_off", url="part/part_subscribe_off.png", description="Subscribe" %} +{% include 'img.html' %} +{% endwith %} + +Clicking on this icon will toggle the subscription status for this part. + +### Part Category + +When subscribed to a *Part Category*, a user will receive notifications when particular events occur which pertain to: + +- That particular category +- Any sub-categories at lower levels +- 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 %} diff --git a/mkdocs.yml b/mkdocs.yml index 83d9d02..4fd2375 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -66,6 +66,7 @@ nav: - Templates: part/template.md - Tests: part/test.md - Pricing: part/pricing.md + - Notification: part/notification.md - Stock: - Stock Items: stock/stock.md - Stock Status: stock/status.md @@ -169,4 +170,4 @@ extra: name: InvenTree on Docker use_directory_urls: true -strict: false +strict: true From 16d35fafef4f6269f5c97b92828762d59b5f3d70 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 16:27:20 +1100 Subject: [PATCH 04/19] more --- docs/assets/images/part/cat_subs.png | Bin 0 -> 35768 bytes docs/part/notification.md | 8 ++++++++ mkdocs.yml | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 docs/assets/images/part/cat_subs.png diff --git a/docs/assets/images/part/cat_subs.png b/docs/assets/images/part/cat_subs.png new file mode 100644 index 0000000000000000000000000000000000000000..271b33e1194a7acf2d64a7949fdbffefe853db3c GIT binary patch literal 35768 zcmc$G2UJsA6E63nq9UN8LZn@~bO^m$C@M{9p(7@SJrezrU$tEodwMOCixQQ&nZ`d~;0htSv_hiu2fFD28&a_M zlB@dz43Bvz&f4pK$i-Tno1%H#O@9r&<`}c~tC^rfjA?ru92{*saB?W@ROoM|8>ggN z@pg61?|oa|!(?k0TaH$gmXz!|OkM&8d-@m8<&N848Y<)ebz!sAYPi&HrU-ZE=M8xA z`tC-irgOySAMqTQo3P}+K8#a1{&D{PSsL=!+e;{(^NU~O!M_BPt73k&dh=Vri)SGG z^Q+fbjn3b_egM73_bvM8r~8~L42*8L${oqWI&^#79*&*%lOVlB!i1g65r$~Z-+kq% zWj`re$!%J)8vf?`!^^a9&tBelPpV;P+&1T!AtyKG?_Zvab=#kUKqM;nM+qP~V$fCN#;<<{2L3#5OSz{|^Pr^l20;SDz8 zy$EA9xHpx23|R8rHC)ZxpMyV}K|iG=;_!4YI?(!BTHqe#x2N|fe+F0C&9pBK6{jPw zoX_?8!^etg$SbCgpQ>XTgQy6Z82%xqe!4%;Xr=0484v{AlkNz-{G-`S0+{I&E%5S> z2C=?CH$I=_p>7Mk9Kb|>uhIun;M3g?T51@wM&C;Wm!xEv>U_g^`%=(aTo9uT&jGHs zuLDQX-S3Eqm4-T5v8|uAzJ2}XIj~AQ!8Bz-_p67;4rhI)SAnYpPPXeu8;f(a%eBHY z@bNSIvc@)Nxs=*`jqaq#vf|PTsQURNV3)S-p@$90q`6g}?OOKvGdImhh_kfHEnglq z<&J4y#=KHh9%cGHOjWY8QJS&gxVWme`?XY5E}70S4Co2B?AGT;s}o(z+3y>bY}p+g zP6%;$vo9_8X{z|g;Ng%8PRVlYuQ;dOXC(hTTFpGHlWlmH6{$xr$x z;`G5*x_!1AL;F|Se=W!5x#+A{&{VvaA;T8QWYIi;i9UFosYF1O5mQzc1g zEO-G0{&kp|<#SarDWQY>^p;#P(M~Qy7_|&W%|iG>TvGU^Pzu$kY_lcZe;F>xw@_Iasio42&Yw@M-L4TUGi#%sIdI2PJu z5hK0gr2eF)TxbvXR|n5F^IbE0bH)yL6N-;)rpIm^1S%|S!t~obxBUy;cY_vt>fws8Dk|()DVG_b2IZb&3^&gOZU;wu&}#Em62@*K$JGC?%q9u4#!2RybE`qCIPR7K)G+>jXpmvV=s5 z+m%ccnvJ>J^Zbv7(27;`h7IkMltn91{m%nz79}}K>_STg1l?cMOStoQgg_eDegxsF z$k6Bk$qL1w3YQN5AGD4)*Nn$pppeZ=b1)aC{+Sl(p{x_=e-Eu(h9GO(3JzW|J8z*~y}8R26=sjh4*Jb#b%UuJ2}3$|A$3 zIZCd`nu#Q_irH<@a;^;EanA06V2UJ)#_VO@@=2idT6R}ERB=pS%oe)3H2Y*;rh*af zE=ubVV9|x`grnTXCwVDu((f*f&x9&rkM2jLl_0f$!1Vinh(~FIXre%xWPz{pEjvDG zN5PI*<0S{D3T8@7`kIXP;d;=D)jkMxY_PoKA2K_);4z?_SADf)JMYM<&4U&$)Mr9M zl-rrK6vfl9@9Rq)7}sso(N@6$Svj1v6Wx3Xc1EpfyCTwLDTH;*tOR()N{%~u)?5&r z;heoNI+rJH$~n4WY}a*TTyTWUlOx`H7q?cd(Q$V>-PZ=GaLi zaxY39)Irssh3>P#XV0=ja=Iop`2eAEtc4iTW zB$+#l!(R|1A{%1~3!$}#@O}nzA<2aOsG1&%BJquV(ZjyRPr=F-Q1MJ1&O;r0;qWBcPqp{ruaN>$g$5LU>=|B?Vr z#FpM(hrWkcl>c6_r&H)Q%eUqrsl;e8Nsq@xtW#`8A>Jfo&hD?u%ZR6cm>lC9e-})z0IO^6 zu4Y5v7GQ`EDt2T)WLI!tFb!E;wVptwz$}v6i>z41-VvXkPe^5&ppyPrsvpV5uo!ch z=1X4BxQ}}cF>Nk*^w4bAN^!nSaDvwErg_0^UBRWA*}Yzr=>s()WTkI(!QC1uOunFKKpIoq4Q#VCE*{*)heACmToK>G%6w_%gTJ%8CCrn=v4{_#CFF*u#`S$Y) zKVthUzvjH75_Ge`{he5bdvHutEfY69DTY>htIa5NYlC?9S8Rz3UqNLn)eSve`Q$Z9h>a;uiu{8mo{=_U7T5(jE_7~zn z*j;_@$Jc2XQwL|OewF=n&y6GPk6=?&UfH|a)}io*rWxj~En_K!5ZJU`LZWa-AMJd! zB)5N;a9yVp*0wStEne7_W=RP`OGt9T9OhaRVASs0AMYlNU^VoPCoXQW-x-ZVjOP`) z{1_ZJb=}U3)j8rrS6#19MR%ax7f^Xiq9jtN;%o&1!5~T(m}1tbx1*j1cJE4!7j_pj zL&#faG6&8Sctz7|RiDXq&1&f0Ow!EiRO{!snIFBC%v>C9&P(e9k*Ny)Toc=$I!in7 zqvIr;O^??_an%Sp;^O3u3Z2zwGHv-6BN5O;(J| z2^M+ZDIEun#qw)U9=wzZ;w-6{ZdU0`$8xA)1c7LvHIvn2aQX01c0!>Pu351nOL9$8 zECrFWf?4zo89(B+YVobtT{Dwk?B=3}{UabN{TXXifE5+2q5a{K&9A2ZPeN-SDYqH^xM6KxR_E(B?NB6 z&Nq=&7-<()a6%e6ugLzB+8LuUq9~d+VAf3tWh&BUXCm& zcy9~3P<-L=ur-rDx-UcBre`q0qJy&Phn|#^!FuU<+p#TL!X6<}a;YJl(2B-ox-;P= zpD@Ch@6=ZfBDk_Hj-#y+e1EB%h zHs`QvrNaH?cr<+D^0HjaGHN9JKGF+`AWI)DO;_?R3m*}C@|GA?&&Cl7fH<~oF z!ORMD1=ep1W#{#n{?SyVFs5t~Jvza8_Z(}3B> z_#)ys=(=DhqYyavk-~4EBy#p8@RIdv5tZc|>_c+nSHn*-zoKHc$Q=?1GlZMfuJyVt z<1es&IbG>2+D=0@gQ3em+AUl$B$Zp+Q{K*z8_arC6z@3iRg4cf)~@{yw3Rc@48b!{ zDD>$juVZtTtDzz1F7)BA9^ZCzoNcoz#yE0)uAvW2;cWl%h}E6(Y6w9uiG}O*mgAjT zo_~m|I~Vsi;-UQ!RQ~a!hyTQCkf3;IiLL-IzeheNcHYnLE3}_B{%;Elg@Dj!ybULd zKB)T2PhQ9P2m2|T07k6=R7L~rcpG zeH?YhO!Q!PGjpr1YMs+Xo2k`@Q(XG)TepFU20q=xI@#E)VFD?N&MB??=q~rQKnlS- zWMlwi@{=P8rm1$`nC{c}$kslWa=*j|hXF3QZ%nu08iUaQZ*$J#hl1DBl}K0YM|Xo~rdU{szpz$dwTUzJ-V{CVHEV)-YZPHCTde^P+@K}SdPo>N5t z^>fD_%6<%S+x^M3y?&h&JbkO{o-m+}b0#vu?4yD%3!@1`J6WY0Z9U)#pAxo9?|i*N zh8{;^HJmou1gDzMIk@{#f@5x>z;c@Lx)`qkP0Ecvk>jQH?%8 zSAq)agm2IjgoXnO^>dISvVgXEo2GO1nwImYoO68lXTp-equc#T(q5iG~K8KyL+p_+vxSLKUVFz|I{2G7Ia~I>8YTnRpzp@+~XKtzmyj| z$!x(+{ynFRF4@M-8=BEqO#^nJ_0Kb_+TDe46;0v-e!hV(jQ~oMj9$LM+0-;1{*}tu%ub7tcg|6FCet zj?~N0qoi4Xs#Z+Pe=$=;7y|9ujiFLej1U;Eyz}-hr;_z3p9F`JUGKt=?V{3v)tTv? zBHM=>-H>PWfx4>{8lF~&7jA3=b+B3X&Z%=w4dG>Lom~mh6-rQm}|ebO&x{(zP$AI;vej-voHEZ}C)@f;Emox9BvDYuF-x(0 zUNJh~FMbteRK{ikdnq#9+YS!u6BeFn4b!ZT9dB6ET??gKVqB=bRmKI+g|>RLoF4#D z)^ublOmWUkh|Tcrix0#}S2cNH#XZ+Zb5;&~qo)!LrIGCzSwD`&`R zu3o%Be<9SKu}moF>R2MSKle3`c3SzS<#UR5EW`7BACwJ-Zj$KaB9C{jM#0!TKoPW0 zjtcENT&8}S6AS?j6|OhZTEI4&48Q%k@KLNq<8LbW8nNB8mD_PRH_VLIt+bm70$s2V z?$4?3Wh}}wHW!nW9K%8LDDpDAvu$?RaAQ=WH?m~S>R;Bp9eFaGSELQfl*%^W&yp8O zLxwVgTM9HlsaYR#J}k+{G>0ybs$y8zBeBfO!A}O|jtf}|y3IkwHfmRI{M66;lF`xC zo6WHG@M+I^KMVO+rqhbXjX|+R8(GrzSEJQBz8ztAJ3U73WJ#U(sDs09cUhP~VNsf( zRDsWHUya9DyR@K`9UR%2Y9U0qf{%K1ij_eGx9wU`c~4E06tv`e{W0FAxLZcQ`xFH> zAVwdV;s3M4Pco_G3x2l+GUE~sP-{hvh`Z;#Ej1h!3f|B}%J8T46=Uyq=OSa#`6`ZE z5zAcF!i8C{d~s{B=<1eiWEa_ub_LER`DDfQLjIh)97&aJX~;^o54is35eHtI%<)qE zI=FipvON6MuyxmX-w3_H%L4kf2BH8jsK50m>WQUk*-{pyH3K$_fL63Vul&66wo;w1 ztkvu8a-3@Bfy&5yM!!#YB*Uz+f@fypj0&*STn`&!qXkJ}7weV5LqkYxzv}}TrdXic zfSVk0>`mG<`xBNa$-N~@RT^)9WH(Azu52;cuomu1J;+XHd4c4{cL+%Qi__R_wyUq@SU#q^ z{><*fHSR2&Cs+1CD4s9^luiGW8xLLnUE16CaYR2)dOZ3$$jJE_$T#*D?I+kH=$Yr5 zg{fjRs8ulr%+iL&0)Nu!EbsUN%pK?eBPuJdh`+n;3uNk6pkSDvw zTdB7R(vZ=gmarw-!qz{kTfIo@AJsHz@{k$>{P}4{V@1h(un(3wPC zJ4alnQ-6(6F9TP(?qr{QthB(IR)68@Wz7A{bu^7iVna@QJwrw)NSQfyAvj;1nwJ^*(^9yy`4Fr|eGw*myMfN7mfaa;!%hG2F_-VJ)zivC^6LUD zkvf`ikvRuhDLaDgH;rr<>6X*Gkn|kXrv+if-90(f{pVJL8OV#yk(Wm{Om0_AKg2wr zp@@UZLx*95IY?JllOEoG9%(tsW_ZR#SDlVLP6afh8{vg5VG(K(iXr>Ex+SyWBqipG zis!ExZX7tw7uiKw^Q8=}&hrNGvf?Vx)k$E>cYw<1mWJ6d^RzVG|A~9gbrrzT`!4lN z$0WmZGD2(b7u~kLHZrvvqoG+P8-kVGD4S3~y*KFIZoWGAsYhA%&};Ue*ibxVDSy3X zm;H4ai6w7I0@NebP+k0=wfFpt07434tEnjuGS!$*4vx^r#XZGUrTamCCA7=$JSP%f zObR^w=MywuahcX)GMAw77`S~t>eRat2N?abJV{{8dOVnTM*6ZT{|S!3_YGW#*>Lj3 z`uZ%Dy+_FY*&s|#)}|F0bkHVx#jyt{yZWzP3->xafOf^d0PNZNT4 zcJsFc3#kq^^2d)QKm98NyD#}`7(L30abl*^pZv;eF0-M=bW2@#u&UgjH<||Y&?7J_ z$0|R;NgV{)wJa43EElq_+(#FgN?u)H-{Zzqe<^?S#p=tC0*ZX+&~P)K*F(f{rk%=; zAkC*AQy*rsEQMHobMPiCrIB8}Kg-1@gVl&P`0a}VOXK->k;Tf1@vr2e6)TGl8(F9Y zSmT=;>LTvCpp%}A&-YdANzpaU7u>5e|p;6lS$K}Y{C33Ko*-vIx?L9#9}Ku{vvT=2RKd*M#)V7 z_lckn=J)&THp1HhG>~3A#`vlH#%V7f-17t^C98ocQF8?~%=@F*7X!SX0?YU2T1``| zlx`$#zN$mJgu2lsNZ@<#EV%o&v}j6MnAbS5BbP^lPYY>GZbwyuZ1}>D-uhEecqbbb z6!WcQy*vvmw6bUf+VQ%bLa&}`q+KKgZ?xCvv?9utzerRfiV_{pia_+PJ6~jUz~saG z+C2EpVq>sQi}V}z%z9U8zMShR-q&}4%M|0=d>{GX63;{KCj^~DR?nKE#+^}l*BxRr z@c8Yl%RAj+xe)^yie2fNJ=VJRBDYgTE!yeq?acZVg647}ViQ=DRWb}5ADG(Yv?rL{ zu{Aqjan7Kmkw{y)rHzg%XedktBM@zno)N0o=|Yu>6xG_M>y84lc^l8o zEv@=}!R<_Uc$IRDWrkt5#L8KCC>(9zN0qDt9`~S(Beb^OBeFv-y$VmJJH{F`qfpUH z-`|W|gAm8(RT6B80D7UYl8*)%Uq6S6@P*C_Y=1V_2<^U@W^Ni04EkYKWMp8P{o&~4 z^gTc618ECIC}peI4d?kBlpd&MOUbYIn`szyf{_XG-QB(Rc2Ic4Ue?m1iydi*y@i^* z_=~;Ht0T!g?xH*FMm)~kbpY3R<`3}V?R0aHvNAGl-K9T~p^oM$GMwEOHdkk&QpEts zUAYVlN6Ud-rjl;M%?)>o^iDoT1~Bw-BSe7j=Q;+Zg3|SDSEMstm2(vmJhs}Kgc?c$ zGnM`Rsf(HEQC^jqn@JZ*;mkIH3w=pto2^;M%9ceY0wxT^G#eZ=6Q;R~t?G$RVD;$I z(sl5%HuQGzVqP94qJHY$3tl!)PTbcyvcK6eNbx}zG}AZC1iJ0)9_o;2V=ySx@Czg1 z;l(Zhcwsxs^(vH!M~mCQ)!!pQv0+K1vPumef`GCwOHZYjWj5M-Algh-)uhcE9TCTz z#b8B!DIvkqzj#q*CKkCFG6AVq6XQa7N%^ayg3IsjBaN*16Mb8CVaEfKJE@R*cQZI^ zs=}S-93(G#D30A6_sqp5r0B*X<6aV7=)GfiBzqXI&;{kd)zk z9S6IN45c=%`}Curl9aD%n{Jcuz4DP=cM>Mr+oJvR|1@N|csql=kP0rbwz>dIozxms z6wu0n&}lDc&SWK!54fArEvqUL#%O~AK1rBcz3AFEj1AMm6&)C!LuEX?)8M#2&faZp zqTvUva?%A9k14;0xKNmju92YO+wB}#gMW-r4anRIt?Gy0wxM_O>t>FGh%<3aoq8U# zp5_z8Nh)A>ICMz^C?;~q`wcX+{;6T8*0i*prtxiu>}#&x(C>A>&h>que&h-GSnb1H zfcedz#ugY<(BF_6uvJNaLr-|8Eda*lcl0WJTAJ~Hv?&`Dfj|I3isWw1QH{XBn;UE_ z>S|e^H66~5|NC=nfV|BE*yMmO{ec<==d{rmAVG-MFMn`3T@HZYbnwM~(5)|pei{}V z7tWf#4nCh3TO#~4BT?O8x)l>Kx)<`JTud!S8J9BMc8; z5L*DynT>AN!2H(Vr(yxJUQP6o+Stx~ zizP+>V1w9Cmg>i;#t{M$5IJ9U?59dLRr@?}7>Ak61I;9?(7e}%nP$Qgwx7O3Xq1Y- zY3g=XbWbcQOXgc$7&aikZ$)oUmwPpEcTd;3&Lb@ z(xFq2Im?FjiIq0nv( zvptf)wnoJ6>C_*XLGbX zvLHt?NZZ&7lPAx|KPs?Ew1MP8v)EEUVz`r^1&FZph%|(z@i-(yGkExgpv3z{Ds_>y zEgbikCe2uiSh}F%SqAncbqEvrM>fOz1ghkW}9JXcX??;y5^zI#&KefoEfl$x#rmvLtK1 zHw!sJU6E>SR$M&3ht@fGwi@}taS7YP|LKehel78>4cm_(v0|x_*Xn3pJtG6HrRn+r z<6oJl{%QS`6};yb%icEM5t@zE*D7OOMidxR+h!Uw8^+ZrU+r2#S9eK&=>JgpP+$=` zvD}&&_R+~N1~r#j|Ftctyt3ToSW$CsOVdjQ%@{@}3brC5t;pbOUYM@v;r{T5E@hoi zk4}HIMY+JzR-WHOdxp_FSFL?N+==X}UZ$#xW1p56kg`jy70q@U(-eMzrlRFY&$ijC z(x{gw4dMEj&v=2t=ZBT=v;rh|-tr{JO)X!Lg3WCu#)3Ys`c6k%c5vv2;IgHnIuFic zhISZMf+}ejcNWFI^x}kIxT-eUj?~aD+bHCM5Ei&gK=%Q`}3Db?yos@NoT^BX5mNz*0& z@Wox5!4d)KJ~kr-xJ-@zdrNO)LY4tW@3xQR1M;&$+p9HfaAO`Zv#A(i-v+3T6=S&a zu)*!_ctuC175|VriFVEAYZ(V}V(u&_P!_FXKlUwfFKxu5<DJ0Y)r*FFYhJSSqPf+Sn(T})oP5!_O@U?z68DPQPna%~86~Q3Xf;W7kZ-;85)NGhOx=h{ z8>lAMP9u5C4a&}-*wcMgFU-p!04mY;f_QI1|B&MysaKxL>rk7qwwL)gxYF+?>Q7D%aY+7Us0kevrM>&1Xn;IY+v|f{H*tvI1hd9E zFKV6c%$n}s2gbj5f!9=A6R;c991ZsMU+NUDZDQ;fUN}U3_J4(dqA5t8umsid`yWh| z;y*GaombS%?fEu(f^59u=wK7WLpztw2T8}KUvW>OjCp4KVL5M=xGf$>A+aStpe!225gT`QYlSCst4m@}IEB8%J#Shr z)Ox(bic>U=SB2r)n_(E?G?i0=9+D(qps$Pt)bH)C#-t+bWTp)Id-e|6Xmuy zJv7^4tb6D4dSJwc8#toJ*-aNM8e5Frje{;KPzSS=4=Qw0n)oDzdJl=V07aR)iSw~Z zrE_2UBN>ER`p+n3Rg8GlBB4rJff^`x(VN9GIGmm`-&fpjC}Xxf!8l$_h?xOfIr=Fly7%*5eo`uaMJgae{gr zD;CDA<4kYbCt1QKx1ZI#H7I1ryqD{Wjj_|nD@EnS-{p)QNnNMlW6AuSFKiMZi9PtW|X~c&8UO7N6j< z7MJaIvoH32>g^%g7F&Sd-ngJH-!4gBkjX|vAfa;B^-h!)D090PUOoT=DJ@@>GmuQV zScLm1*&-BFMQx*c-~$8AsAJ&qZrS&OT!ozbQZBRNW~GdpL9;2RanL3VN*VJSIR$f^ z=3vOarJkKvMCqRAr#bj;t`i&4aqF~?_zbL&)5}sW`5QXwbmido?AHpzHb80DnS6h+C`WPhePq)wHnneWTCEra1C@u) z0<;;Mkw??8r$MEYS%hUKL5Y=YrD5FHcXOy;6Zi{o zm%C>~^Lmx@9U1wXt)I4LW%~VDjiDXpK1lg}_slHlmbJK4UkTImXm)1*OCmFu8^irq zFU=dPV%Ba>sfIekK#gql+OMn{W&_OMw`-rqGa(X{VLa+u1;H8mt)ypD!>a=3_V#@z zeSmWxe|u0wM&-iu{%0T~=?mho0{;m(9swFqVYS%{fY=pHQuR8^`Xob29ur?^9x;kX zUFut1@4e~s{PHP=JI#InU%OgQg0S{@*3e65SlD(x4~g^mCd-dX6n@F#6$hRA(BEMy zKr3V3MWE5SBmNje?*_AI=AZL-JEw>>SbnCSvZQU;)s?eY-G63VPt&{qyHV6SD~{JA zhVgATegczCmve`D(L@XqqQKvlud9QNz>Q}q6?O-C}24Q{{c zDu723-WZw1|0KP=(eP~f(|j^ftq*YIpHVj|;ypEVe6Hecb=J+3<`F&=&ps)I03P0b zXG+mO?)i^ME8MQK0fuBR2_!*QC@LLRzAd@-4)0CRxBAI82pP)rAh>-6lx+nSpvdF; z|0H&#bvC2{$b}H}SV#J$i?9dDEvKX-JJJ200d$YW^V>R$JaxgDF8Hj#x zW7w>o(#tta>3=pL=GdJE5sP9BqhpsUW>)D{Kd^aIHj5YH8Q^66YP%RUphRtNGJw81 zn%ZOUYfi`r-B}{$Qqqm@uTL#k)R^M;(c7#~|I27HGr$tZ(~;=I$#GB5n!gO=o$irG zzAsCyTp)uyM1CArPyr=L<{1Dy&&S3*($^pQb-Pu^DIiavhZDOk4^$|nkk{qE zN60VVrR?V?y{1#7TE00K;^`UE{NgVbi3TUriT#oCzHsV-M?sMt5!@yO`=&T4+=p^g zR-;X3fmeVlS{H)<`RrzSKoqMRu1p_vGB>j0<>j<}croNfJUK_i=aJTH2X@qh9y~nl z>&ZRe1so2GqV-vEx0~IQioI(4n!jfqiw$6Rlan(imSyFpX^Wr2>83&K$=v^K(Euvt zcy~k6%5^c-(vvNb=IW()o%K!dT4Fjj-1yw=@~~&ZltmzH$LcP*2sgz@_5!0%<{wQDX;&+uFr9OB(8t2p;M3Wk5uJYd&tZxdtyV{u^fA>x& z$whqWv;HO^n6kR;W%(f~psYvSytcM4Kq6Zx137Y*H}-SBB*!BE-?RhZ+t99S$?;@= zlXp`cgRq#_DXL|GOB?r?(|o~YhJNh2WO)}I0J|OA0Kn^ecQvKj#yG`0N3kKHsgkK- z70dVSw0jF(9vCVNhr}|Mm}Ah<8_!g?us3ev+vzdF4nv->;*h|>tqdlj033{1P%PfZ z`sKuwt79bq!dE&x982`!2}0Z>zeguiL<+yI>4-t)W$|02&xQX7Rkxb9nONh!l%W>5l94jx>Q&?;!0044?WY?PHa3D#1#hI`Ur(P-I2%rvzTATT74Ob5+ zwh&Bg3t&$`$EAqPR_&FNx`tDQnuuXw6ID2Qs|mAV&A`8%w5O2yP9$51a!eg#>8$ky z3?I_Sm4Jt8t(W14()ZI&`1IK@%K$a^Vq`a}_fVnrxLM
YpxDb;YRO79TcKYa9Z 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%0DMx$mrpL9^7CFeRQ9q0eG9U`as zIOYV8mtO^>74A$yFd z`-hAuRaatbsxv3M{9kVCmAPZ$NJGd-h=;xjj`ehKXx<&BlG|bUJ;Z|pp(M&OaJR#0 zL)wYsZE0@3cXyb{IZ@E2@m#FxtrZ?~zA+G)wPs%|lfPH1wsQryWAImF-44lA5A&I#aFJfzY? zQ^jnI@$%;w?gu?n|D`g$Y=q{5&X*ZCx~r$8G)bo$*r7)pK^udtcGJr<@9l8V1NGv> z=*+32P5+yHMrECRag<%k5_Wi(5FTHBE`*5yJC!1oacZERYi!j=vW zl*K>HasM-#d8qo62buga*~V$aVZRv-Do1yif^$#y^PU$c8WnA)fyeZiyzWVX-RW0} z4GJOg;T!H%a_K(n!cDM=QNw_fX|Ik60v*TORaOK_NUBGs8jrLYgS8<1bEi(!rLmb6 zOiGOO>WUXhLetG_7DKbr=|Ev3vDR9)No3+oi(PICZge_#7JCP?O-`veN> zu;AU#Q-jkKC1xyqS&Hw8@>Xn*S2{w@-q)_lXrJXQ%PDUjS>YYk`ntpe2a?}o9V?!k zAXezSiYG^ib8_JyVm1#YJFHitr(_A*S$Di&R+2?Vhmg-#1do)IPt=XoIf=BJ#Jh^e z#Bs;1?3I|?Xj@ieajhj2N2uUmc(~SdBKO-V>5!{KA;})vsT`hvX)mYPOtWF4Nau9z z#I=y4`PejKL!4;`HzQW$&`R{!x3~&&y0JNT&r$YCCkN``rFjalum3vKbFh9no}Doo zShVs&^90(J6jSqs?Ur7ooJz;^Fd!7Jzd&UX|O*=`_s3HU9~_ZR0g z2((=X`2+TAVBu{6UuWW=jDPhzKI8_5y@%DQheO6Sr<42_b{dqkFz!mQ^Bk-Cwsvo~ z3>6nPmk-?g0?y_bBw*mNPoOaa{mEG(*4=4c4km{cB{xolQhZa>t~zK|^H z!DVlM`Y!TyHBP<}VU7r(IhM6D*^C*ej@!#B?uO6Ub(x@d37(>lHA~|@Gn~0~w??$; zT|9Wh|Iv>LE}6=LR5;R!KJU(b^6QuF2~{CW_l9Xy8`6J5F3OM&$EPIdt$A(eQb>Qw$&xKmbS^jpw?u_&q2YL z8o8XyIPhQS87&cKiE}70ynOdz_k4{wlj1;?@KcOn71^@i`4IK*>ApcAD@aTH|0XT{ zq@G1hx}$I-)Mx(f)PEMXE?BtiBVq6@&5i0=w`>2Ej@38(R+ikSlq-f?aJdrTlV`QkoBl=i|rsQ_ceK_B&tlxtC*FRD@olP3fF(qK;`5x(Bb# zA>PD{3eeBd;rJ#X>~R)t2{>5Mj}ve{A^U`@GeVy+gS4;C!L%FQ{TGl%@kd%SCNf+f zzOXNl@djR%BQx|^w0x&hXss?ySnB%2wJU6{eV<9>fFaid@Ps8@V)k_?D9-d+Zoyd-m5RMYb@f1ia9Nf!iZU@$x@E`4dYs%aq_^b?-Z z0Niw{aULKlpW&G>VtFj6qIMadHm=@HK+eJK)M2HY^^;#8<7+{e+a7Juqt?@jWYkw! zm@yY^M>}vy`p-<&t|t?&c*2@M2RGsA?^@(jL-GR4lZZ)Iw%iG}8x}&7p8}5KKF-Zj zJWgWzHkwb(Y^L1Jm(o2msFS{aZCPI&p2iD;y(AD`%y}p_5iWsxp9}3y*kr z%dT|R8ozkbZbVD*2EXVnU&uD=!lqJR~EN`ZG z$S7_rJ|_Oq(q!{>b0P()9ku6QXJLEzuU21!?W7WUPOPUQw1}z>5$>=HA9%L$#ATcc zeMRo)Gyu!L3NwhHe`+fa=rowX8n0Hv1A%|K+Is$?6|caCG^%!py4zjGrAt3xA%&b> z{GbD_JWp|i@4 zD=(nD(ExqD-b=lPZ^(G3$X6bxzuxbwL+4u5N_P}ud&t?jWJt9B%9~gU2$CbHC+z$x z>Q8NDh4e~XEIMy)2%}QPeoFQLTgFnbGIv?G;ys0__-Y?dnqe)&BTp@?}>9Iv&Zi)C5E1C$Q=DA8}P1 z+)ByY37C*$(65Oc$o>S;3#0OUgPo}jS&Do@VELfL$g^4WDwtk3(!u$hKl*sld0UUx z?eTQA8TaF%3W?_r%h6vrcg2x(KLIcP%==!nJI|YFX_N9FkP-gAyRMj#eEsY#T^@-^ z#Nga@!^(bgM!x{#{=+d=;l^VhB~>}g{yX8ukFSJbiY0H?WQny=Mi?IaV1S1>8Rzt^;dJ!O!GR3D8W2|Me(+-^?sn0(Xs;3wt}7tD0;)Dp z6v8~LtoLsTJb5bJI}QjnRI`L_)ly(*_n(gjX!Mw)Ro@xOXq{36NN4Jc7o(ALx9Zee z8#X@Gd^#b*uTumt(==rR2fmHx{V#mDT0=_;;*3`hVdMu?0aBMQI`e-?xx>;PB^&a9 z5Id&S-18{~(?LiCh7|En+eKqudeng=MYYxOv=55qbluC;PM*;mmct$g@xN{q`+lTN zf;x z!6IToI?wN{%=aJ108IF59`t6HNc31aYouAgiS4Ezge|{nNoL&qI7)FRj-VK+`P6*tr1!qW1cDVfEgr?tjym3)5yqi zGoZj>`al&b*Q=rXDgJxQYCuAtT!P~kKCKqv@Fa4<@6SjYvJG*TGdoh_+pw0ub zldevf-{m@WSrtfYhzSZh%Ah{58>CLG1fzqNg&#EZYx z)rF4iyRNvCWp53m>wXA3=?x>Nz3;Nqv|G$wwY69#f63;49=e&E%D>=WhhyC=A7Y;k zI8#nlF`~<+qmd~)YH2~SoKlXD=w)6&U&*k=^%JG#@+Ny4XtX+9V$cU`0QhVd5M=un zkel6glc&QHAF*@7ZPw~pu{X;z8Wxk6FP4KK#tP{~+BIREeaDskP35+p2*%zpB&`2U zq~zXIJMG3HXiE{U0f*02^58BsqjtJQtjDoVDGe3JOom+ji5g*LvX;ETFx~g_F;m{* zw{RVmGp-hR088W9=b^A^lPc0))!Zja70rj8?A?0_z(@Hxf)Yh>o9mVJ14B~>SHdb- z-)iq%7V${B60~KdgRPGIVV&yG_N-> zUG&O}%5+8*l(l@a1~7woVP`ss8Pw`5Jo31%=)WxRc7Pt$vqZtz=ePA-<)POSN`RAB zaX*+ZG_QnlOUt=`cN2OpGYITwAOH5Y+7|Yz`9afS?QPZS*R*Fk!}qFQ4KN*v8nwxt zj0%+3@8+-Mfo4UN&VsIku@z%HNhxr;*QGkx!SeF<0LZ%aV8Oj*NK>ygZY;z1guB+K zpqNPs3F%~W@!+#=n6@vv)nK()M28e&kH0Ia_4=`Ptx9WYpcRR7(#;<*DDc3I%<~O} z)oz6gxuN!(!NJj!xPy!CQ^l@@s9&X%Dl)L7ON4f*B%kG2e$W?NdC3#XpD*v~R3h3V zDTUXs?{wFo!c(^*l7>XZ@M-S$Z<8(ip;o2C-2!82QzJ~7a3t2MVjCz@IW6a16Wt_u zcT4CI?Lm$dw3)BFv=UQU_9xR5R4IcB*a~zb?xL8=^ypjM<#pJE^C^+O^NI-7?kAk! z`-Em#X@}2KMq?mc(4_Q7W@Tw&KF(rx+)?Bf$=sFVng~>_tZQYPi>@Q!uA=}#B0+fx8C>q(0c4o0kL#C+!NRF>c z72UMCGvrhEcp|=Z8g|Z1RIc3#u4EA=t)7NcBXnZsNH) z{A;%sfJHBu{EVc!mZ1wWUu^z&3hMGz{-lhaA2(YYfW%HjpuV91m52cuQXGGEJDLdJ zepN5=UXg&|l@c(Sf)5Q4$N@6{5PX?I&&{oh5Q9FhEd-Tn;PdiNMnCdB=x=BEyy-vJ z;Sa~^Wm5l#BK)iAL&Sd}NS&4DUv>I_`%~38fPq-8aUV-*kIfFYaohh&V3Pyaa9q*t z*HPL^XTDhSCQJD{G@+tpzm3B18l~N{5(ZRnqIoqTL6lvlZ$k`)TagDOew?gYXeHaR zW65!*zkTD_x%9cea=!U@U>Q#<#xxWix)J&s7x#ugl4)k4dyxTk{R!#tPPI{|N!YZulpr{w!CO_Sm zzxl~XX;p62$9lR`AXpn>SjA{hx5_(4m(QSovMjSid#jzs?4-34%gJ-Huq+{{_3rB1 zlNJ@6YM~>&Df>`1hFjh0AIBFHu#qE=mz}3yWq1&SqiMNpl{b)B9v)>(AQ)8R?-`bI zl(|vN7*P1LM8dwPt~fMoCw8wB3dwiOeyGAbLkdNCo|&;S2H6Kfxjs5f$>7^r$ zapKGQ+Jv8U#%>fzK$bpgGt3b*X}~R1?~Y%}n?=}YtBACv*e2H>PebbSZ`(7VHoh#u za^lHK^wBaxLeRC@X@Jt|$)E&?XaX@=qlLkG$JqV>D1-9eTf5V@e{AP=kIhqBAowcz zS5|u0G}n_O4je)dB)@BEDA}2UnrPf{d7h$?k@aKQY}fnyQq2hanHl09VxUo7ct~*; zg)i)OPApJ0GX;Fk<#>$?q=QX`tZ7tQ!yU&yd8nmFxpA4R6O>T~K;j92l%AHzeg9 z)c$7G2m`?rC#*|U>WH*a(LnAfS<^L;DLukov^Cs}yTiMTiV1D|SYBP<8@{O>mSE@8 zB*&sp=D|Ci4flpU@(bC}U>~|%{Px#SD~BGd;lL*zRVt=woLs$6{u^jjfcQv>{R|jF zUuGbmWX%=@ddIOXcK>Q~4;8A+jcAYJ@Zg`zl~_7xQF$7Zo<>l?cxj2S)g`KibaSwJ zU$bl4l&ZA`;HM5;^~!8DASt^IY6k;DQa7!NAJQG!zHLm8o(Y+FHIZ!KGaf`rIO1V$J1eIyCxDZM#@ zuVxd~TKBWRw((~696PmYzt?bgxMv*P5JMYRc1x(HkkXi)9_109q%)@1q5c(XF0dLs zWsgRDZE_N$EP2Be?azS9t`~5By54gM5YMo?r89<(+i0d{tk=r($7kx-_cc4*HaJRt zy}OaBIrnv;9yUXR&X4I-*c3fGukDLKlMSQ$8$QGYVkI(4aIpbUzRf=S0PGjSFkiyQ zBr!M0mqEXunb$6qKa{4?)^i@wvEbJcQ%B#vk~M9#p^&e-lnY>~9-oN|9b8g`wqnWc zw64Ij1j<+>cgr<-d5Cet6CGI$7>n%Nv`#%>lP#u*6}hlHc5@&mkRb)!-xXXkFe*=lU_bfP0R;AO(?-PBNDT3hbRF#f^B&;zM5o4|^8a?GW4 zDFA^&A?_@09UI^T=CG@P+Nhc3yJL4P;n%U$5lES!0;{eHQ!{ctlTevja=Wd;1?IpT7TXfaC!5lO2zRA_hDCM-T)JU?57(Bv%nP%?%dKu({9G~n-l;0`}xBne>Pd2hHZ&&U%i={%RVsCeD=lLTGfEjU8|!6 z?V%0LgK6rNXOVxcBEujt8IqOh_0L&SzdzhN+j-kpyBLW25=xbBf^xGvpmA;ZopCu3 zVcQ9X5OS26TIvi+u?A+o`nepgZt@;*j*X@avLhw1c2_vRvo;4$T6p$l;zD$4?KwC| z+salp3lCdV>=7I3{!;hEj6hE)!3a=$aEU25BuVvzvNhYcVY=o97T8h|OfL7D5PqY6 z=1_tjR<^8`Gr_75ZO|&@{aCYRGJD)uwXx3pAFm!%_&ta0>E!1~PMJ~!I4B_nw8{+hlgzfx5+tu_;0)>fI1*| zYC58fjrkS7IJ&PzMKg=a{Kd=|kREo@s-`?&8MmA8aAt#mtSm!P#g*(Dr|yF;shQB) zj!`Z@**OJd^NvCad9?AB*eR8)>SsLMhE}t@<)L|Qec2qUX}|?4TaQRA|GtS^a)Xk( z&~`p!)kQP|7##1&ps|9q=u*iaFHA`lkmy%qY6F#vdFe)GYnd72g)KaYw$Qq<0$;^4 z(tvy61UcR%wR% zddq#pC!$HwWZ4P`St=4m>tPhLqa_GK#Uc6tDP%+WMeAvhS8J z=sZQX#TqW=+)yo>26;^@Xj|vRC+6j<68rDFv-B)q!%pp+BK4=kB&&(`!5zU?VR^pB zA+h3S{n1=BslH?5N=12(rWJHU0nB=7eu^jE8|-JYW%q6Cdv>nwdQvD_T1X()FRA8X zroWmF3wUk(*-9pl>I}W^s{b>dDx;WvfR<=!a!SlHQlI~sVRM>qKW_sNb9>8&xft{# z9f}YtkRw^YOv}w|=^%A5NzNLFoRO}|`FG2oWEOt|#STuls3_&lT4NXYODiDF>!Rf$ zh6FW>F1i*A*7rb5YzOIbd)@0rAgx>(;(_m1&@`fmSFrb9V9qMl7qzGqR`B9lhIu0@15upap62_SZRTo6gw@?FmbXD#%(w_>_6Q?? zYv{Eo?dsP!L@7!=YafjLobT@mJ9DJI#-hG=%|MPF9PS@jTj0(sPtUErOeB7gvZ3i} zzUIs94;@_+0DEGpWb*+lQ&mOO;=E{zGE$Fhd0I>S)!Zv(B*_;td8BI0LRDo^XlE^4 z>!oO~+!>DJ2RRE&ojKYFOVtDheVN+3tx;f62edOKJnBMFGezvVtKz`2q5uBgpPrq}Q%iJ;mLF`+{g9}~%{Tyb@I{&{( ze`d~M7usr6ef(7O$4#;dJBPNN|GWPc_}F*-;~Xe<08H0spC-`X{VBd&KKsCSjbhiAWK!pyq+9_oG(BCMU?IywCLJIX(KV&5(y6|^o#g&2;L-?>wW z2YZco)mRL~)0f*VXfdy@?|*e0Tmtkb3HaM6KTpfnjCj1)Q1i!l^K^ENyCz4?9|SGm z#olMKv`4p5Nvd1M!N>%6{K58{3yF8(w?ck2X#l6im*qRbyEo3!Sy`%EC#DI(V7Y*C z5F_dGp!4|+8Y3b09Z>V4Q?m^ARU_{&pV+gZt0a{Kx2x{4FiDegaA&^{=mT}$GnQYd zwOzR@>59)Z%{$-ju0ncZ%YOZW@KF9xJEp>QH6G4rZkxp!2Q1gDJOXB3Z8xI-1-jr2 zTSG@TZWV}t{K&a0R3+9(Bc0tGHGKQ~eNX_1ef6~%8`CMEJP}%X9nXuOIs?3|PWmo8 z0xmB$sjdheJvjd-qXqXEUFu2=Axk4c^CkqkXCT+_@=T~nH9LAQ<+P6J-OfW;(`m^H z8^5(z(52NsnqIPM#9n zSpZjICyFP9BZOS~?;>f$w`o}k)aLz@R;(A;CJA0wF3QFnzK;D|&=kd)HICgm6gvua z*5Z7ofDf=T$`q}|+(n$sh$o87jfrX3dDN~bvW)~8?gfC@!ii1ViQSPX`CSKHoCDoP zAgt&;t473G0D9rV*)jH;C$6mIl9S&!hU15T_ebJ&B{uaEBsP`?xApOS%tYzEFwX3e z9>VrdI^LT!dZ(n54(|q~8`*5GmK*e-nvV|xy#+V$YP2tD-asFBOq|j*>U9j39Z8oF1ecEAR15aDZis zvlUZFvEJ{vu6gk2I(%VuDA+i#|1Dj<+ZEY14i$;-UCy4TaWSA4BIV6z=rK2`!N@+? zTx_7KJXM;obi=!H!4TqOT-S;n{&f7-2q^3J4!{wzY$52lsi7(S&4Gs>ZwkP zodZU2XsN}n-ZSR!#%+vjqUZW@$)|qqU*d+ODZa_Fn|{&IIijtp51I+g$+0-YWb!$$ zdyTx#Dwq-fSs}zsLBfOX0CdR+9s+<#sA0EUIVX8m(-7sv{!yx5h8C?naio%gyDU*n zUr-JC*0+^~jr0pyFGLlY=?ja?kK~GYzir89;Wq+Yt3Q?me|r5O&C}h_3nH=a+-r>9 zJivrS@;Rm&ci0r22NQFDtYzTQ7sXVYZ^R4cVIE5=b4=%#HxJl@juW0wA~le}B?{y;W)BnZ7Lk7UZNVoYwpDjxhVvWB`twG=}{e9SNBF?x0`d z>Hq2 zWH)Z}5)rOh8zCS8bz;E88&#de=4xJ&v26idemE+#Tyf5Ub8!ipzSnmCP2th{*9)XOX>n*a36iTahxO1Oe{>wrzE95)J5ipLo~*6H;wGRJyZ zr3gnUKi=Yl)^qBx-MoDm)|tP^6DnX zvozmI-hHcV&QBTRjkJVqB4t~rwkC65zec6Vh;BI=t{v96@36$+mDC+*5Kl197Em*1 zR{NUY>{0z`n83?`*2_!D8vz;~3x@|3gRT+85K_{i{b2cWtSYDd99qot=G=}jV z2Rv?dWp4T{wLMy?zgLF&R7tCKs1KprAI%Tv-1Ib@h^nsmI=xl6sA@1-2h*Y$sgfz4 zejR<{b=4T`f6s47YTu?3(y-r-e7k|PDkj)0vx;dG^y|dMV$gT3@yg0^Nxg^1`-xdF zMhOB(Pks`=a^=e95+OKO`E6to2^LY`&W9^r+S<=WYSX!4=x|&?dW-4@(Exmsz^=7V zd_86E z2JC_8!I6d)_agOpH@n516KWDJ^S08kytbJIJk@=iOsxW_!*sJCe@Uk1-Bp}yif(1( z&1VXgnE7}zt+p|r{wZifWKoVJz+%`&z)py$v80Kji{Hg|ac9oH$sAJ&hF zQ6UU3(LL(L4^NnQhuAncl6NN8Vxn-;>5WTFiDLmkn5H?yUEHM%!AvKI<@KXQg&E%# zm6wyXeZ3=GSuaqynQHunE0J|XQz8Dn%=d%%Pg#hP<439{f8i_v&8LffNe5`3du^#k zpc|ABUF`^*xNcfb{2r?x6UT%>|M64U_ueuRz*H%h^5b0!Hrjo3--ivet^Khxr?=f( aJ;kN%4NXk!*Db@0>@!iBC)tm6JpKnXUrMO} literal 0 HcmV?d00001 diff --git a/docs/part/notification.md b/docs/part/notification.md index e6ff528..8fb1e9a 100644 --- a/docs/part/notification.md +++ b/docs/part/notification.md @@ -63,3 +63,11 @@ Subscribing to a part category operates in the same manner as for a part - simpl {% with id="cat_sub", url="part/category_notification.png", description="Subscribe to part category" %} {% 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 %} diff --git a/mkdocs.yml b/mkdocs.yml index 4fd2375..46dfe5c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -66,7 +66,7 @@ nav: - Templates: part/template.md - Tests: part/test.md - Pricing: part/pricing.md - - Notification: part/notification.md + - Notifications: part/notification.md - Stock: - Stock Items: stock/stock.md - Stock Status: stock/status.md From 37c9c49112eb9af5dd4d993ac3a321ba17dcd765 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 16:28:56 +1100 Subject: [PATCH 05/19] wording fixes --- docs/part/notification.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/part/notification.md b/docs/part/notification.md index 8fb1e9a..fccbfb6 100644 --- a/docs/part/notification.md +++ b/docs/part/notification.md @@ -2,7 +2,7 @@ title: Part Notifications --- -## Notifications +## Notification Events Users can select to receive email notifications when certain events occur. @@ -33,7 +33,7 @@ Users can "subscribe" to either a *Part* or *Part Category*, to receive notifica When subscribed to a *Part*, a user will receive notifications when events occur which pertain to: - That particular part -- Any variant parts +- Any parts which are variants of that part If a user is subscribed to a particular part, it will be indicated as shown below: From f39c54be8d6891e09a3d4179f14c4b7031cb888c Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 20:28:25 +1100 Subject: [PATCH 06/19] Add a .github workflow to check that "strict" mode is always set --- .github/workflows/check_config.yaml | 26 ++++++++++++++++++++++++++ ci/check_mkdocs_config.py | 13 +++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 .github/workflows/check_config.yaml create mode 100644 ci/check_mkdocs_config.py diff --git a/.github/workflows/check_config.yaml b/.github/workflows/check_config.yaml new file mode 100644 index 0000000..77ea5c2 --- /dev/null +++ b/.github/workflows/check_config.yaml @@ -0,0 +1,26 @@ +name: Config Checks + +on: + push: + branches-ignore: + - l10* + + pull_request: + branches-ignore: + - l10* + +jobs: + + mkdocs: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v2 + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - name: Run Checks + run: | + \ No newline at end of file diff --git a/ci/check_mkdocs_config.py b/ci/check_mkdocs_config.py new file mode 100644 index 0000000..0e243d9 --- /dev/null +++ b/ci/check_mkdocs_config.py @@ -0,0 +1,13 @@ +import os +import yaml + +here = os.path.dirname(__file__) + +tld = os.path.abspath(os.path.join(here, '..')) + +config_file = os.path.join(tld, 'mkdocs.yml') + +with open(config_file, 'r') as f: + data = yaml.safe_load(f) + + assert data['strict'] == True \ No newline at end of file From ce3ec5a88873e450627f54c9fed2bc7078f05d0a Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 20:33:16 +1100 Subject: [PATCH 07/19] Actually run the workflow --- .github/workflows/check_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_config.yaml b/.github/workflows/check_config.yaml index 77ea5c2..254dbc9 100644 --- a/.github/workflows/check_config.yaml +++ b/.github/workflows/check_config.yaml @@ -23,4 +23,4 @@ jobs: python-version: 3.7 - name: Run Checks run: | - \ No newline at end of file + python ci/check_mkdocs_config.py From 11c9aadd1b0c0eebd08ce5c5fe75b65381507811 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 20:36:44 +1100 Subject: [PATCH 08/19] install yaml --- .github/workflows/check_config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_config.yaml b/.github/workflows/check_config.yaml index 254dbc9..3acb17a 100644 --- a/.github/workflows/check_config.yaml +++ b/.github/workflows/check_config.yaml @@ -23,4 +23,5 @@ jobs: python-version: 3.7 - name: Run Checks run: | + pip install yaml python ci/check_mkdocs_config.py From f5b421251e8baddc9e7c528cba4395691a8c9d01 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 5 Nov 2021 20:39:39 +1100 Subject: [PATCH 09/19] wrong package name --- .github/workflows/check_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_config.yaml b/.github/workflows/check_config.yaml index 3acb17a..6081b97 100644 --- a/.github/workflows/check_config.yaml +++ b/.github/workflows/check_config.yaml @@ -23,5 +23,5 @@ jobs: python-version: 3.7 - name: Run Checks run: | - pip install yaml + pip install pyyaml python ci/check_mkdocs_config.py From 566e4fd2c1284dbfd7b6a7ec6103f8c3983aafb5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 6 Nov 2021 07:55:43 +1100 Subject: [PATCH 10/19] Add link to demo instance --- _includes/overrides/home.html | 11 +++++++---- docs/{start => }/demo.md | 29 ++++++++++++++++++----------- mkdocs.yml | 3 +-- 3 files changed, 26 insertions(+), 17 deletions(-) rename docs/{start => }/demo.md (87%) diff --git a/_includes/overrides/home.html b/_includes/overrides/home.html index 8aabcfb..2ea2565 100644 --- a/_includes/overrides/home.html +++ b/_includes/overrides/home.html @@ -25,18 +25,21 @@ Features + + Demo + Install - - Source Code - - Get the App + Mobile App Translate + + Source Code + diff --git a/docs/start/demo.md b/docs/demo.md similarity index 87% rename from docs/start/demo.md rename to docs/demo.md index 50810ae..12041a0 100644 --- a/docs/start/demo.md +++ b/docs/demo.md @@ -1,19 +1,14 @@ --- -title: Demo Dataset +title: InvenTree Demo --- -## Demo Dataset +## InvenTree Demo -A demonstration dataset is [available on GitHub](https://github.com/inventree/demo-dataset). +A working demo of InvenTree is available online at: -This dataset can be used to populate an empty database for demonstration purposes, to test and evaluate various InvenTree features. +[https://demo.inventree.org](https://demo.inventree.org) -It may also be useful to developers who need a dataset for developing and/or testing new InvenTree features. - -!!! warning "Empty Database" - Loading demo data will cause errors if the database is not empty. Run `invoke delete-data` prior to importing the demo dataset if there are records existing in the database! - -## Login Details +### Login Details The default *superuser* login details for the demo dataset are: @@ -21,7 +16,19 @@ The default *superuser* login details for the demo dataset are: | --- | --- | | admin | inventree | -## Setup +!!! warning "Database Reset" + The demo databaset resets once per day + +## Demo Dataset + +The dataset used for the demo instance is [available on GitHub](https://github.com/inventree/demo-dataset). + +This dataset can be used to populate an empty database for demonstration purposes, to test and evaluate various InvenTree features. + +It may also be useful to developers who need a dataset for developing and/or testing new InvenTree features. + +!!! warning "Empty Database" + Loading demo data will cause errors if the database is not empty. Run `invoke delete-data` prior to importing the demo dataset if there are records existing in the database! Follow these instructions to setup an InvenTree instance with the demo data: diff --git a/mkdocs.yml b/mkdocs.yml index 46dfe5c..059ceef 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -44,8 +44,8 @@ extra_javascript: nav: - InvenTree: - Features: features.md - - In Development: upcoming.md - Release Notes: releases/release_notes.md + - Demo: demo.md - FAQ: faq.md - Contribute: contribute.md - Credits: credits.md @@ -56,7 +56,6 @@ nav: - Bare Metal Setup: start/install.md - Updating: start/update.md - Migrating: start/migrate.md - - Demo Dataset: start/demo.md - Parts: - Parts: part/part.md - Creating Parts: part/create.md From 84221823e0a470b3c379790b2ec3aa6a1938ea2b Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 6 Nov 2021 07:58:38 +1100 Subject: [PATCH 11/19] Fix URL --- docs/demo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/demo.md b/docs/demo.md index 12041a0..91fc150 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -47,7 +47,7 @@ git clone git@github.com:inventree/demo-dataset.git ~/inventree-data You will need to configure an *empty* database before importing the data fixtures. -Follow the [installation instructions](./intro.md) to initialize a database using your backend of choice. +Follow the [installation instructions](./start/intro.md) to initialize a database using your backend of choice. ### Configure InvenTree Settings From f2b8ac85dc0203be6edcf9d9bc0a8230a31666a4 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 8 Nov 2021 09:52:05 +1100 Subject: [PATCH 12/19] Update demo.md --- docs/demo.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/demo.md b/docs/demo.md index 91fc150..f4ed444 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -10,11 +10,13 @@ A working demo of InvenTree is available online at: ### Login Details -The default *superuser* login details for the demo dataset are: +Multiple default accounts are provided, as detailed below. Each account is afforded a different set of permissions, so users can see the InvenTree roles/permission system in action -| Username | Password | -| --- | --- | -| admin | inventree | +| Username | Password | Description | +| --- | --- | --- | +| admin | inventree | Admin / superuser account - access to all system components | +| reader | readonly | Can view all pages but cannot create, edit or delete database records | +| engineer | partsonly | Can manage parts, view stock, but no access to purchase orders or sales orders | !!! warning "Database Reset" The demo databaset resets once per day From a80ba8fbd722fc9483bfeee02d77f8a8907854b2 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 8 Nov 2021 09:54:31 +1100 Subject: [PATCH 13/19] Update demo.md --- docs/demo.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/demo.md b/docs/demo.md index f4ed444..f862819 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -18,8 +18,14 @@ Multiple default accounts are provided, as detailed below. Each account is affor | reader | readonly | Can view all pages but cannot create, edit or delete database records | | engineer | partsonly | Can manage parts, view stock, but no access to purchase orders or sales orders | -!!! warning "Database Reset" - The demo databaset resets once per day +### Data Persistence + +The InvenTree demo database resets to a known state once per day. + +- Database records are reset to the latest state of the [demo dataset](https://github.com/inventree/demo-dataset) +- InvenTree software is kept up to date with the latest `inventree:master` available via docker + +During the update period, the demo server may be inaccessible for a few minutes. ## Demo Dataset From a2a32c4e0f3f0134f1e5b79fd48c01ba02e70750 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 8 Nov 2021 14:42:12 +1100 Subject: [PATCH 14/19] Update demo.md --- docs/demo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/demo.md b/docs/demo.md index f862819..9dc8501 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -14,7 +14,7 @@ Multiple default accounts are provided, as detailed below. Each account is affor | Username | Password | Description | | --- | --- | --- | -| admin | inventree | Admin / superuser account - access to all system components | +| allacess | nolimits | View / create / edit all pages and items | | reader | readonly | Can view all pages but cannot create, edit or delete database records | | engineer | partsonly | Can manage parts, view stock, but no access to purchase orders or sales orders | From 70907667c18a91ce0fc492f7db88ac5f84588c3b Mon Sep 17 00:00:00 2001 From: Matthias Mair <66015116+matmair@users.noreply.github.com> Date: Mon, 8 Nov 2021 18:48:47 +0100 Subject: [PATCH 15/19] add upcoming back in --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 059ceef..53fe68f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -45,6 +45,7 @@ nav: - InvenTree: - Features: features.md - Release Notes: releases/release_notes.md + - Upcoming: upcoming.md - Demo: demo.md - FAQ: faq.md - Contribute: contribute.md From e72b7cf44e807c3d2e341fc5fe1858bf2fb1fd54 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 11 Nov 2021 08:40:38 +1100 Subject: [PATCH 16/19] Update demo.md --- docs/demo.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/demo.md b/docs/demo.md index 9dc8501..a44dbc4 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -17,6 +17,7 @@ Multiple default accounts are provided, as detailed below. Each account is affor | allacess | nolimits | View / create / edit all pages and items | | reader | readonly | Can view all pages but cannot create, edit or delete database records | | engineer | partsonly | Can manage parts, view stock, but no access to purchase orders or sales orders | +| admin | inventree | Superuser account, access all areas plus administrator actions | ### Data Persistence From 938e306a732001dd70eb671bf671e5a410e7d72d Mon Sep 17 00:00:00 2001 From: Matthias Mair <66015116+matmair@users.noreply.github.com> Date: Thu, 11 Nov 2021 01:42:06 +0100 Subject: [PATCH 17/19] Update report.md Adds info for changes in https://github.com/inventree/InvenTree/pull/2288 --- docs/report/report.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/report/report.md b/docs/report/report.md index a0cce35..3377f55 100644 --- a/docs/report/report.md +++ b/docs/report/report.md @@ -63,6 +63,11 @@ The django template system allows for conditional rendering, providing condition A number of global reporting options are available for customizing InvenTree reports: +### Enable Reports + +By default, the reporting feature is turned off. It must be enabled in the global settings. + + ### Default Page Size The built-in InvenTree report templates (and any reports which are derived from the built-in templates) use the *Page Size* option to set the page size of the generated reports. From 32c23655e7e7918fd9a89435519c3a53b3ae8ba4 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 18 Nov 2021 21:40:26 +1100 Subject: [PATCH 18/19] Update demo.md --- docs/demo.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/demo.md b/docs/demo.md index a44dbc4..cdf9902 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -26,7 +26,8 @@ The InvenTree demo database resets to a known state once per day. - Database records are reset to the latest state of the [demo dataset](https://github.com/inventree/demo-dataset) - InvenTree software is kept up to date with the latest `inventree:master` available via docker -During the update period, the demo server may be inaccessible for a few minutes. +!!! warning "Server Down" + During the update period, the demo server may be inaccessible for a few minutes. ## Demo Dataset From 330beed1af0189abeaf3af1d6f4765fa7847e4d4 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Fri, 19 Nov 2021 23:14:55 +0100 Subject: [PATCH 19/19] update report options screenshot --- docs/assets/images/report/report.png | Bin 0 -> 16662 bytes docs/assets/images/report/report_debug_mode.png | Bin 19812 -> 0 bytes .../images/report/report_default_page_size.png | Bin 19797 -> 0 bytes docs/report/report.md | 12 ++++-------- 4 files changed, 4 insertions(+), 8 deletions(-) create mode 100644 docs/assets/images/report/report.png delete mode 100644 docs/assets/images/report/report_debug_mode.png delete mode 100644 docs/assets/images/report/report_default_page_size.png diff --git a/docs/assets/images/report/report.png b/docs/assets/images/report/report.png new file mode 100644 index 0000000000000000000000000000000000000000..9bf1da6b460a97effd91644bc7016ec6d62f44db GIT binary patch literal 16662 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 diff --git a/docs/report/report.md b/docs/report/report.md index 3377f55..e2a996b 100644 --- a/docs/report/report.md +++ b/docs/report/report.md @@ -63,6 +63,10 @@ The django template system allows for conditional rendering, providing condition A number of global reporting options are available for customizing InvenTree reports: +{% with id="report-options", url="report/report.png", description="Report Options" %} +{% include 'img.html' %} +{% endwith %} + ### Enable Reports By default, the reporting feature is turned off. It must be enabled in the global settings. @@ -72,10 +76,6 @@ By default, the reporting feature is turned off. It must be enabled in the globa The built-in InvenTree report templates (and any reports which are derived from the built-in templates) use the *Page Size* option to set the page size of the generated reports. -{% with id="report_page_size", url="report/report_default_page_size.png", description="Report Page Size" %} -{% include 'img.html' %} -{% endwith %} - !!! info "Override Page Size" Custom report templates do not have to make use of the *Page Size* option, although it is made available to the template context. @@ -85,10 +85,6 @@ As templates are rendered directly to a PDF object, it can be difficult to debug Setting the *Debug Mode* option renders the template as raw HTML instead of PDF, allowing the rendering output to be introspected. This feature allows template designers to understand any issues with the generated HTML (before it is passed to the PDF generation engine). -{% with id="report_debu_mode", url="report/report_debug_mode.png", description="Report Debug Mode" %} -{% include 'img.html' %} -{% endwith %} - !!! warning "HTML Rendering Limitations" When rendered in debug mode, @page attributes (such as size, etc) will **not** be observed. Additionally, any asset files stored on the InvenTree server will not be rendered. Debug mode is not intended to produce "good looking" documents!