TIP: You can type at any time to perform a new search.
Shopfloor Base
shopfloor_base · OCA/shopfloor-app
🛠 Migration considerations
- Raw `cr.execute()` INSERT/UPDATE/DELETE bypasses the ORM (no compute/constrains/tracking/mail): `DELETE FROM endpoint_route WHERE route like %s` - re-check the table/column names still match after upgrading. migration-raw-sql-write
Found by automated static analysis: patterns worth a look before/after upgrading this module to a newer Odoo version.
- Repository
- OCA/shopfloor-app · module folder · Try on Runboat
- Module version
- Category
- Inventory
- Folder size
- 0.25 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://github.com/OCA/shopfloor-app
- Last tracking update
- 2026-08-11 11:13:01
- Authors
- Camptocamp, Akretion, Odoo Community Association (OCA), BCIM
- Maintainers
- Camptocamp, Akretion, Odoo Community Association (OCA), BCIM
- Committers
- Simone Orsi, Michael Tietz, SilvioC2C, Weblate, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- apispec, cerberus, parse-accept-language, pyquerystring, cachetools
- System dependencies
- None
- Required by
- shopfloor, shopfloor_example, shopfloor_mobile_base, shopfloor_rest_log, shopfloor_workstation
- Description
Shopfloor is a barcode scanner application. This module provides REST APIs to support scenario. It needs a frontend to consume the backend APIs and provide screens for users on barcode devices. A default front-end application is provided by `shopfloor_mobile_base`.
Code Analysis ⓘ
Views touched (12)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
shopfloor_app_form_view |
shopfloor app form | shopfloor.app | form | New |
shopfloor_app_search_view |
shopfloor app search | shopfloor.app | search | New |
shopfloor_app_tree_view |
shopfloor app tree | shopfloor.app | list | New |
shopfloor_menu_form_view |
shopfloor menu form | shopfloor.menu | form | New |
shopfloor_menu_search_view |
shopfloor menu search | shopfloor.menu | search | New |
shopfloor_menu_tree_view |
shopfloor menu tree | shopfloor.menu | list | New |
shopfloor_profile_form_view |
shopfloor.profile form | shopfloor.profile | form | New |
shopfloor_profile_search_view |
shopfloor.profile search | shopfloor.profile | search | New |
shopfloor_profile_tree_view |
shopfloor.profile tree | shopfloor.profile | list | New |
shopfloor_scenario_form_view |
shopfloor.scenario form | shopfloor.scenario | form | New |
shopfloor_scenario_search_view |
shopfloor.scenario search | shopfloor.scenario | search | New |
shopfloor_scenario_tree_view |
shopfloor.scenario tree | shopfloor.scenario | list | New |
HTTP endpoints (2)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/shopfloor/api-docs/<tech_name(shopfloor.app):collection>/<string:service_name>.json |
ApiDocsController.shopfloor_api |
public | http | ALL | |
/shopfloor/api-docs/<tech_name(shopfloor.app):collection>, /shopfloor/api-docs/<tech_name(shopfloor.app):collection>/index.html |
ApiDocsController.shopfloor_index |
public | http | GET |
Models touched (5)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (16)
-
activeBooleandefault=True -
api_docs_urlCharcompute='_compute_url'help='Public URL for api docs.' -
api_routeCharcompute='_compute_api_route'compute_sudo=Truehelp='Base route for endpoints attached to this app, public version.' -
api_routeCharcompute='_compute_api_route'compute_sudo=Truehelp='\n Base route for endpoints attached to this app,\n internal controller-ready version.\n ' -
app_versionCharcompute='_compute_app_version' -
auth_typeSelectiondefault='user_endpoint'selection='_selection_auth_type' -
categorySelectionselection=[('', 'None')] -
lang_idMany2one → res.langhelp='If set, the app will be first loaded with this lang.'string='Default language' args: 'res.lang' -
lang_idsMany2many → res.langstring='Available languages' args: 'res.lang' -
nameCharrequired=Truetranslate=True -
profile_idsMany2many → shopfloor.profilecomodel_name='shopfloor.profile'help="Profiles used by this app. This will determine menu items too.However this field is not required in case you don't need profiles and menu items from the backend."string='Profiles' -
profile_requiredBooleancompute='_compute_profile_required'store=True -
registered_routesTextcompute='_compute_registered_routes'compute_sudo=Truegroups='base.group_no_one'help='Technical field to allow developers to check registered routes on the form' -
short_nameCharhelp='Needed for app manifest'required=Truetranslate=True -
tech_nameCharindex=Truerequired=True -
urlCharcompute='_compute_url'help='Public URL to use the app.'
-
action_open_app(self) -
action_open_app_docs(self) -
action_view_menu_items(self) -
api_url_for_service(self, service_name, endpoint=None)Handy method to generate services' API URLs for current app.
New fields (6)
-
activeBooleandefault=True -
nameCharrequired=Truetranslate=True -
profile_idMany2one → shopfloor.profilehelp='Visible on this profile only'string='Profile' args: 'shopfloor.profile' -
scenario_idMany2one → shopfloor.scenarioauto_join=Truecomodel_name='shopfloor.scenario'ondelete='restrict'required=True -
scenario_keyCharrelated='scenario_id.key' -
sequenceInteger
No public methods.
New fields (4)
-
activeBooleandefault=True -
menu_idsOne2many → shopfloor.menucomodel_name='shopfloor.menu'help='Menus visible for this profile'inverse_name='profile_id'string='Menus' -
nameCharrequired=Truetranslate=True -
sequenceIntegerdefault=0
No public methods.
New fields (3)
-
keyCharhelp="Identify scenario univocally. This value must match a service component's `usage`."required=True -
nameCharrequired=Truetranslate=True -
options_editTexthelp='Configure options via JSON'inverse='_inverse_options_edit'
-
create(self, vals_list)@api.model_create_multi -
has_option(self, key) -
write(self, vals)
Loading…
Loading…
Loading…