2
edits
(Create PackScan and Inventur documentation with setup instructions, demos and source code links) Tag: 2017 source edit |
m (edit the Version number of my current release) |
||
| Line 1: | Line 1: | ||
{{#lang: en}} | {{#lang: en}} | ||
== Overview == | ==Overview== | ||
'''PackScan and Inventur''' are two free, open-source mobile web applications for Dolibarr. They support barcode-based order picking, packing verification, stock counting and storage location management. | '''PackScan and Inventur''' are two free, open-source mobile web applications for Dolibarr. They support barcode-based order picking, packing verification, stock counting and storage location management. | ||
| Line 9: | Line 9: | ||
They run in the smartphone browser and communicate directly with an existing Dolibarr installation through its REST API. No additional application backend or database is required. | They run in the smartphone browser and communicate directly with an existing Dolibarr installation through its REST API. No additional application backend or database is required. | ||
== Project information == | ==Project information== | ||
{| class="wikitable" | {| class="wikitable" | ||
! Item !! Information | !Item!!Information | ||
|- | |- | ||
| Applications || PackScan and Inventur (Inventory) | |Applications||PackScan and Inventur (Inventory) | ||
|- | |- | ||
| Author || Stefan Grumpelt, gRoods.de | |Author||Stefan Grumpelt, gRoods.de | ||
|- | |- | ||
| Version documented || 1. | |Version documented||1.2.0 | ||
|- | |- | ||
| License || GNU General Public License v3.0 or later | |License||GNU General Public License v3.0 or later | ||
|- | |- | ||
| Price || Free download; optional paid setup and support | |Price||Free download; optional paid setup and support | ||
|- | |- | ||
| Dolibarr compatibility || Developed and used with Dolibarr 24 | |Dolibarr compatibility||Developed and used with Dolibarr 24 | ||
|- | |- | ||
| Platforms || Safari on iPhone from iOS 16; Chrome on Android | |Platforms||Safari on iPhone from iOS 16; Chrome on Android | ||
|- | |- | ||
| Interface languages || 24 languages, including English, German, French, Italian and Spanish | |Interface languages||24 languages, including English, German, French, Italian and Spanish | ||
|- | |- | ||
| Website || [https://groods.de/packscan/ Project website] | |Website||[https://groods.de/packscan/ Project website] | ||
|- | |- | ||
| Source code || [https://github.com/groods-apps/packscan/ GitHub repository] | |Source code||[https://github.com/groods-apps/packscan/ GitHub repository] | ||
|- | |- | ||
| Documentation || [https://groods.de/packscan/anleitung-en.html English] / [https://groods.de/packscan/anleitung.html German] | |Documentation||[https://groods.de/packscan/anleitung-en.html English] / [https://groods.de/packscan/anleitung.html German] | ||
|- | |- | ||
| Contact || info@groods.de | |Contact||info@groods.de | ||
|} | |} | ||
== Features == | ==Features== | ||
=== PackScan: order picking === | ===PackScan: order picking=== | ||
* Combine open orders into a picking list sorted by storage location. | *Combine open orders into a picking list sorted by storage location. | ||
* Group identical products across multiple orders. | *Group identical products across multiple orders. | ||
* Display product images, quantities and prominent barcode end digits. | *Display product images, quantities and prominent barcode end digits. | ||
* Display storage locations in a visual wall or shelf grid. | *Display storage locations in a visual wall or shelf grid. | ||
* Scan products or enter quantities manually. | *Scan products or enter quantities manually. | ||
* Allocate picked quantities to the oldest orders first. | *Allocate picked quantities to the oldest orders first. | ||
* Release complete orders while leaving incomplete orders pending. | *Release complete orders while leaving incomplete orders pending. | ||
* Exclude postage and other non-pickable products through the settings. | *Exclude postage and other non-pickable products through the settings. | ||
=== PackScan: packing verification === | ===PackScan: packing verification=== | ||
* Scan a shipment label to open the matching Dolibarr shipment. | *Scan a shipment label to open the matching Dolibarr shipment. | ||
* Verify products by barcode before packing them. | *Verify products by barcode before packing them. | ||
* Receive visual and audible feedback for correct and incorrect items. | *Receive visual and audible feedback for correct and incorrect items. | ||
* View packing progress for each shipment. | *View packing progress for each shipment. | ||
* Validate shipments and close orders according to the application settings. | *Validate shipments and close orders according to the application settings. | ||
Shipment lookup supports DHL labels and the Data Matrix code of Deutsche Post Internetmarke labels. The shipment number must already be recorded in the corresponding Dolibarr shipment. | Shipment lookup supports DHL labels and the Data Matrix code of Deutsche Post Internetmarke labels. The shipment number must already be recorded in the corresponding Dolibarr shipment. | ||
=== Inventur: stock counting === | ===Inventur: stock counting=== | ||
* Find products using their standard barcode or an additional GTIN field. | *Find products using their standard barcode or an additional GTIN field. | ||
* Display product information, images and stock by warehouse. | *Display product information, images and stock by warehouse. | ||
* Assign or update storage locations. | *Assign or update storage locations. | ||
* Suggest the next storage column when placing products sequentially. | *Suggest the next storage column when placing products sequentially. | ||
* Adjust stock quantities by warehouse. | *Adjust stock quantities by warehouse. | ||
* Record the date and time of the last count. | *Record the date and time of the last count. | ||
* Warn if a product has already been counted on the same day. | *Warn if a product has already been counted on the same day. | ||
'''Scanning a product does not change stock.''' Selecting Save immediately posts the stock difference as a Dolibarr stock movement with an INV-prefixed reference. Current stock is reloaded before posting. | '''Scanning a product does not change stock.''' Selecting Save immediately posts the stock difference as a Dolibarr stock movement with an INV-prefixed reference. Current stock is reloaded before posting. | ||
=== Mobile operation === | ===Mobile operation=== | ||
* Camera scanning for EAN, Code 128, QR and Data Matrix. | *Camera scanning for EAN, Code 128, QR and Data Matrix. | ||
* Torch control on supported devices and browsers. | *Torch control on supported devices and browsers. | ||
* Audible feedback and visual confirmation. | *Audible feedback and visual confirmation. | ||
* Protection against repeatedly counting a barcode that remains in view. | *Protection against repeatedly counting a barcode that remains in view. | ||
* Support for Bluetooth scanners that act as a keyboard. | *Support for Bluetooth scanners that act as a keyboard. | ||
* Home-screen icons for direct access to each application. | *Home-screen icons for direct access to each application. | ||
== Requirements == | ==Requirements== | ||
* An existing Dolibarr installation accessible over HTTPS. | *An existing Dolibarr installation accessible over HTTPS. | ||
* Access to the Dolibarr REST API. | *Access to the Dolibarr REST API. | ||
* A dedicated API user with appropriate permissions. | *A dedicated API user with appropriate permissions. | ||
* Configured product barcodes and extra fields. | *Configured product barcodes and extra fields. | ||
* Products, stock/warehouses, customer orders and shipments enabled for the complete workflow. | *Products, stock/warehouses, customer orders and shipments enabled for the complete workflow. | ||
* A reliable connection between the smartphone and Dolibarr. | *A reliable connection between the smartphone and Dolibarr. | ||
Developed and used with Dolibarr 24. Older versions require separate compatibility testing. | Developed and used with Dolibarr 24. Older versions require separate compatibility testing. | ||
| Line 96: | Line 96: | ||
The documented shipping workflow uses DHL and Deutsche Post shipping methods. Shipping-method codes can be adjusted in the application settings. | The documented shipping workflow uses DHL and Deutsche Post shipping methods. Shipping-method codes can be adjusted in the application settings. | ||
== Installation == | ==Installation== | ||
These applications are standalone REST API clients, rather than conventional modules installed through the Dolibarr external-module installer. | These applications are standalone REST API clients, rather than conventional modules installed through the Dolibarr external-module installer. | ||
# Download and extract the application package. | #Download and extract the application package. | ||
# Create the directory <code>htdocs/custom/lager/</code> in the Dolibarr installation. | #Create the directory <code>htdocs/custom/lager/</code> in the Dolibarr installation. | ||
# Copy the contents of the package's <code>lager-apps</code> directory into this directory. | #Copy the contents of the package's <code>lager-apps</code> directory into this directory. | ||
# Keep the HTML files, icons and manifest files together. | #Keep the HTML files, icons and manifest files together. | ||
# Configure the required Dolibarr modules, extra fields and API permissions. | #Configure the required Dolibarr modules, extra fields and API permissions. | ||
# Open <code>https://your-dolibarr.example/custom/lager/</code> on the smartphone. | #Open <code>https://your-dolibarr.example/custom/lager/</code> on the smartphone. | ||
# Select an application and open its settings. | #Select an application and open its settings. | ||
# Enter the Dolibarr API address and API token. | #Enter the Dolibarr API address and API token. | ||
# Disable demo mode if enabled and test the connection. | #Disable demo mode if enabled and test the connection. | ||
# Review warehouse and stock-movement settings before using live data. | #Review warehouse and stock-movement settings before using live data. | ||
The applications can optionally be added to the smartphone home screen. | The applications can optionally be added to the smartphone home screen. | ||
| Line 115: | Line 115: | ||
Detailed instructions: | Detailed instructions: | ||
* [https://groods.de/packscan/anleitung-en.html English setup guide] | *[https://groods.de/packscan/anleitung-en.html English setup guide] | ||
* [https://groods.de/packscan/anleitung.html German setup guide] | *[https://groods.de/packscan/anleitung.html German setup guide] | ||
=== Extra fields === | ===Extra fields=== | ||
{| class="wikitable" | {| class="wikitable" | ||
! Default code !! Object !! Type !! Purpose | !Default code!!Object!!Type!!Purpose | ||
|- | |- | ||
| lagerplatz || Product || Text || Storage location, picking order and grid display | |lagerplatz||Product||Text||Storage location, picking order and grid display | ||
|- | |- | ||
| gtin || Product || Text, optional || Additional product barcode | |gtin||Product||Text, optional||Additional product barcode | ||
|- | |- | ||
| letzte_inventur || Product || Date and time || Last stock count | |letzte_inventur||Product||Date and time||Last stock count | ||
|- | |- | ||
| gepickt || Customer order || Date and time || Release after picking | |gepickt||Customer order||Date and time||Release after picking | ||
|} | |} | ||
| Line 136: | Line 136: | ||
The optional server-side shipping automation additionally uses the order field <code>umgebucht</code> to track stock transfers. | The optional server-side shipping automation additionally uses the order field <code>umgebucht</code> to track stock transfers. | ||
=== API permissions === | ===API permissions=== | ||
Use a dedicated API user and grant only the permissions required for the selected workflow. | Use a dedicated API user and grant only the permissions required for the selected workflow. | ||
| Line 142: | Line 142: | ||
The complete workflow requires permissions to: | The complete workflow requires permissions to: | ||
* Read and update products. | *Read and update products. | ||
* Read warehouses and create stock movements. | *Read warehouses and create stock movements. | ||
* Read, update and close customer orders. | *Read, update and close customer orders. | ||
* Read, create and validate shipments. | *Read, create and validate shipments. | ||
* Read third parties. | *Read third parties. | ||
For initial tests with live data, use a read-only API user where possible. | For initial tests with live data, use a read-only API user where possible. | ||
=== Stock configuration === | ===Stock configuration=== | ||
Review Dolibarr's stock-movement settings before completing shipments. | Review Dolibarr's stock-movement settings before completing shipments. | ||
| Line 156: | Line 156: | ||
If stock is already deducted when an order or invoice is validated, shipment validation must not deduct it a second time. Configure the stock trigger to match the actual warehouse workflow. | If stock is already deducted when an order or invoice is validated, shipment validation must not deduct it a second time. Configure the stock trigger to match the actual warehouse workflow. | ||
== Storage locations == | ==Storage locations== | ||
Storage locations are stored as text in a product extra field. | Storage locations are stored as text in a product extra field. | ||
| Line 166: | Line 166: | ||
PackScan uses these locations to sort the picking list and display a visual storage grid. | PackScan uses these locations to sort the picking list and display a visual storage grid. | ||
== Optional integrations == | ==Optional integrations== | ||
The free applications do not include: | The free applications do not include: | ||
* Marketplace or webshop order imports. | *Marketplace or webshop order imports. | ||
* Purchasing postage or generating shipping labels. | *Purchasing postage or generating shipping labels. | ||
* Sending tracking information back to marketplaces. | *Sending tracking information back to marketplaces. | ||
* Server-side shipping automation. | *Server-side shipping automation. | ||
These workflows require separate integrations. | These workflows require separate integrations. | ||
| Line 179: | Line 179: | ||
Without shipping automation, labels are created in an external shipping tool and the corresponding shipments are prepared in Dolibarr. | Without shipping automation, labels are created in an external shipping tool and the corresponding shipments are prepared in Dolibarr. | ||
== Limitations == | ==Limitations== | ||
=== Connectivity === | ===Connectivity=== | ||
Loading lists, looking up products and saving changes require a connection to Dolibarr. | Loading lists, looking up products and saving changes require a connection to Dolibarr. | ||
| Line 187: | Line 187: | ||
Local picking and packing progress is stored on the device and retained after a connection interruption. This is not a fully offline workflow. | Local picking and packing progress is stored on the device and retained after a connection interruption. This is not a fully offline workflow. | ||
=== Multiple users === | ===Multiple users=== | ||
* Picking progress is device-local. Use one picker per picking run. | *Picking progress is device-local. Use one picker per picking run. | ||
* Multiple people can pack simultaneously when working on different shipments. | *Multiple people can pack simultaneously when working on different shipments. | ||
* Coordinate stock counts to avoid concurrent updates to the same product and warehouse. Reloading stock before saving does not constitute a reservation or lock. | *Coordinate stock counts to avoid concurrent updates to the same product and warehouse. Reloading stock before saving does not constitute a reservation or lock. | ||
=== Partial shipments === | ===Partial shipments=== | ||
Create genuine partial shipments in Dolibarr. | Create genuine partial shipments in Dolibarr. | ||
| Line 199: | Line 199: | ||
Finishing packing with missing items does not automatically reduce the quantities recorded in the shipment. | Finishing packing with missing items does not automatically reduce the quantities recorded in the shipment. | ||
=== Sets and variants === | ===Sets and variants=== | ||
* Sets are handled as individual products with their own barcode. | *Sets are handled as individual products with their own barcode. | ||
* Components of Dolibarr kits are not expanded. | *Components of Dolibarr kits are not expanded. | ||
* Product variants are handled as separate products with their own barcode. | *Product variants are handled as separate products with their own barcode. | ||
=== Inventory scope === | ===Inventory scope=== | ||
* Stock corrections involving lots or serial numbers must be performed in Dolibarr. | *Stock corrections involving lots or serial numbers must be performed in Dolibarr. | ||
* Inventur does not currently provide a separate count sheet or an expected-versus-counted export. | *Inventur does not currently provide a separate count sheet or an expected-versus-counted export. | ||
* Inventory movements can be reviewed and exported in Dolibarr. | *Inventory movements can be reviewed and exported in Dolibarr. | ||
* The last-count field can be used to identify products that have not yet been counted. | *The last-count field can be used to identify products that have not yet been counted. | ||
Products without a barcode can be counted manually using the quantity controls. | Products without a barcode can be counted manually using the quantity controls. | ||
== Data storage and access == | ==Data storage and access== | ||
Business records are stored in the user's Dolibarr installation. | Business records are stored in the user's Dolibarr installation. | ||
| Line 224: | Line 224: | ||
If a device is lost, its access can be revoked by renewing the relevant API user's token in Dolibarr. Other devices using the same token will then need the new token. | If a device is lost, its access can be revoked by renewing the relevant API user's token in Dolibarr. Other devices using the same token will then need the new token. | ||
== Languages == | ==Languages== | ||
Version 1.1.0 supports 24 interface languages: | Version 1.1.0 supports 24 interface languages: | ||
| Line 232: | Line 232: | ||
The applications follow the browser language by default and fall back to English for unsupported languages. A language can also be selected manually in the settings. | The applications follow the browser language by default and fall back to English for unsupported languages. A language can also be selected manually in the settings. | ||
== Updates == | ==Updates== | ||
Replace the application files on the server while keeping the same application URLs. Browser-stored settings remain on the individual devices. | Replace the application files on the server while keeping the same application URLs. Browser-stored settings remain on the individual devices. | ||
| Line 240: | Line 240: | ||
See the [https://groods.de/packscan/#versionen project version history] for release information. | See the [https://groods.de/packscan/#versionen project version history] for release information. | ||
== Demonstrations and download == | ==Demonstrations and download== | ||
* [https://groods.de/demo/packscan/ PackScan demonstration] | *[https://groods.de/demo/packscan/ PackScan demonstration] | ||
* [https://groods.de/demo/inventur/ Inventur demonstration] | *[https://groods.de/demo/inventur/ Inventur demonstration] | ||
* [https://github.com/groods-apps/packscan/ Source code on GitHub] | *[https://github.com/groods-apps/packscan/ Source code on GitHub] | ||
* [https://groods.de/packscan/download/lager-apps.zip Download application package] | *[https://groods.de/packscan/download/lager-apps.zip Download application package] | ||
* [https://groods.de/packscan/anleitung-en.html English setup guide] | *[https://groods.de/packscan/anleitung-en.html English setup guide] | ||
* [https://groods.de/packscan/anleitung.html German setup guide] | *[https://groods.de/packscan/anleitung.html German setup guide] | ||
The demonstrations use example data and require no registration. | The demonstrations use example data and require no registration. | ||
| Line 253: | Line 253: | ||
When testing with an existing Dolibarr installation, self-hosting the application files on the same origin is the most reliable option. Cross-origin connections from the public demonstration may be blocked by the server, proxy or security configuration. | When testing with an existing Dolibarr installation, self-hosting the application files on the same origin is the most reliable option. Cross-origin connections from the public demonstration may be blocked by the server, proxy or security configuration. | ||
== Support and contributions == | ==Support and contributions== | ||
Documentation and demonstrations are available online. | Documentation and demonstrations are available online. | ||
| Line 267: | Line 267: | ||
Contact: info@groods.de | Contact: info@groods.de | ||
== License and third-party components == | ==License and third-party components== | ||
Copyright 2026 Stefan Grumpelt, gRoods.de. | Copyright 2026 Stefan Grumpelt, gRoods.de. | ||
edits