Initial commit: Ventor Odoo packages (4 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:49:21 +02:00
commit 1f20ad87e6
190 changed files with 10375 additions and 0 deletions

View file

@ -0,0 +1,39 @@
Ventor Base
=========================
Base module that allow relation between Ventor modules
Changelog
---------
16.0.1.4.0 (2023-11-04)
***********************
* Added the setting "Check shipping information" to the Package Management menu
* Added the setting "Scan destination location once" to the Warehouse Operations menu
* Added the setting "Prohibition on updating inventory" to the Instant Inventory menu
* Added "Hide product's quantity" and "Hide Apply button" settings in the Inventory Adjustments menu
* Fixed tests
16.0.1.3.0 (2023-06-26)
***********************
* Added the setting "Force pack" to the Package Management menu
* Added the setting "Show quantity dialog first" to the Create SO and Create PO menus
* Added Wave Picking Menu
* Renamed the "Force destination package scan“ setting to “Confirm destination package“
* Added setting “Use reusable packages“ to Cluster picking menu
16.0.1.2.0 (2023-03-06)
***********************
* Added RFID menu
* Added the barcode of the Sale order name to the Picking Operations report for outgoing transfers
* Added "Order Recheck" menu
16.0.1.1.0 (2022-12-23)
***********************
* Added the setting "Save transfer after exit" to the Internal Transfers menu
* Added the setting "Allow creating new packages" to menus Instant Inventory, Batch Picking, Cluster Picking, Internal Transfers, and all Operation Types
* Added the ability to move pallets

View file

@ -0,0 +1,59 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from . import models
from . import report
from odoo import api, SUPERUSER_ID
def _post_init_hook(cr, registry):
"""
This hook updates Ventor Settings in Operation Types
And adds to all users to Ventor - Administrator Role
"""
env = api.Environment(cr, SUPERUSER_ID, {})
users_model = env['res.users']
values = [(4, user.id) for user in users_model.search([])]
env.ref('ventor_base.ventor_role_admin').users = values
cr.execute(
"""
UPDATE stock_picking_type
SET
change_destination_location = True,
show_next_product = CASE code when 'incoming' THEN False ELSE True END
"""
)
users = users_model.with_context(active_test=False).search(
[
('allowed_warehouse_ids', '=', False),
('share', '=', False)
]
)
warehouses = env['stock.warehouse'].with_context(active_test=False).search([])
for user in users:
user.allowed_warehouse_ids = [(6, 0, warehouses.ids)]
group_settings = env['res.config.settings'].default_get(
[
'group_stock_tracking_lot',
]
)
if group_settings.get('group_stock_tracking_lot'):
ventor_packages_settings = env['ventor.option.setting'].search(
[
('technical_name', '=', 'manage_packages'),
]
)
ventor_packages_settings.value = env.ref('ventor_base.bool_true')
if group_settings.get('group_stock_tracking_owner'):
ventor_owner_settings = env['ventor.option.setting'].search(
[
('technical_name', '=', 'manage_product_owner'),
]
)
ventor_owner_settings.value = env.ref('ventor_base.bool_true')

View file

@ -0,0 +1,40 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
{
'name': 'Ventor Base',
'version': '16.0.1.4.0',
'author': 'VentorTech',
'website': 'https://ventor.tech/',
'license': 'LGPL-3',
'installable': True,
'images': ['static/description/main_banner.png'],
'summary': 'Base module that allow relation between Ventor modules',
'depends': [
'base',
'stock',
'stock_picking_batch',
],
'data': [
'security/groups.xml',
'security/ir.model.access.csv',
'data/ventor_setting.xml',
'data/ventor_option_setting.xml',
'data/ventor_sequence_data.xml',
'report/report_stockpicking_operations.xml',
'views/res_config.xml',
'views/res_users.xml',
'views/stock_location.xml',
'views/stock_picking.xml',
'views/stock_quant.xml',
'views/stock_warehouse.xml',
'views/ventor_option_setting.xml',
'views/pallet_transfer.xml',
],
'post_init_hook': '_post_init_hook',
'assets': {
'web.assets_backend': [
'ventor_base/static/src/**/*',
],
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Sequences for Pallet Transfers-->
<record id="sequence_pallet_transfer" model="ir.sequence">
<field name="name">Pallet Transfers</field>
<field name="code">pallet.transfer</field>
<field name="prefix">PT/</field>
<field name="padding">5</field>
<field name="number_next">1</field>
<field name="number_increment">1</field>
<field name="company_id"></field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="bool_true" model="ventor.setting.value">
<field name="setting_type">bool</field>
<field name="setting_value">True</field>
</record>
<record id="bool_false" model="ventor.setting.value">
<field name="setting_type">bool</field>
<field name="setting_value">False</field>
</record>
<record id="always_create_backorder" model="ventor.setting.value">
<field name="setting_type">behavior_on_backorder_creation</field>
<field name="setting_value">Always Create Backorder</field>
</record>
<record id="never_create_backorder" model="ventor.setting.value">
<field name="setting_type">behavior_on_backorder_creation</field>
<field name="setting_value">Never Create Backorder</field>
</record>
<record id="ask_me_every_time" model="ventor.setting.value">
<field name="setting_type">behavior_on_backorder_creation</field>
<field name="setting_value">Ask Me Every Time</field>
</record>
<record id="always_create_backorder_split" model="ventor.setting.value">
<field name="setting_type">behavior_on_split_operation</field>
<field name="setting_value">Always Split the Line</field>
</record>
<record id="never_create_backorder_split" model="ventor.setting.value">
<field name="setting_type">behavior_on_split_operation</field>
<field name="setting_value">Always Move Less Items</field>
</record>
<record id="ask_me_every_time_split" model="ventor.setting.value">
<field name="setting_type">behavior_on_split_operation</field>
<field name="setting_value">Ask Me Every Time</field>
</record>
<record id="save_transfer" model="ventor.setting.value">
<field name="setting_type">save_transfer_after_exit</field>
<field name="setting_value">Save transfer</field>
</record>
<record id="cancel_transfer" model="ventor.setting.value">
<field name="setting_type">save_transfer_after_exit</field>
<field name="setting_value">Cancel transfer</field>
</record>
</odoo>

View file

@ -0,0 +1,35 @@
Ventor Base
===========
|
**Base module that allow relation between Ventor modules**
Change Log
##########
|
* 16.0.1.4.0 (2023-11-04)
- Added the setting "Check shipping information" to the Package Management menu
- Added the setting "Scan destination location once" to the Warehouse Operations menu
- Added the setting "Prohibition on updating inventory" to the Instant Inventory menu
- Added "Hide product's quantity" and "Hide Apply button" settings in the Inventory Adjustments menu
- Fixed tests
* 16.0.1.3.0 (2023-06-26)
- Added the setting "Force pack" to the Package Management menu
- Added the setting "Show quantity dialog first" to the Create SO and Create PO menus
- Added Wave Picking Menu
- Renamed the "Force destination package scan“ setting to “Confirm destination package“
- Added setting “Use reusable packages“ to Cluster picking menu
* 16.0.1.2.0 (2023-03-06)
- Added RFID menu
- Added the barcode of the Sale order name to the Picking Operations report for outgoing transfers
- Added "Order Recheck" menu
* 16.0.1.1.0 (2022-12-23)
- Added the setting "Save transfer after exit" to the Internal Transfers menu
- Added the setting "Allow creating new packages" to menus Instant Inventory, Batch Picking, Cluster Picking, Internal Transfers, and all Operation Types
- Added the ability to move pallets

View file

@ -0,0 +1,741 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ventor_base
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-18 13:43+0000\n"
"PO-Revision-Date: 2022-08-18 13:43+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: ventor_base
#: code:addons/ventor_base/models/stock_picking.py:0
#, python-format
msgid ""
"'Autocomplete item quantity' is available only if 'Change destination "
"location' is enabled"
msgstr ""
#. module: ventor_base
#: code:addons/ventor_base/models/stock_picking.py:0
#, python-format
msgid ""
"'Change source location' is available only if 'Confirm source location' is "
"enabled"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "<span class=\"o_form_label\">Custom Build Name</span>"
msgstr "<span class=\"o_form_label\">Custom Build Name</span>"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "<span class=\"o_form_label\">Custom Mobile Logo</span>"
msgstr "<span class=\"o_form_label\">Custom Mobile Logo</span>"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Add Outgoing Routing strategy options (sort locations)"
msgstr "Add Outgoing Routing strategy options (sort locations)"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Additional Customisation"
msgstr "Additional Customisation"
#. module: ventor_base
#: model:res.groups,name:ventor_base.ventor_role_admin
msgid "Administrator"
msgstr "Administrator"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__manage_product_owner
msgid ""
"Allow scan product owner. You can specify product owner while moving items. "
"Working only with 'Consignment' setting on Odoo side"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__allowed_warehouse_ids
msgid "Allowed Warehouses"
msgstr "Allowed Warehouses"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__transfer_more_items
msgid "Allows moving more items than expected (for example kg of meat, etc)"
msgstr "Allows moving more items than expected (for example kg of meat, etc)"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_backorder_creation__always_create_backorder
msgid "Always Create Backorder"
msgstr "Always Create Backorder"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_split_operation__always_move_less_items
msgid "Always Move Less Items"
msgstr "Always Move Less Items"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_split_operation__always_split_line
msgid "Always Split the Line"
msgstr "Always Split the Line"
#. module: ventor_base
#: code:addons/ventor_base/models/res_company.py:0
#, python-format
msgid ""
"Apparently, the logotype is not a .png file or the file was incorrectly "
"converted to .png format"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__apply_default_lots
msgid "Apply default lots and serials"
msgstr "Apply default lots and serials"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__apply_quantity_automatically
msgid "Apply quantity automatically"
msgstr "Apply quantity automatically"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_backorder_creation__ask_me_every_time
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_split_operation__ask_me_every_time
msgid "Ask Me Every Time"
msgstr "Ask Me Every Time"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__autocomplete_the_item_quantity_field
msgid "Autocomplete item quantity"
msgstr "Autocomplete item quantity"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__autocomplete_the_item_quantity_field
msgid ""
"Automatically insert expected quantity. No need to enter the quantity of "
"goods using the keyboard or using scanning"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__apply_quantity_automatically
msgid ""
"Automatically validate the line after scanning a destination location. "
"Warning: you have to insert QTY first before destination location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__base_version
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Base Module Version"
msgstr "Base Module Version"
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_batch_picking_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__batch_picking
#: model:ir.ui.menu,name:ventor_base.ventor_batch_picking_app_menu
msgid "Batch Picking"
msgstr "Batch Izbor"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_picking_wave
msgid "Batch Picking Menu"
msgstr "Batch Izbor Menu"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_picking_wave_allow_done
msgid "Batch Picking: Close batch picking"
msgstr "Batch Izbor: Close batch picking"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__behavior_on_backorder_creation
msgid "Behavior On Backorder Creation"
msgstr "Behavior On Backorder Creation"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__behavior_on_split_operation
msgid "Behavior On Split Operation"
msgstr "Behavior On Split Operation"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__value_type__bool
msgid "Boolean"
msgstr "Logički"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__change_destination_location
msgid "Change destination location"
msgstr "Change destination location"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__change_source_location
msgid "Change source location"
msgstr "Change source location"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__check_shipping_information
msgid "Check shipping information"
msgstr "Check shipping information"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__behavior_on_backorder_creation
msgid ""
"Choose how to process backorders. You can always create backorders, always "
"ignore backorders or choose it all the time (default)"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__behavior_on_split_operation
msgid ""
"Choose how to process less product qty than initial. You can always split "
"the line, always move less items or choose it all the time(default)"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_cluster_picking_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__cluster_picking
#: model:ir.ui.menu,name:ventor_base.ventor_cluster_picking_app_menu
msgid "Cluster Picking"
msgstr "Cluster Izbor"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_res_company
msgid "Companies"
msgstr "Kompanije"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_res_config_settings
msgid "Config Settings"
msgstr "Postavke"
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_configs_action
msgid "Configuration"
msgstr "Konfiguracija"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_destination_location
msgid "Confirm destination location"
msgstr "Confirm destination location"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_product
msgid "Confirm product"
msgstr "Confirm product"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_source_location
msgid "Confirm source location"
msgstr "Confirm source location"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_source_package
msgid "Confirm source package"
msgstr "Confirm source package"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_create_purchase_order
msgid "Create Purchase Order Menu"
msgstr "Create Purchase Order Menu"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_create_sales_order
msgid "Create Sales Order Menu"
msgstr "Create Sales Order Menu"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__custom_package_name
msgid "Custom package name"
msgstr "Custom package name"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_debug
msgid "Debug: Technical Features"
msgstr "Debug: Technical Features"
#. module: ventor_base
#: model:res.groups,comment:ventor_base.merp_manage_ventor_configuration_app
msgid ""
"Enable to see new root menu \"Ventor Configuration\" \n"
" that will allow to define global Ventor settings \n"
" from the Odoo interface."
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_external_management
msgid "External Transfers Menu"
msgstr "External Transfers Menu"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_company__force_lot_validation_on_inventory_adjustment
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__force_lot_validation_on_inventory_adjustment
msgid "Force Lot Validation on Inventory Adjustment"
msgstr "Force Lot Važećiation on Inventory Adjustment"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__scan_destination_package
msgid "Force destination package scan"
msgstr "Force destination package scan"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__ventor_global_settings
msgid "Global Settings"
msgstr "Global Settings"
#. module: ventor_base
#: model:ir.ui.menu,name:ventor_base.ventor_settings_app_menu
msgid "Global Ventor Settings"
msgstr "Global Ventor Settings"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_location_search
msgid "Group by..."
msgstr "Grupiši po..."
#. module: ventor_base
#: model:res.groups,comment:ventor_base.merp_menu_allow_changing_settings
msgid ""
"If it's checked, the manual settings (defined on device by this user) \n"
" will be used instead Global Ventor Settings in Odoo. \n"
" If it's unchecked the user will not be able to modify settings on the \n"
" device manually. Global Ventor Settings will be used instead."
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__apply_default_lots
msgid ""
"If it's on, you don't need to scan lot number to confirm it. On receipts the"
" app will create default Odoo lots and apply them to the product. On "
"delivery zone you don't need to confirm lots and they will be taken Odoo by "
"default"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__check_shipping_information
msgid ""
"If the setting is active the user can edit shipping information before "
"validate OUT transfer"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__scan_destination_package
msgid ""
"If this active user has to scan a destination package (pallet) all the time"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__change_destination_location
msgid ""
"If this setting is active a user can change destination location while "
"receiving to be placed at any available location"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_instant_inventory_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__instant_inventory
#: model:ir.ui.menu,name:ventor_base.ventor_instant_inventory_app_menu
msgid "Instant Inventory"
msgstr "Instant Inventory"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_instant_inventory
msgid "Instant Inventory Menu"
msgstr "Instant Inventory Menu"
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_internal_transfers_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__internal_transfers
#: model:ir.ui.menu,name:ventor_base.ventor_internal_transfers_app_menu
msgid "Internal Transfers"
msgstr "Interni prenosi"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_instant_move
msgid "Internal Transfers Menu"
msgstr "Internal Transfers Menu"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__inventory_adjustments
msgid "Inventory Adjustments"
msgstr "Inventure"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_inventory_adjustments
msgid "Inventory Adjustments Menu"
msgstr "Inventory Adjustments Menu"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_inventory_allow_ready_state
msgid "Inventory Adjustments: Waiting for Validation"
msgstr "Inventory Adjustments: Waiting for Važećiation"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_location
msgid "Inventory Locations"
msgstr "Lokacije inventure"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Inventory settings"
msgstr "Inventory settings"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__is_consignment_enabled
msgid "Is Consignment Enabled"
msgstr "Is Consignment Enabled"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_warehouse__is_internal
msgid "Is Internal Warehouse"
msgstr "Is Internal Warehouse"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__is_package_tracking_enabled
msgid "Is Package Tracking Enabled"
msgstr "Is Paket Tracking Enabled"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__is_stock_production_lot_enabled
msgid "Is Stock Production Lot Enabled"
msgstr "Is Zalihe Production Lot Enabled"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_res_users__allowed_warehouse_ids
msgid "List of all warehouses user has access to"
msgstr "List of all warehouses user has access to"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_manufacturing
msgid "MO and WO management"
msgstr "MO and WO management"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_manage_ventor_configuration_app
msgid "Manage Ventor Configuration app"
msgstr "Manage Ventor Configuration app"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__transfer_more_items
msgid "Move more than planned"
msgstr "Move more than planned"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.res_user_form
msgid "Multi Warehouses"
msgstr "Multi Warehouses"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_backorder_creation__never_create_backorder
msgid "Never Create Backorder"
msgstr "Never Create Backorder"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__module_outgoing_routing
msgid "Outgoing Routing"
msgstr "Outgoing Routing"
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_package_management_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__package_management
#: model:ir.ui.menu,name:ventor_base.ventor_package_management_app_menu
msgid "Package Management"
msgstr "Paket Management"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_package_management
msgid "Package Management Menu"
msgstr "Paket Management Menu"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_picking_type
msgid "Picking Type"
msgstr "Vrsta dokumenta"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__show_next_product
msgid ""
"Product field will show the next product to be picked. Use the setting "
"during picking and delivery. It is recommended to disable the setting for "
"the reception area"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_putaway_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__putaway
#: model:ir.ui.menu,name:ventor_base.ventor_putaway_app_menu
msgid "Putaway"
msgstr "Putaway"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_putaway
msgid "Putaway Menu"
msgstr "Putaway Menu"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_quant
msgid "Quants"
msgstr "Količine"
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__quick_info
msgid "Quick Info"
msgstr "Quick Info"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_info
msgid "Quick Info Menu"
msgstr "Quick Info Menu"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_allow_update_product_on_hand
msgid "Quick Info: Update product on hand"
msgstr "Quick Info: Update product on hand"
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_quick_info_action
#: model:ir.ui.menu,name:ventor_base.ventor_quick_info_app_menu
msgid "Quick info"
msgstr "Quick info"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__manage_packages
msgid ""
"Scan source (destination) packages right after scanning source (destination) location. Use it if you move from one package to another or pick items from packages or pallets. Works only if package management settings is active on Odoo side.\n"
"\n"
" If you want to use Show packages fields, you must turn on setting 'Packages' in inventory settings"
msgstr ""
#. module: ventor_base
#: model:ir.ui.menu,name:ventor_base.ventor_app_settings
msgid "Settings"
msgstr "Postavke"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__show_print_attachment_button
msgid "Show Print attachments button"
msgstr "Show Štampaj attachments button"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__manage_product_owner
msgid "Show Product Owner field"
msgstr "Show Product Owner field"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__show_put_in_pack_button
msgid "Show Put in pack button"
msgstr "Show Put in pack button"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__show_next_product
msgid "Show next product"
msgstr "Show next product"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__manage_packages
msgid "Show packages fields"
msgstr "Show packages fields"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__add_barcode_on_view
msgid "Show the Location barcode field on the form"
msgstr "Show the Location barcode field on the form"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__show_print_attachment_button
msgid ""
"Showing the Print attachments button in the toolbar instead of keeping it in"
" the hidden menu"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__show_put_in_pack_button
msgid ""
"Showing the Put in pack button in the toolbar instead of keeping it in the "
"hidden menu"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_destination_location
msgid ""
"The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of destination location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_product
msgid ""
"The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of product."
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_source_location
msgid ""
"The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of source location"
msgstr ""
#. module: ventor_base
#: model:res.groups,comment:ventor_base.merp_user_validate_inventory_adjustment
msgid "The group allows Inventory/User to validate inventory"
msgstr "The group allows Inventory/User to validate inventory"
#. module: ventor_base
#: code:addons/ventor_base/models/res_company.py:0
#, python-format
msgid "The logotype can't be less than {}x{} px."
msgstr "The logotype can't be less than {}x{} px."
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Use it to activate barcodes for the Community version"
msgstr "Use it to activate barcodes for the Community version"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_allow_changing_settings
msgid "Use local user device settings"
msgstr "Use local user device settings"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__ventor_user_settings
#: model:ir.ui.menu,name:ventor_base.ventor_app_user_settings_menu
msgid "User Settings"
msgstr "Korisničke postavke"
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__change_source_location
msgid ""
"User can change default source location to pick item from another location. "
"Works only if 'Confirm source location' setting is active"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_source_package
msgid ""
"User has to scan a barcode of source package. The dot next to the field gets"
" yellow color means user has to confirm it"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_res_users
msgid "Users"
msgstr "Korisnici"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_user_validate_inventory_adjustment
msgid "Validate Inventory"
msgstr "Vrednovanje zaliha"
#. module: ventor_base
#: model:ir.module.category,name:ventor_base.module_category_merp_access_application
msgid "Ventor Access Rights"
msgstr "Ventor Access Rights"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_company__logotype_file
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__logotype_file
msgid "Ventor Application Logo File"
msgstr "Ventor Application Logo File"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Ventor Application modules"
msgstr "Ventor Application modules"
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__ventor_base_version
msgid "Ventor Base Version"
msgstr "Ventor Base Version"
#. module: ventor_base
#: model:ir.ui.menu,name:ventor_base.ventor_app_base_menu
#: model_terms:ir.ui.view,arch_db:ventor_base.ventor_stock_picking_form
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Ventor Configuration"
msgstr "Ventor Configuration"
#. module: ventor_base
#: model:ir.module.category,name:ventor_base.module_category_merp_menu_application
msgid "Ventor Menu Management"
msgstr "Ventor Menu Management"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_ventor_option_setting
msgid "Ventor Option Setting"
msgstr "Ventor Option Setting"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.res_user_form
msgid "Ventor Preferences"
msgstr "Ventor Preferences"
#. module: ventor_base
#: model:ir.module.category,name:ventor_base.module_category_ventor_roles
msgid "Ventor Roles"
msgstr "Ventor Roles"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_ventor_setting_value
msgid "Ventor Setting Value"
msgstr "Ventor Setting Value"
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_warehouse
#: model:ir.model.fields,field_description:ventor_base.field_stock_location__warehouse_id
#: model_terms:ir.ui.view,arch_db:ventor_base.view_location_search
msgid "Warehouse"
msgstr "Skladište"
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_stock_picking_action
#: model:ir.ui.menu,name:ventor_base.ventor_wh_operations_app_menu
msgid "Warehouse Operations"
msgstr "Warehouse Operations"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_warehouse_operations
msgid "Warehouse Operations Menu"
msgstr "Warehouse Operations Menu"
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_allow_applying_all_qty_of_product
msgid "Warehouse Operations: Allow applying all qty of product"
msgstr "Warehouse Operations: Allow applying all qty of product"
#. module: ventor_base
#: model:res.groups,name:ventor_base.ventor_role_wh_manager
msgid "Warehouse manager"
msgstr "Warehouse manager"
#. module: ventor_base
#: model:res.groups,name:ventor_base.ventor_role_wh_worker
msgid "Warehouse worker"
msgstr "Warehouse worker"
#. module: ventor_base
#: code:addons/ventor_base/models/stock_picking.py:0
#: code:addons/ventor_base/models/stock_picking.py:0
#, python-format
msgid "Warning"
msgstr "Upozorenje"
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.res_user_form
msgid ""
"Warning! If the user is Inventory / Administrator, \n"
" the Allowed Warehouses configuration is ignored and \n"
" the user will still be able to see all warehouses"
msgstr ""
#. module: ventor_base
#: code:addons/ventor_base/models/stock_quant.py:0
#, python-format
msgid "You need to supply a Lot/Serial number for product: %s"
msgstr "You need to supply a Lot/Serial number for product: %s"

View file

@ -0,0 +1,741 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * ventor_base
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-18 13:43+0000\n"
"PO-Revision-Date: 2022-08-18 13:43+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: ventor_base
#: code:addons/ventor_base/models/stock_picking.py:0
#, python-format
msgid ""
"'Autocomplete item quantity' is available only if 'Change destination "
"location' is enabled"
msgstr ""
#. module: ventor_base
#: code:addons/ventor_base/models/stock_picking.py:0
#, python-format
msgid ""
"'Change source location' is available only if 'Confirm source location' is "
"enabled"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "<span class=\"o_form_label\">Custom Build Name</span>"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "<span class=\"o_form_label\">Custom Mobile Logo</span>"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Add Outgoing Routing strategy options (sort locations)"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Additional Customisation"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.ventor_role_admin
msgid "Administrator"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__manage_product_owner
msgid ""
"Allow scan product owner. You can specify product owner while moving items. "
"Working only with 'Consignment' setting on Odoo side"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__allowed_warehouse_ids
msgid "Allowed Warehouses"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__transfer_more_items
msgid "Allows moving more items than expected (for example kg of meat, etc)"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_backorder_creation__always_create_backorder
msgid "Always Create Backorder"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_split_operation__always_move_less_items
msgid "Always Move Less Items"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_split_operation__always_split_line
msgid "Always Split the Line"
msgstr ""
#. module: ventor_base
#: code:addons/ventor_base/models/res_company.py:0
#, python-format
msgid ""
"Apparently, the logotype is not a .png file or the file was incorrectly "
"converted to .png format"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__apply_default_lots
msgid "Apply default lots and serials"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__apply_quantity_automatically
msgid "Apply quantity automatically"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_backorder_creation__ask_me_every_time
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_split_operation__ask_me_every_time
msgid "Ask Me Every Time"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__autocomplete_the_item_quantity_field
msgid "Autocomplete item quantity"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__autocomplete_the_item_quantity_field
msgid ""
"Automatically insert expected quantity. No need to enter the quantity of "
"goods using the keyboard or using scanning"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__apply_quantity_automatically
msgid ""
"Automatically validate the line after scanning a destination location. "
"Warning: you have to insert QTY first before destination location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__base_version
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Base Module Version"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_batch_picking_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__batch_picking
#: model:ir.ui.menu,name:ventor_base.ventor_batch_picking_app_menu
msgid "Batch Picking"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_picking_wave
msgid "Batch Picking Menu"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_picking_wave_allow_done
msgid "Batch Picking: Close batch picking"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__behavior_on_backorder_creation
msgid "Behavior On Backorder Creation"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__behavior_on_split_operation
msgid "Behavior On Split Operation"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__value_type__bool
msgid "Boolean"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__change_destination_location
msgid "Change destination location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__change_source_location
msgid "Change source location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__check_shipping_information
msgid "Check shipping information"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__behavior_on_backorder_creation
msgid ""
"Choose how to process backorders. You can always create backorders, always "
"ignore backorders or choose it all the time (default)"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__behavior_on_split_operation
msgid ""
"Choose how to process less product qty than initial. You can always split "
"the line, always move less items or choose it all the time(default)"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_cluster_picking_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__cluster_picking
#: model:ir.ui.menu,name:ventor_base.ventor_cluster_picking_app_menu
msgid "Cluster Picking"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_res_company
msgid "Companies"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_configs_action
msgid "Configuration"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_destination_location
msgid "Confirm destination location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_product
msgid "Confirm product"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_source_location
msgid "Confirm source location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__confirm_source_package
msgid "Confirm source package"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_create_purchase_order
msgid "Create Purchase Order Menu"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_create_sales_order
msgid "Create Sales Order Menu"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__custom_package_name
msgid "Custom package name"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_debug
msgid "Debug: Technical Features"
msgstr ""
#. module: ventor_base
#: model:res.groups,comment:ventor_base.merp_manage_ventor_configuration_app
msgid ""
"Enable to see new root menu \"Ventor Configuration\" \n"
" that will allow to define global Ventor settings \n"
" from the Odoo interface."
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_external_management
msgid "External Transfers Menu"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_company__force_lot_validation_on_inventory_adjustment
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__force_lot_validation_on_inventory_adjustment
msgid "Force Lot Validation on Inventory Adjustment"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__scan_destination_package
msgid "Force destination package scan"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__ventor_global_settings
msgid "Global Settings"
msgstr ""
#. module: ventor_base
#: model:ir.ui.menu,name:ventor_base.ventor_settings_app_menu
msgid "Global Ventor Settings"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_location_search
msgid "Group by..."
msgstr ""
#. module: ventor_base
#: model:res.groups,comment:ventor_base.merp_menu_allow_changing_settings
msgid ""
"If it's checked, the manual settings (defined on device by this user) \n"
" will be used instead Global Ventor Settings in Odoo. \n"
" If it's unchecked the user will not be able to modify settings on the \n"
" device manually. Global Ventor Settings will be used instead."
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__apply_default_lots
msgid ""
"If it's on, you don't need to scan lot number to confirm it. On receipts the"
" app will create default Odoo lots and apply them to the product. On "
"delivery zone you don't need to confirm lots and they will be taken Odoo by "
"default"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__check_shipping_information
msgid ""
"If the setting is active the user can edit shipping information before "
"validate OUT transfer"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__scan_destination_package
msgid ""
"If this active user has to scan a destination package (pallet) all the time"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__change_destination_location
msgid ""
"If this setting is active a user can change destination location while "
"receiving to be placed at any available location"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_instant_inventory_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__instant_inventory
#: model:ir.ui.menu,name:ventor_base.ventor_instant_inventory_app_menu
msgid "Instant Inventory"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_instant_inventory
msgid "Instant Inventory Menu"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_internal_transfers_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__internal_transfers
#: model:ir.ui.menu,name:ventor_base.ventor_internal_transfers_app_menu
msgid "Internal Transfers"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_instant_move
msgid "Internal Transfers Menu"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__inventory_adjustments
msgid "Inventory Adjustments"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_inventory_adjustments
msgid "Inventory Adjustments Menu"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_inventory_allow_ready_state
msgid "Inventory Adjustments: Waiting for Validation"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_location
msgid "Inventory Locations"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Inventory settings"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__is_consignment_enabled
msgid "Is Consignment Enabled"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_warehouse__is_internal
msgid "Is Internal Warehouse"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__is_package_tracking_enabled
msgid "Is Package Tracking Enabled"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__is_stock_production_lot_enabled
msgid "Is Stock Production Lot Enabled"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_res_users__allowed_warehouse_ids
msgid "List of all warehouses user has access to"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_manufacturing
msgid "MO and WO management"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_manage_ventor_configuration_app
msgid "Manage Ventor Configuration app"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__transfer_more_items
msgid "Move more than planned"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.res_user_form
msgid "Multi Warehouses"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__stock_picking_type__behavior_on_backorder_creation__never_create_backorder
msgid "Never Create Backorder"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__module_outgoing_routing
msgid "Outgoing Routing"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_package_management_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__package_management
#: model:ir.ui.menu,name:ventor_base.ventor_package_management_app_menu
msgid "Package Management"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_package_management
msgid "Package Management Menu"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_picking_type
msgid "Picking Type"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__show_next_product
msgid ""
"Product field will show the next product to be picked. Use the setting "
"during picking and delivery. It is recommended to disable the setting for "
"the reception area"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_putaway_action
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__putaway
#: model:ir.ui.menu,name:ventor_base.ventor_putaway_app_menu
msgid "Putaway"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_putaway
msgid "Putaway Menu"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_quant
msgid "Quants"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields.selection,name:ventor_base.selection__ventor_option_setting__action_type__quick_info
msgid "Quick Info"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_info
msgid "Quick Info Menu"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_allow_update_product_on_hand
msgid "Quick Info: Update product on hand"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_quick_info_action
#: model:ir.ui.menu,name:ventor_base.ventor_quick_info_app_menu
msgid "Quick info"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__manage_packages
msgid ""
"Scan source (destination) packages right after scanning source (destination) location. Use it if you move from one package to another or pick items from packages or pallets. Works only if package management settings is active on Odoo side.\n"
"\n"
" If you want to use Show packages fields, you must turn on setting 'Packages' in inventory settings"
msgstr ""
#. module: ventor_base
#: model:ir.ui.menu,name:ventor_base.ventor_app_settings
msgid "Settings"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__show_print_attachment_button
msgid "Show Print attachments button"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__manage_product_owner
msgid "Show Product Owner field"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__show_put_in_pack_button
msgid "Show Put in pack button"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__show_next_product
msgid "Show next product"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_stock_picking_type__manage_packages
msgid "Show packages fields"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__add_barcode_on_view
msgid "Show the Location barcode field on the form"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__show_print_attachment_button
msgid ""
"Showing the Print attachments button in the toolbar instead of keeping it in"
" the hidden menu"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__show_put_in_pack_button
msgid ""
"Showing the Put in pack button in the toolbar instead of keeping it in the "
"hidden menu"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_destination_location
msgid ""
"The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of destination location"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_product
msgid ""
"The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of product."
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_source_location
msgid ""
"The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of source location"
msgstr ""
#. module: ventor_base
#: model:res.groups,comment:ventor_base.merp_user_validate_inventory_adjustment
msgid "The group allows Inventory/User to validate inventory"
msgstr ""
#. module: ventor_base
#: code:addons/ventor_base/models/res_company.py:0
#, python-format
msgid "The logotype can't be less than {}x{} px."
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Use it to activate barcodes for the Community version"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_allow_changing_settings
msgid "Use local user device settings"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__ventor_user_settings
#: model:ir.ui.menu,name:ventor_base.ventor_app_user_settings_menu
msgid "User Settings"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__change_source_location
msgid ""
"User can change default source location to pick item from another location. "
"Works only if 'Confirm source location' setting is active"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,help:ventor_base.field_stock_picking_type__confirm_source_package
msgid ""
"User has to scan a barcode of source package. The dot next to the field gets"
" yellow color means user has to confirm it"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_res_users
msgid "Users"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_user_validate_inventory_adjustment
msgid "Validate Inventory"
msgstr ""
#. module: ventor_base
#: model:ir.module.category,name:ventor_base.module_category_merp_access_application
msgid "Ventor Access Rights"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_company__logotype_file
#: model:ir.model.fields,field_description:ventor_base.field_res_config_settings__logotype_file
msgid "Ventor Application Logo File"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Ventor Application modules"
msgstr ""
#. module: ventor_base
#: model:ir.model.fields,field_description:ventor_base.field_res_users__ventor_base_version
msgid "Ventor Base Version"
msgstr ""
#. module: ventor_base
#: model:ir.ui.menu,name:ventor_base.ventor_app_base_menu
#: model_terms:ir.ui.view,arch_db:ventor_base.ventor_stock_picking_form
#: model_terms:ir.ui.view,arch_db:ventor_base.view_stock_config_settings
msgid "Ventor Configuration"
msgstr ""
#. module: ventor_base
#: model:ir.module.category,name:ventor_base.module_category_merp_menu_application
msgid "Ventor Menu Management"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_ventor_option_setting
msgid "Ventor Option Setting"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.res_user_form
msgid "Ventor Preferences"
msgstr ""
#. module: ventor_base
#: model:ir.module.category,name:ventor_base.module_category_ventor_roles
msgid "Ventor Roles"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_ventor_setting_value
msgid "Ventor Setting Value"
msgstr ""
#. module: ventor_base
#: model:ir.model,name:ventor_base.model_stock_warehouse
#: model:ir.model.fields,field_description:ventor_base.field_stock_location__warehouse_id
#: model_terms:ir.ui.view,arch_db:ventor_base.view_location_search
msgid "Warehouse"
msgstr ""
#. module: ventor_base
#: model:ir.actions.act_window,name:ventor_base.ventor_stock_picking_action
#: model:ir.ui.menu,name:ventor_base.ventor_wh_operations_app_menu
msgid "Warehouse Operations"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_menu_warehouse_operations
msgid "Warehouse Operations Menu"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.merp_allow_applying_all_qty_of_product
msgid "Warehouse Operations: Allow applying all qty of product"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.ventor_role_wh_manager
msgid "Warehouse manager"
msgstr ""
#. module: ventor_base
#: model:res.groups,name:ventor_base.ventor_role_wh_worker
msgid "Warehouse worker"
msgstr ""
#. module: ventor_base
#: code:addons/ventor_base/models/stock_picking.py:0
#: code:addons/ventor_base/models/stock_picking.py:0
#, python-format
msgid "Warning"
msgstr ""
#. module: ventor_base
#: model_terms:ir.ui.view,arch_db:ventor_base.res_user_form
msgid ""
"Warning! If the user is Inventory / Administrator, \n"
" the Allowed Warehouses configuration is ignored and \n"
" the user will still be able to see all warehouses"
msgstr ""
#. module: ventor_base
#: code:addons/ventor_base/models/stock_quant.py:0
#, python-format
msgid "You need to supply a Lot/Serial number for product: %s"
msgstr ""

View file

@ -0,0 +1,13 @@
from odoo import SUPERUSER_ID, _, api
def migrate(cr, version):
env = api.Environment(cr, SUPERUSER_ID, {})
lot_for_location_setting = env.ref("ventor_base.lot_for_location_int_transfers")
lot_for_location_setting.write(
{
"description": "If it is active, you can select only lots from source location"
}
)

View file

@ -0,0 +1,16 @@
from odoo import SUPERUSER_ID, _, api
def migrate(cr, version):
env = api.Environment(cr, SUPERUSER_ID, {})
ventor_roles_warehouse_worker = env.ref('ventor_base.ventor_role_wh_worker')
ventor_roles_warehouse_worker.write(
{
'implied_ids': [
(4, env.ref('ventor_base.merp_order_recheck_menu').id),
(4, env.ref('ventor_base.merp_rfid_menu').id),
]
}
)

View file

@ -0,0 +1,15 @@
from odoo import SUPERUSER_ID, _, api
def migrate(cr, version):
env = api.Environment(cr, SUPERUSER_ID, {})
ventor_roles_warehouse_worker = env.ref('ventor_base.ventor_role_wh_worker')
ventor_roles_warehouse_worker.write(
{
'implied_ids': [
(4, env.ref('ventor_base.merp_wave_picking_menu').id),
]
}
)

View file

@ -0,0 +1,34 @@
from odoo import SUPERUSER_ID, _, api
def migrate(cr, version):
env = api.Environment(cr, SUPERUSER_ID, {})
allow_validate_less = env.ref("ventor_base.allow_validate_less")
allow_validate_less.write(
{
"name": "Validate uncompleted orders",
"description": "User will be able to validate the order even if not all items were found"
}
)
value = {
"name": "Confirm destination package",
"description": "User has to scan a barcode of destination package. "
"The dot next to the field gets yellow color means user has to confirm it"
}
scan_destination_package_batch_picking = env.ref(
"ventor_base.scan_destination_package_batch_picking",
False,
)
scan_destination_package_cluster_picking = env.ref(
"ventor_base.scan_destination_package_cluster_picking",
False,
)
if scan_destination_package_batch_picking:
scan_destination_package_batch_picking.write(value)
if scan_destination_package_cluster_picking:
scan_destination_package_cluster_picking.write(value)

View file

@ -0,0 +1,12 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from . import stock_location
from . import stock_picking
from . import stock_quant
from . import res_company
from . import res_config
from . import res_users
from . import stock_warehouse
from . import ventor_option_setting
from . import pallet_transfer

View file

@ -0,0 +1,37 @@
# Copyright 2022 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
# Odoo:
from odoo import _, api, fields, models
class PalletTransfer(models.Model):
_name = "pallet.transfer"
_description = "All Pallet Transfers"
name = fields.Char(
string="Transfer Name",
required=True,
default="New",
)
pallet_name = fields.Char(string="Pallet Name")
pallet_id = fields.Many2one("stock.location", string="Pallets")
source_location_id = fields.Many2one("stock.location", string="Source Location")
destination_location_id = fields.Many2one("stock.location", string="Destination Location")
def update_value(self):
self.write(
{
"name": self.env["ir.sequence"].next_by_code("pallet.transfer"),
"pallet_name": self.pallet_id.name,
"source_location_id": self.pallet_id.location_id,
}
)
self.pallet_id.location_id = self.destination_location_id
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
if res:
res.update_value()
return res

View file

@ -0,0 +1,58 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo import _, models, fields
from odoo.exceptions import UserError
import io
import base64
from PIL import Image
LOGOTYPE_W = 500
LOGOTYPE_H = 500
class Company(models.Model):
_inherit = 'res.company'
barcode_on_picking_document = fields.Boolean(
string='Show Sales Order Barcode on Picking document',
help='Showing a barcode of the related sales order on all printed picking documents',
)
force_lot_validation_on_inventory_adjustment = fields.Boolean(
string='Force Lot Validation on Inventory Adjustment',
)
logotype_file = fields.Binary('Ventor Application Logo File', default=False)
def _validate_logotype(self, vals):
if not vals.get('logotype_file'):
return False
dat = base64.decodebytes(vals.get('logotype_file'))
image = Image.open(io.BytesIO(dat))
if image.format.lower() != 'png':
raise UserError(
_(
'Apparently, the logotype is not a .png file'
' or the file was incorrectly converted to .png format'
)
)
if int(image.width) < LOGOTYPE_W or int(image.height) < LOGOTYPE_H:
raise UserError(
_(
'The logotype can\'t be less than {}x{} px.'.format(LOGOTYPE_W, LOGOTYPE_H)
)
)
return True
def write(self, vals):
if 'logotype_file' in vals:
self._validate_logotype(vals)
res = super(Company, self).write(vals)
return res

View file

@ -0,0 +1,182 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__)
class VentorConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
logotype_file = fields.Binary(
string='Ventor Application Logo File',
related='company_id.logotype_file',
readonly=False
)
module_outgoing_routing = fields.Boolean(
string='Outgoing Routing'
)
add_barcode_on_view = fields.Boolean(
string='Show the Location barcode field on the form',
)
base_version = fields.Char(
string='Base Module Version',
compute='_compute_base_version',
store=False,
)
barcode_on_picking_document = fields.Boolean(
string='Show Sales Order Barcode on Picking document',
readonly=False,
related='company_id.barcode_on_picking_document',
)
force_lot_validation_on_inventory_adjustment = fields.Boolean(
string='Force Lot Validation on Inventory Adjustment',
readonly=False,
related='company_id.force_lot_validation_on_inventory_adjustment',
)
custom_package_name = fields.Char(
string='Custom package name',
config_parameter='ventor_base.custom_package_name',
)
@api.depends('company_id')
def _compute_base_version(self):
self.env.cr.execute(
"SELECT latest_version FROM ir_module_module WHERE name='ventor_base'"
)
result = self.env.cr.fetchone()
full_version = result and result[0]
split_value = full_version and full_version.split('.')
self.base_version = split_value and '.'.join(split_value[-3:])
@api.model
def get_values(self):
res = super(VentorConfigSettings, self).get_values()
view_with_barcode = self.env.ref(
'ventor_base.view_location_form_inherit_additional_barcode',
raise_if_not_found=False
)
if view_with_barcode:
res['add_barcode_on_view'] = view_with_barcode.active
return res
def _set_apply_default_lots(self, previous_group):
operation_type_ids = self.env['stock.picking.type'].search([])
group_stock_production_lot = previous_group.get('group_stock_production_lot')
if (
group_stock_production_lot != self.group_stock_production_lot
and not self.group_stock_production_lot
):
operation_type_ids.apply_default_lots = False
ventor_apply_default_lots = self.env['ventor.option.setting'].search(
[
('technical_name', '=', 'apply_default_lots'),
]
)
ventor_apply_default_lots.with_context(
disable_apply_default_lots=True
).set_apply_default_lots_fields(self.group_stock_production_lot)
def _set_packages_fields(self, previous_group):
operation_type_ids = self.env['stock.picking.type'].search([])
group_stock_tracking_lot = previous_group.get('group_stock_tracking_lot')
if group_stock_tracking_lot != self.group_stock_tracking_lot:
operation_type_ids.manage_packages = self.group_stock_tracking_lot
operation_type_ids.show_put_in_pack_button = self.group_stock_tracking_lot
if not self.group_stock_tracking_lot:
operation_type_ids.show_put_in_pack_button = self.group_stock_tracking_lot
operation_type_ids.scan_destination_package = self.group_stock_tracking_lot
operation_type_ids.confirm_source_package = self.group_stock_tracking_lot
operation_type_ids.allow_creating_new_packages = self.group_stock_tracking_lot
ventor_packages_settings = self.env['ventor.option.setting'].search(
[
(
'technical_name',
'in',
(
'confirm_source_package',
'scan_destination_package',
'manage_packages',
'allow_creating_new_packages',
'pack_all_items',
'use_reusable_packages',
),
),
]
)
ventor_packages_settings.with_context(
disable_package_fields=True
).set_related_package_fields(self.group_stock_tracking_lot)
if self.group_stock_tracking_lot:
ventor_packages_settings = self.env['ventor.option.setting'].search(
[
('technical_name', '=', 'manage_packages'),
]
)
ventor_packages_settings.value = self.env.ref('ventor_base.bool_true')
def _set_manage_product_owner(self, previous_group):
operation_type_ids = self.env['stock.picking.type'].search([])
group_stock_tracking_owner = previous_group.get('group_stock_tracking_owner')
if group_stock_tracking_owner != self.group_stock_tracking_owner:
operation_type_ids.manage_product_owner = self.group_stock_tracking_owner
ventor_owner_settings = self.env['ventor.option.setting'].search(
[
('technical_name', '=', 'manage_product_owner'),
]
)
ventor_owner_settings.value = self.env.ref('ventor_base.bool_true') if self.group_stock_tracking_owner else self.env.ref('ventor_base.bool_false')
def _update_display_wave_picking_menu(self, previous_group):
group_stock_picking_wave = previous_group.get('group_stock_picking_wave')
if group_stock_picking_wave != self.group_stock_picking_wave:
merp_wave_picking_menu = self.env.ref('ventor_base.merp_wave_picking_menu')
users = self.env['res.users'].with_context(active_test=False).search([
('share', '=', False)
])
merp_wave_picking_menu.write(
{
'users': [(6, 0, users.ids)]
if self.group_stock_picking_wave
else [(5, 0, 0)],
}
)
def set_values(self):
previous_group = self.default_get(
[
'group_stock_tracking_lot',
'group_stock_tracking_owner',
'group_stock_production_lot',
'group_stock_picking_wave',
]
)
res = super(VentorConfigSettings, self).set_values()
view_with_barcode = self.env.ref('ventor_base.view_location_form_inherit_additional_barcode')
view_with_barcode.active = self.add_barcode_on_view
# Updating the values of dependent fields
self.sudo()._set_apply_default_lots(previous_group)
self.sudo()._set_packages_fields(previous_group)
self.sudo()._set_manage_product_owner(previous_group)
# Updating the menu display in Ventor for users
self.sudo()._update_display_wave_picking_menu(previous_group)
return res

View file

@ -0,0 +1,131 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
import json
from odoo import api, models, fields
class ResUsers(models.Model):
_inherit = 'res.users'
allowed_warehouse_ids = fields.Many2many(
comodel_name='stock.warehouse',
string='Allowed Warehouses',
help='List of all warehouses user has access to',
)
custom_package_name = fields.Char(
string='Custom Build Name',
compute="_compute_custom_package_name",
compute_sudo=True,
)
ventor_base_version = fields.Char(
compute="_compute_ventor_base_version",
compute_sudo=True,
readonly=True,
)
ventor_global_settings = fields.Text(
string='Global Settings',
readonly=True,
compute='_compute_global_settings'
)
ventor_user_settings = fields.Text(
string='User Settings'
)
@property
def SELF_READABLE_FIELDS(self):
readable_fields = [
'ventor_global_settings',
'ventor_user_settings',
'custom_package_name',
'ventor_base_version',
]
return super().SELF_READABLE_FIELDS + readable_fields
@property
def SELF_WRITEABLE_FIELDS(self):
writable_fields = ['ventor_user_settings']
return super().SELF_WRITEABLE_FIELDS + writable_fields
def _compute_custom_package_name(self):
custom_package_name = (
self.env["ir.config_parameter"]
.get_param("ventor_base.custom_package_name", "")
)
self.custom_package_name = custom_package_name
def _compute_ventor_base_version(self):
ventor_base_version = (
self.env["ir.module.module"]
.search([("name", "=", "ventor_base"), ("state", "=", "installed")])
.latest_version
)
for user in self:
if ventor_base_version:
user.ventor_base_version = ventor_base_version
else:
user.ventor_base_version = ""
def _compute_global_settings(self):
settings = []
for stock_picking_type in self.env['stock.picking.type'].search([]):
stock_picking_type_settings = stock_picking_type.get_warehouse_operation_settings()
if stock_picking_type.code != 'outgoing':
stock_picking_type_settings['settings'].pop('check_shipping_information')
if stock_picking_type.code != 'incoming':
stock_picking_type_settings['settings'].pop('hide_qty_to_receive')
settings.append(stock_picking_type_settings)
ventor_option_settings = self._get_ventor_option_settings()
obj = {'operation_types': settings}
obj.update(ventor_option_settings)
self.ventor_global_settings = json.dumps(
obj=obj,
indent=' ',
sort_keys=True
)
def _get_ventor_option_settings(self):
ventor_option_settings = self.env['ventor.option.setting'].sudo().get_general_settings()
if self.env.ref('ventor_base.merp_wave_picking_menu') not in self.groups_id:
ventor_option_settings.pop('wave_picking')
return ventor_option_settings
def _update_group_picking_wave_menu(self, vals):
vals = self._remove_reified_groups(vals)
if 'groups_id' in vals:
group_stock_picking_wave = self.env.ref('stock.group_stock_picking_wave')
merp_wave_picking_menu = self.env.ref('ventor_base.merp_wave_picking_menu')
for user in self:
if group_stock_picking_wave not in user.groups_id and merp_wave_picking_menu in user.groups_id:
merp_wave_picking_menu.write({'users': [(3, user.id)]})
@api.model_create_multi
def create(self, vals_list):
result = super().create(vals_list)
if not result.allowed_warehouse_ids:
result.write(
{
'allowed_warehouse_ids': [
(
6, 0, self.env["stock.warehouse"].sudo().with_context(active_test=False).search([]).ids
)
]
}
)
return result
def write(self, vals):
result = super().write(vals)
if result and 'allowed_warehouse_ids' in vals:
self.env['ir.rule'].clear_caches()
self._update_group_picking_wave_menu(vals)
return result

View file

@ -0,0 +1,14 @@
# Copyright 2021 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
# Odoo:
from odoo import api, fields, models
class StockLocation(models.Model):
_inherit = "stock.location"
# store attribute for Group By 'Warehouse', locations tree view
warehouse_id = fields.Many2one(store=True)
is_pallet = fields.Boolean(string="Is Pallet")

View file

@ -0,0 +1,299 @@
from odoo import fields, models, api, _
class StockPickingType(models.Model):
_inherit = "stock.picking.type"
allow_creating_new_packages = fields.Boolean(
string="Allow creating new packages",
help="User can create new packages by scanning a new barcode or create it manually"
)
apply_default_lots = fields.Boolean(
string="Apply default lots and serials",
help="If it's on, you don't need to scan lot number to confirm it. "
"On receipts the app will create default Odoo lots and apply them to the product. "
"On delivery zone you don't need to confirm lots and "
"they will be taken Odoo by default"
)
apply_quantity_automatically = fields.Boolean(
string="Apply quantity automatically",
help="Automatically validate the line after scanning a destination location. "
"Warning: you have to insert QTY first before destination location"
)
autocomplete_the_item_quantity_field = fields.Boolean(
string="Autocomplete item quantity",
help="Automatically insert expected quantity. No need to enter the quantity "
"of goods using the keyboard or using scanning"
)
behavior_on_backorder_creation = fields.Selection(
[
("always_create_backorder", "Always Create Backorder"),
("never_create_backorder", "Never Create Backorder"),
("ask_me_every_time", "Ask Me Every Time"),
],
string="Behavior On Backorder Creation",
default="ask_me_every_time",
required=True,
help="Choose how to process backorders. You can always create backorders, "
"always ignore backorders or choose it all the time (default)"
)
behavior_on_split_operation = fields.Selection(
[
("always_split_line", "Always Split the Line"),
("always_move_less_items", "Always Move Less Items"),
("ask_me_every_time", "Ask Me Every Time"),
],
string="Behavior On Split Operation",
compute="_compute_behavior_on_split_operation",
readonly=False,
store=True,
help="Choose how to process less product qty than initial. You can always split "
"the line, always move less items or choose it all the time(default)"
)
change_destination_location = fields.Boolean(
string="Change destination location",
help="If this setting is active a user can change destination location "
"while receiving to be placed at any available location",
)
change_source_location = fields.Boolean(
string="Change source location",
help="User can change default source location to pick item from another location. "
"Works only if 'Confirm source location' setting is active",
)
check_shipping_information = fields.Boolean(
string="Check shipping information",
help="If the setting is active the user can edit shipping information "
"before validate OUT transfer",
)
confirm_destination_location = fields.Boolean(
string="Confirm destination location",
help="The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of destination location"
)
confirm_product = fields.Boolean(
string="Confirm product",
help="The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of product."
)
confirm_source_location = fields.Boolean(
string="Confirm source location",
help="The dot next to the field gets yellow color means user has to confirm it. "
"User has to scan a barcode of source location"
)
confirm_source_package = fields.Boolean(
string="Confirm source package",
help="User has to scan a barcode of source package. "
"The dot next to the field gets yellow color means user has to confirm it"
)
hide_qty_to_receive = fields.Boolean(
string="Hide QTYs to receive",
help="Settings description: User will not see how many QTYs they need to receive."
)
is_consignment_enabled = fields.Boolean(
compute="_compute_is_consignment_enabled"
)
is_package_tracking_enabled = fields.Boolean(
compute="_compute_is_package_tracking_enabled"
)
is_stock_production_lot_enabled = fields.Boolean(
compute="_compute_is_stock_production_lot_enabled"
)
manage_packages = fields.Boolean(
string="Show packages fields",
default=lambda self: self.env.ref("stock.group_tracking_lot")
in self.env.ref("base.group_user").implied_ids,
help="Scan source (destination) packages right after scanning source (destination) "
"location. Use it if you move from one package to another or pick items from "
"packages or pallets. Works only if package management settings is active on Odoo "
"side.\n\n If you want to use Show packages fields, you must turn on setting "
"'Packages' in inventory settings",
)
manage_product_owner = fields.Boolean(
string="Show Product Owner field",
default=lambda self: self.env.ref("stock.group_tracking_owner")
in self.env.ref("base.group_user").implied_ids,
help="Allow scan product owner. You can specify product owner while moving items. "
"Working only with 'Consignment' setting on Odoo side"
)
scan_destination_location_once = fields.Boolean(
string="Scan destination location once",
help="Scan the destination location only once with the last item. "
"The destination location will be applied to all lines."
)
scan_destination_package = fields.Boolean(
string="Confirm destination package",
help="User has to scan a barcode of destination package. The dot next to the field "
"gets yellow color means user has to confirm it"
)
show_next_product = fields.Boolean(
string="Show next product",
help="Product field will show the next product to be picked. "
"Use the setting during picking and delivery. "
"It is recommended to disable the setting for the reception area",
)
show_print_attachment_button = fields.Boolean(
string="Show Print attachments button",
default=True,
help="Showing the Print attachments button in the toolbar instead of "
"keeping it in the hidden menu"
)
show_put_in_pack_button = fields.Boolean(
string="Show Put in pack button",
default=lambda self: self.env.ref("stock.group_tracking_lot")
in self.env.ref("base.group_user").implied_ids,
help="Showing the Put in pack button in the toolbar instead of "
"keeping it in the hidden menu"
)
transfer_more_items = fields.Boolean(
string="Move more than planned",
help="Allows moving more items than expected (for example kg of meat, etc)"
)
@api.depends('code')
def _compute_behavior_on_split_operation(self):
for operation_type in self:
if operation_type.code == 'incoming':
operation_type.behavior_on_split_operation = 'always_split_line'
else:
operation_type.behavior_on_split_operation = 'ask_me_every_time'
def _compute_is_consignment_enabled(self):
internal_user_groups = self.env.ref('base.group_user').implied_ids
group_tracking_owner = self.env.ref("stock.group_tracking_owner")
for item in self:
item.is_consignment_enabled = group_tracking_owner in internal_user_groups
def _compute_is_package_tracking_enabled(self):
internal_user_groups = self.env.ref('base.group_user').implied_ids
group_tracking_lot = self.env.ref("stock.group_tracking_lot")
for item in self:
item.is_package_tracking_enabled = group_tracking_lot in internal_user_groups
def _compute_is_stock_production_lot_enabled(self):
internal_user_groups = self.env.ref('base.group_user').implied_ids
group_production_lot = self.env.ref("stock.group_production_lot")
for item in self:
item.is_stock_production_lot_enabled = group_production_lot in internal_user_groups
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if 'code' in vals:
vals['show_next_product'] = vals['code'] != "incoming"
vals['change_destination_location'] = True
return super(StockPickingType, self).create(vals_list)
@api.onchange('confirm_source_location')
def _onchange_confirm_source_location(self):
if not self.confirm_source_location:
self.change_source_location = False
@api.onchange('confirm_destination_location')
def _onchange_confirm_destination_location(self):
if not self.confirm_destination_location:
self.apply_quantity_automatically = False
@api.onchange('change_source_location')
def _onchange_change_source_location(self):
if self.change_source_location and not self.confirm_source_location:
return {
'warning': {
'title': _("Warning"),
'message': _("'Change source location' is available only "
"if 'Confirm source location' is enabled")
}
}
@api.onchange('apply_quantity_automatically')
def _onchange_apply_quantity_automatically(self):
if self.apply_quantity_automatically and not self.confirm_destination_location:
return {
'warning': {
'title': _("Warning"),
'message': _("'Apply quantity automatically' is available only "
"if 'Confirm destination location' is enabled")
}
}
def write(self, vals):
res = super(StockPickingType, self).write(vals)
if 'change_source_location' in vals or 'confirm_source_location' in vals:
for stock_picking_type in self:
if stock_picking_type.change_source_location:
if not stock_picking_type.confirm_source_location:
stock_picking_type.change_source_location = False
if 'apply_quantity_automatically' in vals or 'confirm_destination_location' in vals:
for stock_picking_type in self:
if stock_picking_type.apply_quantity_automatically:
if not stock_picking_type.confirm_destination_location:
stock_picking_type.apply_quantity_automatically = False
if 'manage_packages' in vals:
for stock_picking_type in self:
if not stock_picking_type.manage_packages:
if stock_picking_type.scan_destination_package:
stock_picking_type.scan_destination_package = False
if stock_picking_type.confirm_source_package:
stock_picking_type.confirm_source_package = False
if stock_picking_type.allow_creating_new_packages:
stock_picking_type.allow_creating_new_packages = False
return res
def get_warehouse_operation_settings(self):
return {
"id": self.id,
"name": self.name,
"wh_code": self.warehouse_id.code,
"wh_name": self.warehouse_id.name,
"settings": {
"allow_creating_new_packages": self.allow_creating_new_packages,
"confirm_source_location": self.confirm_source_location,
"change_source_location": self.change_source_location,
"show_next_product": self.show_next_product,
"confirm_product": self.confirm_product,
"apply_default_lots": self.apply_default_lots,
"transfer_more_items": self.transfer_more_items,
"confirm_destination_location": self.confirm_destination_location,
"apply_quantity_automatically": self.apply_quantity_automatically,
"change_destination_location": self.change_destination_location,
"scan_destination_location_once": self.scan_destination_location_once,
"autocomplete_the_item_quantity_field": self.autocomplete_the_item_quantity_field,
"show_print_attachment_button": self.show_print_attachment_button,
"show_put_in_pack_button": self.show_put_in_pack_button,
"manage_packages": self.manage_packages,
"manage_product_owner": self.manage_product_owner,
"behavior_on_backorder_creation": self.behavior_on_backorder_creation,
"behavior_on_split_operation": self.behavior_on_split_operation,
"scan_destination_package": self.scan_destination_package,
"confirm_source_package": self.confirm_source_package,
"check_shipping_information": self.check_shipping_information,
"hide_qty_to_receive": self.hide_qty_to_receive,
}
}

View file

@ -0,0 +1,45 @@
# Copyright 2021 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class StockQuant(models.Model):
_inherit = 'stock.quant'
@api.constrains("lot_id", "inventory_quantity")
def _check_product_lot(self):
""" check product lot/serial except for stock_fix_lot """
for quant in self:
if (
not quant.inventory_quantity
or not quant.company_id.force_lot_validation_on_inventory_adjustment
or (
quant.env.context.get("skip_product_lot_check") and not quant.inventory_quantity)
):
return
if quant.tracking in ("lot", "serial") and not quant.lot_id:
raise ValidationError(
_(
"You need to supply a Lot/Serial number for product: %s",
quant.product_id.display_name,
)
)
@api.model
def user_has_groups(self, groups):
# we need to override method as we need different access group
# to be allowed to validate inventory
if (
self.env.context.get("validate_inventory")
and groups == "stock.group_stock_manager"
):
groups = "ventor_base.merp_user_validate_inventory_adjustment"
res = super(StockQuant, self).user_has_groups(groups)
return res
def _apply_inventory(self):
res = super(StockQuant, self.with_context(validate_inventory=True))._apply_inventory()
return res

View file

@ -0,0 +1,45 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo import api, models, fields
class StockWarehouse(models.Model):
_inherit = 'stock.warehouse'
is_internal = fields.Boolean(
string='Is Internal Warehouse',
)
@api.model_create_multi
def create(self, vals_list):
res = super(StockWarehouse, self).create(vals_list)
if res:
res.update_users_calculated_warehouse()
return res
def update_users_calculated_warehouse(self):
for warehouse in self:
users = self.env['res.users'].with_context(active_test=False).search([
('share', '=', False)])
wh_ids = self.env['stock.warehouse'].with_context(active_test=False).search([
('id', '!=', warehouse.id)]).ids
wh_ids.sort()
modified_user_ids = []
for user in users.with_context(active_test=False):
# Because of specifics on how Odoo working with companies on first start, we have to filter by company
user_wh_ids = user.allowed_warehouse_ids.filtered(
lambda wh: wh.company_id.id == warehouse.env.company.id
).ids
user_wh_ids.sort()
if wh_ids == user_wh_ids:
user.allowed_warehouse_ids = [(4, warehouse.id, 0)]
modified_user_ids.append(user.id)
# Because access rights are using this field, we need to invalidate cache
if modified_user_ids:
self.env['res.users'].browse(modified_user_ids).invalidate_recordset(
[
'allowed_warehouse_ids',
]
)

View file

@ -0,0 +1,268 @@
# Copyright 2022 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo import _, api, models, fields
class VentorOptionSetting(models.Model):
_name = 'ventor.option.setting'
_description = 'Ventor Option Setting'
name = fields.Char(required=True, index=True)
action_type = fields.Selection(
[
('warehouse_opration', 'Warehouse Opration'),
('package_management', 'Package Management'),
('batch_picking', 'Batch Picking'),
('wave_picking', 'Wave Picking'),
('cluster_picking', 'Cluster Picking'),
('internal_transfers', 'Internal Transfers'),
('putaway', 'Putaway'),
('instant_inventory', 'Instant Inventory'),
('inventory_adjustments', 'Inventory Adjustments'),
('quick_info', 'Quick Info'),
('scrap_management', 'Scrap Management'),
('create_so', 'Create SO'),
('create_po', 'Create PO'),
], required=True
)
description = fields.Text()
technical_name = fields.Char(required=True)
value = fields.Many2one(
'ventor.setting.value',
string='Value',
required=True,
domain="[('id', 'in', settings_dependency)]",
)
value_type = fields.Selection(
[
('bool', 'Boolean'),
('select', 'Selection'),
]
)
settings_dependency = fields.Many2many(
comodel_name='ventor.setting.value'
)
@api.onchange('value')
def _onchange_value(self):
if self.technical_name in ('confirm_source_location', 'change_source_location'):
return self._set_change_source_location()
elif self.technical_name in ('add_boxes_before_cluster', 'multiple_boxes_for_one_transfer'):
return self._set_add_boxes_before_cluster()
elif self.technical_name in (
'manage_packages',
'confirm_source_package',
'scan_destination_package',
'allow_creating_new_packages',
'pack_all_items',
'allow_validate_less',
):
return self.set_related_package_fields(self._get_group_settings_value('stock.group_tracking_lot'))
elif self.technical_name in ('manage_product_owner'):
self.set_manage_product_owner_fields(self._get_group_settings_value('stock.group_tracking_owner'))
elif self.technical_name in ('apply_default_lots'):
self.set_apply_default_lots_fields(self._get_group_settings_value('stock.group_production_lot'))
elif self.technical_name in ('move_multiple_products', 'hold_destination_location'):
return self.set_hold_destination_location_fields()
elif self.technical_name in ('use_reusable_packages'):
return self.set_reusable_packages_related_fields(self._get_group_settings_value('stock.group_tracking_lot'))
elif self.technical_name in ('confirm_destination_location'):
self._set_confirm_destination_location_cluster_picking_fields()
def _get_group_settings_value(self, key):
internal_user_groups = self.env.ref('base.group_user').implied_ids
group = self.env.ref(key)
return group in internal_user_groups
def _get_warning(self, message):
return {'warning': {
'title': _('Another Settings were changed automatically!'),
'message': message,
}}
def get_setting_field(self, technical_name):
if not isinstance(technical_name, list):
technical_name = [technical_name]
return self.env['ventor.option.setting'].search(
[
('action_type', '=', self.action_type),
('technical_name', 'in', technical_name),
]
)
def get_general_settings(self):
action_types = [
'package_management',
'batch_picking',
'wave_picking',
'cluster_picking',
'internal_transfers',
'putaway',
'instant_inventory',
'inventory_adjustments',
'quick_info',
'scrap_management',
'create_so',
'create_po',
]
ventor_option_settings = self.env['ventor.option.setting'].search([])
settings = {}
for action_type in action_types:
settings[action_type] = {
set.technical_name: self.get_normalized_value(set.value.setting_value)
for set in ventor_option_settings.filtered(lambda r: r.action_type == action_type)
}
return settings
def set_allow_validate_less(self):
if self.technical_name == 'allow_validate_less':
pack_all_items = self.get_setting_field('pack_all_items')
if pack_all_items.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_false')
elif self.technical_name == 'pack_all_items':
allow_validate_less = self.get_setting_field('allow_validate_less')
if allow_validate_less.value == self.env.ref('ventor_base.bool_true'):
allow_validate_less.value = self.env.ref('ventor_base.bool_false')
return self._get_warning(_(
'Because you changed "Force Pack" to True, '
'automatically the following settings were also changed: '
'\n- "Validate uncompleted orders" was changed to False'
))
def set_apply_default_lots_fields(self, group_stock_production_lot):
if self.env.context.get('disable_apply_default_lots'):
self.value = self.env.ref('ventor_base.bool_false')
elif not group_stock_production_lot and self.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_false')
def _set_add_boxes_before_cluster(self):
if self.technical_name == 'add_boxes_before_cluster' and self.value == self.env.ref('ventor_base.bool_true'):
multiple_boxes_for_one_transfer = self.get_setting_field('multiple_boxes_for_one_transfer')
use_reusable_packages = self.get_setting_field('use_reusable_packages')
if multiple_boxes_for_one_transfer.value == self.env.ref('ventor_base.bool_true'):
multiple_boxes_for_one_transfer.value = self.env.ref('ventor_base.bool_false')
return self._get_warning(_(
'Because you changed "Add boxes before cluster" to True, '
'automatically the following settings were also changed: '
'\n- "Multiple boxes for one transfer" was changed to False'
))
if use_reusable_packages.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_false')
elif self.technical_name == 'multiple_boxes_for_one_transfer' and self.value == self.env.ref('ventor_base.bool_true'):
add_boxes_before_cluster = self.get_setting_field('add_boxes_before_cluster')
if add_boxes_before_cluster.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_false')
def _set_change_source_location(self):
if self.technical_name == 'confirm_source_location' and self.value == self.env.ref('ventor_base.bool_false'):
change_source_location = self.get_setting_field('change_source_location')
change_source_location.value = self.env.ref('ventor_base.bool_false')
return self._get_warning(_(
'Because you changed "Confirm source location" to False, '
'automatically the following settings were also changed: '
'\n- "Change source location" was changed to False'
))
elif self.technical_name == 'change_source_location' and self.value == self.env.ref('ventor_base.bool_true'):
confirm_source_location = self.get_setting_field('confirm_source_location')
if confirm_source_location.value == self.env.ref('ventor_base.bool_false'):
self.value = self.env.ref('ventor_base.bool_false')
def _set_confirm_destination_location_cluster_picking_fields(self):
if self.value == self.env.ref('ventor_base.bool_true') and self.action_type == 'cluster_picking':
use_reusable_packages = self.get_setting_field('use_reusable_packages')
if use_reusable_packages.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_false')
def set_hold_destination_location_fields(self):
if self.technical_name == 'move_multiple_products' and self.value == self.env.ref('ventor_base.bool_true'):
hold_destination_location = self.get_setting_field('hold_destination_location')
if hold_destination_location.value == self.env.ref('ventor_base.bool_true'):
hold_destination_location.value = self.env.ref('ventor_base.bool_false')
return self._get_warning(_(
'Because you changed "Move multiple items" to True, '
'automatically the following settings were also changed: '
'\n- "Hold destination location" was changed to False'
))
elif self.technical_name == 'hold_destination_location' and self.value == self.env.ref('ventor_base.bool_true'):
move_multiple_products = self.get_setting_field('move_multiple_products')
if move_multiple_products.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_false')
def set_manage_product_owner_fields(self, group_stock_tracking_owner):
if not group_stock_tracking_owner and self.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_false')
def set_related_package_fields(self, group_stock_tracking_lot):
if not group_stock_tracking_lot:
self.value = self.env.ref('ventor_base.bool_false')
elif group_stock_tracking_lot:
manage_packages = self.get_setting_field('manage_packages')
if self.value.setting_value == 'False' and self.technical_name == 'manage_packages':
relate_manage_packages_fields = self.get_setting_field(
[
'confirm_source_package',
'scan_destination_package',
]
)
relate_manage_packages_fields.value = self.env.ref('ventor_base.bool_false')
if self.action_type in ('batch_picking', 'cluster_picking'):
return self._get_warning(_(
'Because you changed "Show packages fields" to False, '
'automatically the following settings were also changed: '
'\n- "Confirm source package" was changed to False'
'\n- "Confirm destination package" was changed to False'
))
if self.technical_name != 'manage_packages' and manage_packages.value == self.env.ref('ventor_base.bool_false'):
self.value = self.env.ref('ventor_base.bool_false')
if self.value.setting_value == 'True' and self.technical_name in ('pack_all_items', 'allow_validate_less'):
return self.set_allow_validate_less()
if self.technical_name == 'scan_destination_package' and self.value == self.env.ref('ventor_base.bool_false'):
use_reusable_packages = self.get_setting_field('use_reusable_packages')
if use_reusable_packages.value == self.env.ref('ventor_base.bool_true'):
self.value = self.env.ref('ventor_base.bool_true')
def set_reusable_packages_related_fields(self, group_stock_tracking_lot):
if not group_stock_tracking_lot:
self.value = self.env.ref('ventor_base.bool_false')
elif self.value == self.env.ref('ventor_base.bool_true'):
related_settings_for_disabling = self.get_setting_field(
[
'confirm_destination_location',
'add_boxes_before_cluster',
]
)
related_settings_for_enabling = self.get_setting_field('scan_destination_package')
if related_settings_for_disabling:
related_settings_for_disabling.value = self.env.ref('ventor_base.bool_false')
if related_settings_for_enabling:
related_settings_for_enabling.value = self.env.ref('ventor_base.bool_true')
return self._get_warning(_(
'Because you changed "Use reusable packages" to True, '
'automatically the following settings were also changed: '
'\n- "Confirm destination location" was changed to False'
'\n- "Add boxes before cluster" was changed to False'
'\n- "Confirm destination package" was changed to True'
))
def get_normalized_value(self, setting_value):
normalized_settings = {
'True': 'true',
'False': 'false',
'Always Create Backorder': 'always_create_backorder',
'Never Create Backorder': 'never_create_backorder',
'Always Split the Line': 'always_split_line',
'Always Move Less Items': 'always_move_less_items',
'Ask Me Every Time': 'ask_me_every_time',
}
return normalized_settings.get(setting_value)
class VentorSettingValue(models.Model):
_name = 'ventor.setting.value'
_description = 'Ventor Setting Value'
_rec_name = 'setting_value'
setting_type = fields.Char()
setting_value = fields.Char()

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="report_picking" inherit_id="stock.report_picking">
<xpath expr="//div[hasclass('justify-content-end')]//div[hasclass('col-4')]" position="before">
<div t-if="o.sale_id.name and o.company_id.barcode_on_picking_document" class="col-8" name="left_box">
<div t-field="o.sale_id.name" t-options="{'widget': 'barcode', 'humanreadable': 1, 'width': 600, 'height': 100, 'img_style': 'width:230px;height:50px;'}"/>
</div>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,462 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Ventor Menu Management -->
<record model="ir.module.category" id="module_category_merp_menu_application">
<field name="name">Ventor Menu Management</field>
<field name="sequence">0</field>
<field name="visible" eval="0"/>
</record>
<record id="merp_menu_warehouse_operations" model="res.groups">
<field name="name">Warehouse Operations Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_inventory_adjustments" model="res.groups">
<field name="name">Inventory Adjustments Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_picking_wave" model="res.groups">
<field name="name">Batch Picking Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_instant_inventory" model="res.groups">
<field name="name">Instant Inventory Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_instant_move" model="res.groups">
<field name="name">Internal Transfers Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_manufacturing" model="res.groups">
<field name="name">MO and WO management Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_create_purchase_order" model="res.groups">
<field name="name">Create Purchase Order Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_create_sales_order" model="res.groups">
<field name="name">Create Sales Order Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_info" model="res.groups">
<field name="name">Quick Info Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_package_management" model="res.groups">
<field name="name">Package Management Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_external_management" model="res.groups">
<field name="name">External Transfers Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_putaway" model="res.groups">
<field name="name">Putaway Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_scrap_management" model="res.groups">
<field name="name">Scrap Management Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_cluster_picking_menu" model="res.groups">
<field name="name">Cluster Picking Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_rfid_menu" model="res.groups">
<field name="name">RFID Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_order_recheck_menu" model="res.groups">
<field name="name">Order Recheck Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_wave_picking_menu" model="res.groups">
<field name="name">Wave Picking Menu</field>
<field name="category_id" ref="module_category_merp_menu_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
<field name="comment">Enables the display of the "Wave Picking Menu" in Ventor.
To enable this setting, the "Use wave pickings" group must be enabled</field>
</record>
<!-- Ventor Access Rights -->
<record model="ir.module.category" id="module_category_merp_access_application">
<field name="name">Ventor Access Rights</field>
<field name="sequence">1</field>
<field name="visible" eval="0"/>
</record>
<record id="merp_menu_allow_update_product_on_hand" model="res.groups">
<field name="name">Quick Info: Update product on hand</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="implied_ids" eval="[(6, 0, [ref('merp_menu_info')])]"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_allow_changing_settings" model="res.groups">
<field name="name">Manage Local User Device Settings</field>
<field name="comment">Enable to allow to define local Ventor settings
from Ventor application interface.</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_menu_use_local_user_device_settings" model="res.groups">
<field name="name">Use Local User Device Settings</field>
<field name="comment">If it's checked, the manual settings (defined on device by this user)
will be used instead Global Ventor Settings in Odoo.
If it's unchecked the user will not be able to modify settings on the
device manually. Global Ventor Settings will be used instead.</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_debug" model="res.groups">
<field name="name">Debug: Technical Features</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_picking_wave_allow_done" model="res.groups">
<field name="name">Batch Picking: Close batch picking</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_inventory_allow_ready_state" model="res.groups">
<field name="name">Inventory Adjustments: Waiting for Validation</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="implied_ids" eval="[(6, 0, [ref('merp_menu_inventory_adjustments')])]"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_allow_applying_all_qty_of_product" model="res.groups">
<field name="name">Warehouse Operations: Allow applying all qty of product</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_user_validate_inventory_adjustment" model="res.groups">
<field name="name">Validate Inventory</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
<field name="comment">The group allows Inventory/User to validate inventory</field>
</record>
<record id="merp_manage_ventor_configuration_app" model="res.groups">
<field name="name">Manage Ventor Configuration app</field>
<field name="comment">Enable to see new root menu "Ventor Configuration"
that will allow to define global Ventor settings
from the Odoo interface.</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="merp_allow_pallet_transfer" model="res.groups">
<field name="name">Allow Pallet Transfers</field>
<field name="category_id" ref="module_category_merp_access_application"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
<field name="comment">Allow Pallet Transfer from one location to another one</field>
</record>
<record id="stock.group_stock_manager" model="res.groups">
<field name="implied_ids" eval="[
(4, ref('ventor_base.merp_user_validate_inventory_adjustment')),
(4, ref('ventor_base.merp_allow_pallet_transfer'))]"/>
</record>
<record id="stock.group_stock_manager" model="res.groups">
<field name="implied_ids" eval="[(4, ref('ventor_base.merp_user_validate_inventory_adjustment'))]"/>
</record>
<!-- Ventor Roles -->
<record model="ir.module.category" id="module_category_ventor_roles">
<field name="name">Ventor Roles</field>
<field name="sequence">1</field>
</record>
<data noupdate="1">
<record id="ventor_role_wh_worker" model="res.groups">
<field name="name">Warehouse worker</field>
<field name="category_id" ref="module_category_ventor_roles"/>
<field name="implied_ids"
eval="[(4, ref('merp_menu_warehouse_operations')),
(4, ref('merp_menu_picking_wave')),
(4, ref('merp_cluster_picking_menu')),
(4, ref('merp_rfid_menu')),
(4, ref('merp_order_recheck_menu')),
(4, ref('merp_wave_picking_menu'))]"/>
</record>
<record id="ventor_role_wh_manager" model="res.groups">
<field name="name">Warehouse manager</field>
<field name="category_id" ref="module_category_ventor_roles"/>
<field name="implied_ids"
eval="[(4, ref('ventor_role_wh_worker')),
(4, ref('merp_menu_inventory_adjustments')),
(4, ref('merp_menu_info')),
(4, ref('merp_menu_instant_inventory')),
(4, ref('merp_menu_instant_move')),
(4, ref('merp_package_management')),
(4, ref('merp_external_management')),
(4, ref('merp_putaway')),
(4, ref('merp_menu_manufacturing')),
(4, ref('merp_scrap_management')),
(4, ref('merp_menu_allow_changing_settings'))]"/>
</record>
<record id="ventor_role_admin" model="res.groups">
<field name="name">Administrator</field>
<field name="category_id" ref="module_category_ventor_roles"/>
<field name="implied_ids"
eval="[(4, ref('ventor_role_wh_manager')),
(4, ref('merp_menu_create_sales_order')),
(4, ref('merp_menu_create_purchase_order')),
(4, ref('merp_menu_allow_update_product_on_hand')),
(4, ref('merp_debug')),
(4, ref('merp_picking_wave_allow_done')),
(4, ref('merp_manage_ventor_configuration_app'))]"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
</data>
<!-- Multi Warehouses User Rules Section -->
<!-- Multi Warehouses: Location -->
<record id="stock_location_rule_stock_user" model="ir.rule">
<field name="name">See locations from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_location"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">['|', ('warehouse_id','=',False), ('warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids])]</field>
</record>
<record id="stock_location_rule_stock_manager" model="ir.rule">
<field name="name">See All Location</field>
<field name="model_id" ref="stock.model_stock_location"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Picking Type -->
<record id="stock_picking_type_rule_stock_user" model="ir.rule">
<field name="name">See Operation Types from allowed warehouses</field>
<field name="model_id" ref="ventor_base.model_stock_picking_type"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">['|', ('warehouse_id','=',False), ('warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids])]</field>
</record>
<record id="stock_picking_type_rule_stock_manager" model="ir.rule">
<field name="name">See all Operation Types</field>
<field name="model_id" ref="stock.model_stock_picking_type"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Scrap Orders -->
<record model="ir.rule" id="stock_scrap_rule_stock_user">
<field name="name">See Scrap Orders from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_scrap"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">['|', ('location_id.warehouse_id','=',False), ('location_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids])]</field>
</record>
<record model="ir.rule" id="stock_scrap_rule_stock_manager">
<field name="name">See All Scrap Orders</field>
<field name="model_id" ref="stock.model_stock_scrap"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Reordering Rules -->
<record model="ir.rule" id="stock_warehouse_orderpoint_rule_stock_user">
<field name="name">See Reordering Rules from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_warehouse_orderpoint"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">['|', ('location_id.warehouse_id','=',False), ('location_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids])]</field>
</record>
<record model="ir.rule" id="stock_warehouse_orderpoint_rule_stock_manager">
<field name="name">See All Reordering Rules</field>
<field name="model_id" ref="stock.model_stock_warehouse_orderpoint"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Quants -->
<record model="ir.rule" id="stock_quant_rule_stock_user">
<field name="name">See Quants from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_quant"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">['|', ('location_id.warehouse_id','=',False), ('location_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids])]</field>
</record>
<record model="ir.rule" id="stock_quant_rule_stock_manager">
<field name="name">See all Stock Quants</field>
<field name="model_id" ref="stock.model_stock_quant"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Warehouses -->
<record model="ir.rule" id="stock_warehouse_rule_stock_user">
<field name="name">See Warehouses from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_warehouse"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">['|', ('id','=',False), ('id','in',[wh.id for wh in user.allowed_warehouse_ids])]</field>
</record>
<record model="ir.rule" id="stock_warehouse_rule_stock_manager">
<field name="name">See all Warehouses</field>
<field name="model_id" ref="stock.model_stock_warehouse"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Stock Pickings -->
<record model="ir.rule" id="stock_picking_rule_stock_user">
<field name="name">See Stock Pickings from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_picking"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">[
'&amp;',
'|','|',
('location_id', '=', False),
('location_id.warehouse_id', '=', False),
('location_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids]),
'|','|',
('location_dest_id', '=', False),
('location_dest_id.warehouse_id', '=', False),
('location_dest_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids]),
]</field>
</record>
<record model="ir.rule" id="stock_picking_rule_stock_manager">
<field name="name">See all Stock Pickings</field>
<field name="model_id" ref="stock.model_stock_picking"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- See Picking Batches from allowed Warehouses -->
<record model="ir.rule" id="stock_picking_batch_rule_stock_user">
<field name="name">See Picking Batches from allowed warehouses</field>
<field name="model_id" ref="stock_picking_batch.model_stock_picking_batch"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">['|', ('picking_type_id','=',False), ('picking_type_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids])]</field>
</record>
<record model="ir.rule" id="stock_picking_batch_rule_stock_manager">
<field name="name">See all Picking Batches</field>
<field name="model_id" ref="stock_picking_batch.model_stock_picking_batch"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- TO FIX: In Odoo Standard for some reason there are no multi-company rules for picking batches -->
<record model="ir.rule" id="stock_picking_batch_rule">
<field name="name">stock_picking_batch multi-company</field>
<field name="model_id" search="[('model','=','stock.picking.batch')]" model="ir.model"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
<!-- END of FIX-->
<!-- Multi Warehouses: Stock Move -->
<record model="ir.rule" id="stock_move_rule_stock_user">
<field name="name">See Stock Moves from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_move"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">[
'&amp;',
'|',
('location_id.warehouse_id', '=', False),
('location_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids]),
'|',
('location_dest_id.warehouse_id', '=', False),
('location_dest_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids]),
]</field>
</record>
<record model="ir.rule" id="stock_move_rule_stock_manager">
<field name="name">See all Stock Moves</field>
<field name="model_id" ref="stock.model_stock_move"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Stock Move Lines-->
<record model="ir.rule" id="stock_move_line_rule_stock_user">
<field name="name">See Stock Move Lines from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_move_line"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">[
'&amp;',
'|',
('location_id.warehouse_id', '=', False),
('location_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids]),
'|',
('location_dest_id.warehouse_id', '=', False),
('location_dest_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids]),
]</field>
</record>
<record model="ir.rule" id="stock_move_line_rule_stock_manager">
<field name="name">See all Stock Move Lines</field>
<field name="model_id" ref="stock.model_stock_move_line"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
<!-- Multi Warehouses: Packages -->
<record model="ir.rule" id="stock_quant_package_rule_stock_user">
<field name="name">See Stock Quant Package from allowed warehouses</field>
<field name="model_id" ref="stock.model_stock_quant_package"/>
<field name="groups" eval="[(4, ref('stock.group_stock_user'))]"/>
<field name="domain_force">[
'|', '|',
('location_id', '=', False),
('location_id.warehouse_id','=',False),
('location_id.warehouse_id','in',[wh.id for wh in user.allowed_warehouse_ids])
]</field>
</record>
<record model="ir.rule" id="stock_quant_package_rule_stock_manager">
<field name="name">See Stock Quant Package</field>
<field name="model_id" ref="stock.model_stock_quant_package"/>
<field name="groups" eval="[(4, ref('stock.group_stock_manager'))]"/>
<field name="domain_force">[(1,'=',1)]</field>
</record>
</odoo>

View file

@ -0,0 +1,6 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
validate_inventory_user,validate_inventory_user,model_stock_location,ventor_base.merp_user_validate_inventory_adjustment,1,1,0,0
ventor_settings_admin,ventor_settings_admin,ventor_base.model_ventor_option_setting,ventor_base.merp_manage_ventor_configuration_app,1,1,0,0
ventor_setting_value,ventor_setting_value,ventor_base.model_ventor_setting_value,ventor_base.merp_manage_ventor_configuration_app,1,0,0,0
pallet_transfer_stock_user,pallet_transfer_stock_user,model_pallet_transfer,stock.group_stock_user,1,1,1,0
pallet_transfer_stock_manager,pallet_transfer_stock_manager,model_pallet_transfer,stock.group_stock_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 validate_inventory_user validate_inventory_user model_stock_location ventor_base.merp_user_validate_inventory_adjustment 1 1 0 0
3 ventor_settings_admin ventor_settings_admin ventor_base.model_ventor_option_setting ventor_base.merp_manage_ventor_configuration_app 1 1 0 0
4 ventor_setting_value ventor_setting_value ventor_base.model_ventor_setting_value ventor_base.merp_manage_ventor_configuration_app 1 0 0 0
5 pallet_transfer_stock_user pallet_transfer_stock_user model_pallet_transfer stock.group_stock_user 1 1 1 0
6 pallet_transfer_stock_manager pallet_transfer_stock_manager model_pallet_transfer stock.group_stock_manager 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,113 @@
<section class="oe_container oe_dark">
<div class="oe_row">
<div class="oe_span12">
<h2 class="oe_slogan"><strong>Ventor</strong>/<strong>mERP</strong> Base module</h2>
</div>
<div class="oe_span12" style="text-align: center; margin-bottom: 5px">
<p style="padding: 5px; font-size: 16px; font-weight: bold; background-color: yellow; display: inline">
TO AVOID ANY ISSUES, PLEASE, USE ALWAYS LATEST VERSION FROM OUR GITHUB REPOSITORY -
<a href="https://github.com/ventor-tech/merp/tree/16.0">
https://github.com/ventor-tech/merp/tree/16.0
</a>
</p>
</div>
<div class="oe_span6">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="merp_base.png">
</div>
</div>
<div class="oe_span6">
<p class="oe_mt32">
The base module required for all <strong>Ventor</strong>/<strong>mERP</strong>-related modules, i.e.:
</p>
<ul>
<li>Ventor/mERP Outgoing Routing</li>
<li>Ventor/mERP Picking Product Skip</li>
<li>Ventor/mERP Picking Wave</li>
<li>Ventor/mERP Internal Warehouse</li>
<li>and more ...</li>
</ul>
<p class="oe_mt32">
It allows user to install/uninstall modules via Inventory/Warehouse Settings screen.
</p>
</div>
</div>
<div class="oe_row">
<div class="oe_span6">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="merp_base_1.png"/>
</div>
</div>
<div class="oe_span6">
<p class="oe_mt32">
In case there are multiple warehouses, this modules allows to select default warehouse that will be pre-selected for user when using menu "Internal Transfer"
</p>
<p class="oe_mt32">
Allows to define default location that will be used for Inventory Adjustments instead of default 'WH/Stock'.
</p>
<p class="oe_mt32">
Allows to show location barcodes disabled in the Community version.
</p>
</div>
</div>
<div class="oe_row">
<div class="oe_span6">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="merp_base_2.png">
</div>
</div>
<div class="oe_span6">
<p class="oe_mt32">
Adds special access rights required by the "Ventor" app:
</p>
<ul>
<li>Warehouse Operations Menu</li>
<li>Inventory Adjustments Menu</li>
<li>Instant Inventory Menu</li>
<li>Internal Transfers Menu</li>
<li>Manufacturing Menu</li>
<li>Create Sales Order Menu</li>
<li>Quick Info Menu</li>
<li>Batch Picking Menu</li>
<li>Ventor Access Rights</li>
<li>and more ...</li>
</ul>
<p class="oe_mt32">
Module also allows to define user's default stock location for instant moves.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Notes</h2>
<p class="oe_mt32">
This module is designed to work only with "Ventor" application that can be downloaded from:
</p>
<ol>
<li>
<a target="_blank" href="https://ventor.app/">https://ventor.app</a> website - version obtained from here is suitable for all types of organizations
</li>
<li>
<a target="_blank" href="https://play.google.com/store/apps/details?id=com.xpansa.merp.warehouse">Google Play</a> - has limitations, not possible to customize app by request - https://play.google.com/store/apps/details?id=com.xpansa.merp.warehouse
</li>
</ol>
<p class="oe_mt32">
"Ventor" app work both on regular mobile phones with Android 4.1+ and with professional barcode scanners. For full list of supported devices check <a target="_blank" href="https://merpapp.com/blog/merp-frequently-asked-questions/#l23">F.A.Q.</a>
</p>
<p class="oe_mt32">
<a target="_blank" href="https://ventor.tech/">VentorTech (https://ventor.tech/)</a> is company specialized on building Personalized Inventory and Product Management System.
</p>
<p class="oe_mt32">
For all questions contact <a target="_blank" href="mailto:hello@ventor.tech">hello@ventor.tech</a>.
</p>
</div>
</div>
</section>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View file

@ -0,0 +1,17 @@
.custom-control.custom-checkbox.o_field_boolean.o_field_widget.o_readonly_modifier{
pointer-events: none;
}
.ventor_base_tree {
& > .table-responsive {
& > .table {
& > thead {
& > tr {
& > :not(:empty) {
white-space: pre-wrap;
}
}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View file

@ -0,0 +1,6 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from . import test_check_default_location
from . import test_checking_logotype
from . import test_set_active_view

View file

@ -0,0 +1,30 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo.tests.common import TransactionCase
class TestCheckDefaultLocation(TransactionCase):
def setUp(self):
super(TestCheckDefaultLocation, self).setUp()
self.location = self.env['stock.location'].create({
'name': 'test_location'
})
self.user = self.env['res.users'].create({
'name': 'test_user',
'login': 'test_user',
'email': 'test.user@email.com'
})
self.ventor_worker = self.env.ref('ventor_base.ventor_role_wh_worker')
self.ventor_worker.write({'users': [(4, self.user.id)]})
self.inventory_manager = self.env.ref('stock.group_stock_manager')
self.inventory_manager.write({'users': [(4, self.user.id)]})
self.administration_settings = self.env.ref('base.group_system')
self.administration_settings.write({'users': [(4, self.user.id)]})
self.company = self.env['res.company'].create({
'name': 'test_company',
})
self.product = self.env['product.template'].create({
'name': 'new_product'
})

View file

@ -0,0 +1,35 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo.tests.common import TransactionCase
from odoo.exceptions import UserError
from odoo.modules.module import get_resource_path
import base64
class TestCheckingLogotype(TransactionCase):
def setUp(self):
super(TestCheckingLogotype, self).setUp()
self.user = self.env['res.users'].create({
'name': 'admin',
'login': 'login@email.com'
})
self.ventor_admin = self.env.ref('ventor_base.ventor_role_admin')
self.ventor_admin.write({'users': [(4, self.user.id, 0)]})
self.inventory_manager = self.env.ref('stock.group_stock_manager')
self.inventory_manager.write({'users': [(4, self.user.id, 0)]})
self.administration_settings = self.env.ref('base.group_system')
self.administration_settings.write({'users': [(4, self.user.id, 0)]})
self.company = self.env['res.company'].search([], limit=1)
def test_upload_invalid_logo(self):
img_path = get_resource_path('ventor_base', 'static', 'test_logo', '400_400.png')
img_content = base64.b64encode(open(img_path, "rb").read())
with self.assertRaises(UserError):
self.company._validate_logotype({'logotype_file': img_content})
def test_upload_valid_logo(self):
img_path = get_resource_path('ventor_base', 'static', 'test_logo', '600_600.png')
img_content = base64.b64encode(open(img_path, "rb").read())
self.assertEqual(self.company._validate_logotype({'logotype_file': img_content}), True)

View file

@ -0,0 +1,39 @@
# Copyright 2020 VentorTech OU
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from odoo.tests.common import TransactionCase
from odoo.exceptions import Warning
import base64
class TestSetActiveView(TransactionCase):
def setUp(self):
super(TestSetActiveView, self).setUp()
self.view_with_barcode = self.env.ref('ventor_base.view_location_form_inherit_additional_barcode')
self.ConfigObj = self.env['res.config.settings']
def test_get_values(self):
# A default value, adjusted in a view.xml
config = self.ConfigObj.get_values()
self.assertEqual(
config['add_barcode_on_view'],
False
)
# We set True directly to the ir.ui.view
self.view_with_barcode.active = True
config = self.ConfigObj.get_values()
self.assertEqual(
config['add_barcode_on_view'],
True
)
def test_set_values(self):
for value in (True, False):
config = self.ConfigObj.create(
{'add_barcode_on_view': value}
)
config.execute()
self.assertEqual(
self.view_with_barcode.active,
value
)

View file

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="ventor_base_pallet_transfer_tree" model="ir.ui.view">
<field name="name">ventor.base.pallet.transfer.tree</field>
<field name="model">pallet.transfer</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="pallet_name"/>
<field name="source_location_id"/>
<field name="destination_location_id"/>
</tree>
</field>
</record>
<record id="ventor_base_pallet_transfer_form" model="ir.ui.view">
<field name="name">ventor.base.pallet.transfer.form</field>
<field name="model">pallet.transfer</field>
<field name="arch" type="xml">
<form string="Pallet Transfers" edit="false">
<sheet>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="pallet_id"
required="1"
options="{'no_create': True, 'no_open': True}"
domain="[('is_pallet', '=', True)]"/>
</group>
<group>
<field name="destination_location_id"
required="1"
options="{'no_create': True, 'no_open': True}"
domain="[('is_pallet', '!=', True), ('usage', '=', 'internal')]"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="ventor_base_quick_pallet_transfer_form" model="ir.ui.view">
<field name="name">ventor.base.quick.pallet.transfer.form</field>
<field name="model">pallet.transfer</field>
<field name="arch" type="xml">
<form>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="pallet_id"
required="1"
options="{'no_create': True, 'no_open': True}"
domain="[('is_pallet', '=', True)]"/>
</group>
<group>
<field name="destination_location_id"
required="1"
options="{'no_create': True, 'no_open': True}"
domain="[('is_pallet', '!=', True), ('usage', '=', 'internal')]"/>
</group>
</group>
<footer>
<button
string="Create Transfer"
special="save"
class="oe_highlight"/>
<button
string="Cancel"
class="btn btn-default"
special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="quick_pallets_transfer_action" model="ir.actions.act_window">
<field name="name">Quick Pallet Transfers</field>
<field name="res_model">pallet.transfer</field>
<field name="view_mode">form</field>
<field name="view_id" ref="ventor_base.ventor_base_quick_pallet_transfer_form"/>
<field name="target">new</field>
</record>
<record id="all_pallets_transfer_action" model="ir.actions.act_window">
<field name="name">All Pallet Transfers</field>
<field name="res_model">pallet.transfer</field>
<field name="usage">menu</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="ventor_base.ventor_base_pallet_transfer_tree"/>
<field name="target">current</field>
</record>
<menuitem id="menu_handling_transfer"
name="Pallet Transfers"
parent="stock.menu_stock_root"
sequence="99"
groups="ventor_base.merp_allow_pallet_transfer"/>
<record id="Quick_pallets_transfer_menu" model="ir.ui.menu">
<field name="name">Quick Pallet Transfers</field>
<field name="sequence" eval="1"/>
<field name="action" ref="ventor_base.quick_pallets_transfer_action"/>
<field name="parent_id" ref="ventor_base.menu_handling_transfer"/>
</record>
<record id="all_pallets_transfer_menu" model="ir.ui.menu">
<field name="name">All Pallet Transfers</field>
<field name="sequence" eval="2"/>
<field name="action" ref="ventor_base.all_pallets_transfer_action"/>
<field name="parent_id" ref="ventor_base.menu_handling_transfer"/>
</record>
</odoo>

View file

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_stock_config_settings" model="ir.ui.view">
<field name="name">Ventor Application Demo - Stock Settings</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside" >
<div class="app_settings_block"
data-string="Ventor Configuration"
string="Ventor Configuration"
data-key="ventor_base"
groups="stock.group_stock_manager">
<h2>Ventor Application modules</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="module_outgoing_routing"/>
</div>
<div class="o_setting_right_pane">
<label for="module_outgoing_routing"/>
<div class="text-muted">
Add Outgoing Routing strategy options (sort locations)
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_right_pane">
<field name="base_version"/>
<div class="text-muted">
Base Module Version
</div>
</div>
</div>
</div>
<h2>Inventory settings</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<div>
<field name="add_barcode_on_view"/>
</div>
</div>
<div class="o_setting_right_pane">
<label for="add_barcode_on_view"/>
<div class="text-muted">
Use it to activate barcodes for the Community version
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<div>
<field name="force_lot_validation_on_inventory_adjustment"/>
</div>
</div>
<div class="o_setting_right_pane">
<label for="force_lot_validation_on_inventory_adjustment"/>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<div>
<field name="barcode_on_picking_document"/>
</div>
</div>
<div class="o_setting_right_pane">
<label for="barcode_on_picking_document"/>
<div class="text-muted">
Showing a barcode of the related sales order on all printed picking documents
</div>
</div>
</div>
</div>
<h2>Additional Customisation</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Custom Mobile Logo</span>
<div>
<field name="logotype_file"
widget="image" />
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Custom Build Name</span>
<div>
<field name="custom_package_name"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Update User form -->
<record model="ir.ui.view" id="res_user_form">
<field name="name">Users Preferences</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form" />
<field name="arch" type="xml">
<data>
<xpath expr="//notebook/page[@name='preferences']" position="after">
<page string="Ventor Preferences">
<group>
<field name="ventor_global_settings"
style="overflow-y: scroll; resize: none; height: 120px; width: 100%%"
groups="base.group_no_one"/>
<field name="ventor_user_settings"
style="overflow-y: scroll; resize: none; height: 120px; width: 100%%"
groups="base.group_no_one"/>
</group>
</page>
</xpath>
<xpath expr="//page[@name='access_rights']//group" position="after">
<group string="Multi Warehouses">
<field name="allowed_warehouse_ids" widget="many2many_tags" options="{'no_create': True}"/>
</group>
<div class="text-danger">
<p>
Warning! If the user is Inventory / Administrator,
the Allowed Warehouses configuration is ignored and
the user will still be able to see all warehouses
</p>
</div>
</xpath>
</data>
</field>
</record>
</odoo>

View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_location_form_inherit_additional_barcode" model="ir.ui.view">
<field name="name">stock.location.form.inherit.additional.barcode</field>
<field name="model">stock.location</field>
<field name="active" eval="False"/>
<field name="inherit_id" ref="stock.view_location_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='return_location']" position="after">
<field name="barcode"/>
</xpath>
</field>
</record>
<record id="view_location_form_inherited" model="ir.ui.view">
<field name="name">stock.location.form.inherited</field>
<field name="model">stock.location</field>
<field name="inherit_id" ref="stock.view_location_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='return_location']" position="after">
<field name="is_pallet" attrs="{'invisible': [('usage', '!=', 'internal')]}"/>
</xpath>
</field>
</record>
<!-- stock.location inherit search view -->
<record id="view_location_search" model="ir.ui.view">
<field name="name">stock.location.inherit.view.search</field>
<field name="model">stock.location</field>
<field name="inherit_id" ref="stock.view_location_search"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='location_id']" position="after">
<field name="warehouse_id" string="Warehouse"/>
<group expand='0' string='Group by...'>
<filter string='Warehouse' name="warehouse_id" domain="[]" context="{'group_by' : 'warehouse_id'}"/>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Views-->
<record id='ventor_stock_picking_view' model='ir.ui.view'>
<field name="name">Operation Types</field>
<field name="model">stock.picking.type</field>
<field name="priority">1000</field>
<field name="arch" type="xml">
<tree create="false" class="ventor_base_tree" editable="top">
<field name="name" attrs="{'readonly':True}"/>
<field name="warehouse_id" attrs="{'readonly':True}"/>
<field name="company_id" invisible="True"/>
<field name="confirm_source_location"/>
<field name="change_source_location"/>
<field name="confirm_product"/>
<field name="show_next_product"/>
<field name="confirm_destination_location"/>
<field name="change_destination_location"/>
<field name="scan_destination_location_once"/>
<field name="apply_quantity_automatically"/>
<field name="is_package_tracking_enabled" invisible='1'/>
<field name="manage_packages" attrs="{'readonly': [('is_package_tracking_enabled','=',False)]}"/>
<field name="allow_creating_new_packages"
attrs="{'readonly': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)]}"/>
<field name="is_consignment_enabled" invisible='1'/>
<field name="confirm_source_package"
attrs="{'readonly': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)]}"/>
<field name="scan_destination_package"
attrs="{'readonly': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)]}"/>
<field name="manage_product_owner" attrs="{'readonly': [('is_consignment_enabled','=',False)]}"/>
<field name="is_stock_production_lot_enabled" invisible='1'/>
<field name="apply_default_lots" attrs="{'readonly': [('is_stock_production_lot_enabled','=',False)]}"/>
<field name="transfer_more_items"/>
<field name="autocomplete_the_item_quantity_field"/>
<field name="behavior_on_backorder_creation"/>
<field name="behavior_on_split_operation" required="1"/>
<field name="show_print_attachment_button"/>
<field name="show_put_in_pack_button" attrs="{'readonly': [('is_package_tracking_enabled','=',False)]}"/>
<field name="code" invisible='1'/>
<field name="check_shipping_information" attrs="{'readonly': [('code','!=','outgoing')]}"/>
<field name="hide_qty_to_receive" attrs="{'readonly': [('code','!=','incoming')]}"/>
</tree>
</field>
</record>
<record id="ventor_stock_picking_form" model="ir.ui.view">
<field name="name">Operation Types</field>
<field name="model">stock.picking.type</field>
<field name="inherit_id" ref="stock.view_picking_type_form"/>
<field name="arch" type="xml">
<xpath expr="//group[@name='stock_picking_type_lot']" position="before">
<group string="Ventor Configuration" colspan="12">
<group>
<field name="confirm_source_location"/>
<field name="change_source_location"
attrs="{'readonly':[('confirm_source_location','!=',True)]}"/>
<field name="confirm_product"/>
<field name="show_next_product"/>
<field name="confirm_destination_location"/>
<field name="change_destination_location"/>
<field name="scan_destination_location_once"/>
<field name="apply_quantity_automatically"
attrs="{'readonly':[('confirm_destination_location','!=',True)]}"/>
<field name="is_package_tracking_enabled" invisible='1'/>
<field name="manage_packages" attrs="{'invisible': [('is_package_tracking_enabled','=',False)]}"/>
<field name="allow_creating_new_packages"
attrs="{'invisible': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)],
'readonly': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)]}"/>
<field name="confirm_source_package"
attrs="{'invisible': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)],
'readonly': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)]}"/>
<field name="scan_destination_package"
attrs="{'invisible': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)],
'readonly': ['|', ('is_package_tracking_enabled','=',False), ('manage_packages','=',False)]}"/>
<field name="is_consignment_enabled" invisible='1'/>
<field name="manage_product_owner" attrs="{'invisible': [('is_consignment_enabled','=',False)]}"/>
</group>
<group>
<field name="is_stock_production_lot_enabled" invisible='1'/>
<field name="apply_default_lots" attrs="{'invisible': [('is_stock_production_lot_enabled','=',False)]}"/>
<field name="transfer_more_items"/>
<field name="autocomplete_the_item_quantity_field"/>
<field name="behavior_on_backorder_creation"/>
<field name="behavior_on_split_operation" required="1"/>
<field name="show_print_attachment_button"/>
<field name="show_put_in_pack_button" attrs="{'invisible': [('is_package_tracking_enabled','=',False)]}"/>
<field name="check_shipping_information" attrs="{'invisible': [('code','!=','outgoing')]}"/>
<field name="hide_qty_to_receive" attrs="{'invisible': [('code','!=','incoming')]}"/>
</group>
</group>
</xpath>
</field>
</record>
<!-- Actions-->
<record id='ventor_stock_picking_action' model='ir.actions.act_window'>
<field name="name">Warehouse Operations</field>
<field name="res_model">stock.picking.type</field>
<field name="view_mode">tree,form</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_stock_picking_view"/>
</record>
<record id="ventor_configs_action" model="ir.actions.act_window">
<field name="name">Configuration</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="context">{'module' : 'ventor_base'}</field>
</record>
<!-- Menus -->
<menuitem name="Ventor Configuration"
id="ventor_app_base_menu"
web_icon="ventor_base,static/description/icon.png"
groups="merp_manage_ventor_configuration_app"/>
<menuitem id="ventor_app_settings"
name="Settings"
parent="ventor_app_base_menu"
action="ventor_configs_action"/>
<menuitem name="Global Ventor Settings"
id="ventor_settings_app_menu"
parent="ventor_app_base_menu"/>
<menuitem name="Warehouse Operations"
id="ventor_wh_operations_app_menu"
parent="ventor_settings_app_menu"
action="ventor_stock_picking_action"/>
<menuitem name="User Settings"
id="ventor_app_user_settings_menu"
parent="ventor_app_base_menu"
action="base.action_res_users"/>
</data>
</odoo>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_stock_quant_tree_inherit_inventory_editable" model="ir.ui.view">
<field name="name">view.stock.quant.tree.inherit.inventory.editable</field>
<field name="model">stock.quant</field>
<field name="inherit_id" ref="stock.view_stock_quant_tree_inventory_editable"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_apply_inventory']" position="attributes">
<attribute name="groups">ventor_base.merp_user_validate_inventory_adjustment</attribute>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="view_warehouse" model="ir.ui.view">
<field name="name">stock.warehouse</field>
<field name="model">stock.warehouse</field>
<field name="inherit_id" ref="stock.view_warehouse"/>
<field name="arch" type="xml">
<field name="code" position="after">
<field name="is_internal"/>
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,206 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Views-->
<record id='ventor_settings_tree_view' model='ir.ui.view'>
<field name="name">Ventor Settings</field>
<field name="model">ventor.option.setting</field>
<field name="priority">1000</field>
<field name="arch" type="xml">
<tree create="false" editable="top">
<field name="name" readonly="1"/>
<field name="technical_name" readonly="1"/>
<field name="settings_dependency" invisible="1"/>
<field name="value" attrs="{'readonly': [('technical_name','=','show_next_product')]}" options="{'no_create': True, 'no_open': True}"/>
<field name="value_type" readonly="1" groups="base.group_no_one"/>
<field name="action_type" readonly="1" groups="base.group_no_one"/>
<field name="description" readonly="1"/>
</tree>
</field>
</record>
<!-- Actions-->
<record id='ventor_package_management_action' model='ir.actions.act_window'>
<field name="name">Package Management</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'package_management')]</field>
</record>
<record id='ventor_batch_picking_action' model='ir.actions.act_window'>
<field name="name">Batch Picking</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'batch_picking'), ('technical_name', '!=', 'show_next_product')]</field>
</record>
<record id='ventor_wave_picking_action' model='ir.actions.act_window'>
<field name="name">Wave Picking</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'wave_picking'), ('technical_name', '!=', 'show_next_product')]</field>
</record>
<record id='ventor_cluster_picking_action' model='ir.actions.act_window'>
<field name="name">Cluster Picking</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'cluster_picking'), ('technical_name', '!=', 'show_next_product')]</field>
</record>
<record id='ventor_internal_transfers_action' model='ir.actions.act_window'>
<field name="name">Internal Transfers</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'internal_transfers')]</field>
</record>
<record id='ventor_putaway_action' model='ir.actions.act_window'>
<field name="name">Putaway</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'putaway')]</field>
</record>
<record id='ventor_inventory_adjustments_action' model='ir.actions.act_window'>
<field name="name">Inventory Adjustments</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'inventory_adjustments')]</field>
</record>
<record id='ventor_instant_inventory_action' model='ir.actions.act_window'>
<field name="name">Instant Inventory</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'instant_inventory')]</field>
</record>
<record id='ventor_quick_info_action' model='ir.actions.act_window'>
<field name="name">Quick info</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'quick_info')]</field>
</record>
<record id='ventor_scrap_management_action' model='ir.actions.act_window'>
<field name="name">Scrap Management</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'scrap_management')]</field>
</record>
<record id='ventor_create_so_action' model='ir.actions.act_window'>
<field name="name">Create SO</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'create_so')]</field>
</record>
<record id='ventor_create_po_action' model='ir.actions.act_window'>
<field name="name">Create PO</field>
<field name="res_model">ventor.option.setting</field>
<field name="view_mode">tree</field>
<field name="usage">menu</field>
<field name="view_id" ref="ventor_settings_tree_view"/>
<field name="domain">[('action_type', '=', 'create_po')]</field>
</record>
<!-- Menus -->
<menuitem name="Package Management"
id="ventor_package_management_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_package_management_action"
sequence="1"/>
<menuitem name="Batch Picking"
id="ventor_batch_picking_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_batch_picking_action"
sequence="2"/>
<menuitem name="Wave Picking"
id="ventor_wave_picking_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_wave_picking_action"
groups="stock.group_stock_picking_wave"
sequence="3"/>
<menuitem name="Cluster Picking"
id="ventor_cluster_picking_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_cluster_picking_action"
sequence="4"/>
<menuitem name="Internal Transfers"
id="ventor_internal_transfers_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_internal_transfers_action"
sequence="5"/>
<menuitem name="Putaway"
id="ventor_putaway_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_putaway_action"
sequence="6"/>
<menuitem name="Inventory Adjustments"
id="ventor_inventory_adjustments_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_inventory_adjustments_action"
sequence="7"/>
<menuitem name="Instant Inventory"
id="ventor_instant_inventory_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_instant_inventory_action"
sequence="8"/>
<menuitem name="Quick info"
id="ventor_quick_info_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_quick_info_action"
sequence="9"/>
<menuitem name="Scrap Management"
id="ventor_scrap_management_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_scrap_management_action"
sequence="10"/>
<menuitem name="Create SO"
id="ventor_create_so_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_create_so_action"
sequence="11"/>
<menuitem name="Create PO"
id="ventor_create_po_app_menu"
parent="ventor_base.ventor_settings_app_menu"
action="ventor_create_po_action"
sequence="12"/>
</data>
</odoo>