From af1eea76929ed7860ab5615c2615eb2ad2a4f294 Mon Sep 17 00:00:00 2001 From: Ernad Husremovic Date: Fri, 29 Aug 2025 15:43:06 +0200 Subject: [PATCH] Initial commit: OCA Warehouse packages (12 packages) --- README.md | 58 + .../README.md | 46 + .../barcodes_generator_abstract/README.rst | 204 ++ .../barcodes_generator_abstract/__init__.py | 3 + .../__manifest__.py | 25 + .../demo/res_users.xml | 17 + .../barcodes_generator_abstract/i18n/am.po | 154 ++ .../i18n/barcodes_generator_abstract.pot | 144 + .../barcodes_generator_abstract/i18n/bs.po | 144 + .../barcodes_generator_abstract/i18n/ca.po | 154 ++ .../barcodes_generator_abstract/i18n/de.po | 165 ++ .../barcodes_generator_abstract/i18n/el_GR.po | 155 ++ .../barcodes_generator_abstract/i18n/es.po | 211 ++ .../barcodes_generator_abstract/i18n/fi.po | 160 ++ .../barcodes_generator_abstract/i18n/fr.po | 165 ++ .../barcodes_generator_abstract/i18n/gl.po | 154 ++ .../barcodes_generator_abstract/i18n/hr.po | 167 ++ .../barcodes_generator_abstract/i18n/hr_HR.po | 156 ++ .../barcodes_generator_abstract/i18n/it.po | 230 ++ .../barcodes_generator_abstract/i18n/nl.po | 157 ++ .../barcodes_generator_abstract/i18n/nl_NL.po | 168 ++ .../barcodes_generator_abstract/i18n/pt.po | 154 ++ .../barcodes_generator_abstract/i18n/pt_BR.po | 178 ++ .../barcodes_generator_abstract/i18n/pt_PT.po | 155 ++ .../barcodes_generator_abstract/i18n/sl.po | 165 ++ .../barcodes_generator_abstract/i18n/tr.po | 169 ++ .../barcodes_generator_abstract/i18n/zh_CN.po | 147 + .../models/__init__.py | 4 + .../models/barcode_generate_mixin.py | 110 + .../models/barcode_rule.py | 90 + .../readme/CONFIGURE.rst | 23 + .../readme/CONTRIBUTORS.rst | 9 + .../readme/CREDITS.rst | 5 + .../readme/DESCRIPTION.rst | 21 + .../readme/INSTALL.rst | 4 + .../readme/ROADMAP.rst | 4 + .../readme/USAGE.rst | 30 + .../security/res_groups.xml | 16 + .../description/barcode_nomenclature_form.png | Bin 0 -> 78174 bytes .../description/barcode_rule_form_manual.png | Bin 0 -> 26389 bytes .../barcode_rule_form_sequence.png | Bin 0 -> 33743 bytes .../static/description/icon.png | Bin 0 -> 16262 bytes .../static/description/index.html | 565 ++++ .../tests/__init__.py | 1 + .../tests/models.py | 24 + .../tests/test_barcodes_generator_abstract.py | 102 + .../views/menu.xml | 14 + .../views/view_barcode_nomenclature.xml | 32 + .../views/view_barcode_rule.xml | 55 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 74 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../pyproject.toml | 42 + .../README.md | 47 + .../barcodes_generator_location/README.rst | 130 + .../barcodes_generator_location/__init__.py | 2 + .../__manifest__.py | 19 + .../demo/barcode_rule.xml | 21 + .../demo/function.xml | 17 + .../demo/ir_sequence.xml | 12 + .../demo/stock_location.xml | 12 + .../barcodes_generator_location/hooks.py | 13 + .../i18n/barcodes_generator_location.pot | 82 + .../barcodes_generator_location/i18n/bs.po | 82 + .../barcodes_generator_location/i18n/es.po | 89 + .../barcodes_generator_location/i18n/fr.po | 89 + .../barcodes_generator_location/i18n/hr.po | 90 + .../barcodes_generator_location/i18n/it.po | 96 + .../barcodes_generator_location/i18n/nl_NL.po | 90 + .../barcodes_generator_location/i18n/tr.po | 93 + .../models/__init__.py | 3 + .../models/barcode_rule.py | 11 + .../models/stock_location.py | 48 + .../readme/CONFIGURE.rst | 2 + .../readme/CONTRIBUTORS.rst | 5 + .../readme/CREDITS.rst | 2 + .../readme/DESCRIPTION.rst | 20 + .../readme/USAGE.rst | 15 + .../static/description/icon.png | Bin 0 -> 19578 bytes .../static/description/index.html | 487 ++++ .../stock_location_sequence_generation.png | Bin 0 -> 67651 bytes .../tests/__init__.py | 2 + .../tests/test_barcode_generator.py | 27 + .../views/stock_location.xml | 56 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../pyproject.toml | 43 + .../README.md | 47 + .../barcodes_generator_package/README.rst | 139 + .../barcodes_generator_package/__init__.py | 1 + .../__manifest__.py | 25 + .../demo/barcode_rule.xml | 23 + .../demo/ir_sequence.xml | 14 + .../demo/product_packaging.xml | 13 + .../i18n/barcodes_generator_package.pot | 87 + .../barcodes_generator_package/i18n/bs.po | 87 + .../barcodes_generator_package/i18n/es.po | 111 + .../barcodes_generator_package/i18n/es_ES.po | 98 + .../barcodes_generator_package/i18n/fr.po | 97 + .../barcodes_generator_package/i18n/hr.po | 101 + .../barcodes_generator_package/i18n/it.po | 100 + .../barcodes_generator_package/i18n/nl_NL.po | 98 + .../barcodes_generator_package/i18n/tr.po | 98 + .../models/__init__.py | 2 + .../models/barcode_rule.py | 13 + .../models/product_packaging.py | 10 + .../readme/CONFIGURE.rst | 2 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/CREDITS.rst | 3 + .../readme/DESCRIPTION.rst | 20 + .../readme/USAGE.rst | 15 + .../static/description/icon.png | Bin 0 -> 21460 bytes .../static/description/index.html | 494 ++++ .../product_packaging_sequence_generation.png | Bin 0 -> 42650 bytes .../tests/__init__.py | 1 + .../tests/test_barcodes_generator_package.py | 33 + .../views/product_packaging.xml | 80 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../pyproject.toml | 43 + .../README.md | 47 + .../barcodes_generator_product/README.rst | 159 ++ .../barcodes_generator_product/__init__.py | 3 + .../__manifest__.py | 23 + .../demo/barcode_rule.xml | 47 + .../demo/product.xml | 91 + .../demo/res_users.xml | 17 + .../i18n/barcodes_generator_product.pot | 118 + .../barcodes_generator_product/i18n/bs.po | 118 + .../barcodes_generator_product/i18n/es.po | 134 + .../barcodes_generator_product/i18n/es_ES.po | 142 + .../barcodes_generator_product/i18n/fr.po | 133 + .../barcodes_generator_product/i18n/hr.po | 141 + .../barcodes_generator_product/i18n/it.po | 181 ++ .../barcodes_generator_product/i18n/nl_NL.po | 126 + .../barcodes_generator_product/i18n/tr.po | 129 + .../barcodes_generator_product/i18n/zh_CN.po | 121 + .../models/__init__.py | 5 + .../models/barcode_rule.py | 12 + .../models/product_product.py | 11 + .../models/product_template.py | 78 + .../readme/CONFIGURE.rst | 5 + .../readme/CONTRIBUTORS.rst | 9 + .../readme/CREDITS.rst | 7 + .../readme/DESCRIPTION.rst | 28 + .../readme/USAGE.rst | 15 + .../static/description/icon.png | Bin 0 -> 22033 bytes .../static/description/index.html | 511 ++++ .../product_template_manual_generation.png | Bin 0 -> 28200 bytes .../tests/__init__.py | 3 + .../tests/test_barcodes_generator_product.py | 79 + .../views/view_product_product.xml | 158 ++ .../views/view_product_template.xml | 88 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 14 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../pyproject.toml | 43 + .../README.md | 46 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 91 + .../__init__.py | 1 + .../__manifest__.py | 19 + .../i18n/bs.po | 19 + .../i18n/es.po | 22 + .../i18n/fr.po | 34 + .../i18n/it.po | 22 + ...product_barcode_constraint_per_company.pot | 19 + .../models/__init__.py | 1 + .../models/product_product.py | 25 + .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 7 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 427 +++ .../tests/__init__.py | 1 + .../tests/test_module.py | 48 + .../pyproject.toml | 42 + .../README.md | 46 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 14 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../product_multi_barcode/README.rst | 119 + .../product_multi_barcode/__init__.py | 4 + .../product_multi_barcode/__manifest__.py | 27 + .../product_multi_barcode/hooks.py | 15 + .../product_multi_barcode/i18n/am.po | 116 + .../product_multi_barcode/i18n/ar.po | 117 + .../product_multi_barcode/i18n/bg.po | 116 + .../product_multi_barcode/i18n/bs.po | 111 + .../product_multi_barcode/i18n/ca.po | 121 + .../product_multi_barcode/i18n/ca_ES.po | 116 + .../product_multi_barcode/i18n/cs.po | 116 + .../product_multi_barcode/i18n/da.po | 116 + .../product_multi_barcode/i18n/da_DK.po | 116 + .../product_multi_barcode/i18n/de.po | 148 + .../product_multi_barcode/i18n/el_GR.po | 121 + .../product_multi_barcode/i18n/en_GB.po | 116 + .../product_multi_barcode/i18n/es.po | 149 + .../product_multi_barcode/i18n/es_AR.po | 116 + .../product_multi_barcode/i18n/es_CO.po | 116 + .../product_multi_barcode/i18n/es_CR.po | 116 + .../product_multi_barcode/i18n/es_EC.po | 116 + .../product_multi_barcode/i18n/es_ES.po | 121 + .../product_multi_barcode/i18n/es_MX.po | 116 + .../product_multi_barcode/i18n/es_PE.po | 116 + .../product_multi_barcode/i18n/es_PY.po | 116 + .../product_multi_barcode/i18n/es_VE.po | 116 + .../product_multi_barcode/i18n/eu.po | 124 + .../product_multi_barcode/i18n/fa.po | 116 + .../product_multi_barcode/i18n/fi.po | 121 + .../product_multi_barcode/i18n/fr.po | 127 + .../product_multi_barcode/i18n/fr_CA.po | 116 + .../product_multi_barcode/i18n/fr_CH.po | 121 + .../product_multi_barcode/i18n/fr_FR.po | 121 + .../product_multi_barcode/i18n/gl.po | 121 + .../product_multi_barcode/i18n/gl_ES.po | 116 + .../product_multi_barcode/i18n/he.po | 116 + .../product_multi_barcode/i18n/hr.po | 122 + .../product_multi_barcode/i18n/hr_HR.po | 122 + .../product_multi_barcode/i18n/it.po | 137 + .../product_multi_barcode/i18n/ja.po | 116 + .../product_multi_barcode/i18n/ko.po | 116 + .../product_multi_barcode/i18n/lt.po | 117 + .../product_multi_barcode/i18n/lt_LT.po | 117 + .../product_multi_barcode/i18n/lv.po | 117 + .../product_multi_barcode/i18n/mk.po | 116 + .../product_multi_barcode/i18n/mn.po | 116 + .../product_multi_barcode/i18n/nb.po | 116 + .../product_multi_barcode/i18n/nb_NO.po | 116 + .../product_multi_barcode/i18n/nl.po | 124 + .../product_multi_barcode/i18n/nl_BE.po | 116 + .../product_multi_barcode/i18n/nl_NL.po | 121 + .../product_multi_barcode/i18n/pl.po | 117 + .../i18n/product_multi_barcode.pot | 111 + .../i18n/product_multi_ean.pot | 90 + .../product_multi_barcode/i18n/pt.po | 136 + .../product_multi_barcode/i18n/pt_BR.po | 144 + .../product_multi_barcode/i18n/pt_PT.po | 116 + .../product_multi_barcode/i18n/ro.po | 122 + .../product_multi_barcode/i18n/ru.po | 123 + .../product_multi_barcode/i18n/sk.po | 121 + .../product_multi_barcode/i18n/sl.po | 147 + .../product_multi_barcode/i18n/sr@latin.po | 117 + .../product_multi_barcode/i18n/sv.po | 116 + .../product_multi_barcode/i18n/th.po | 116 + .../product_multi_barcode/i18n/tr.po | 123 + .../product_multi_barcode/i18n/tr_TR.po | 124 + .../product_multi_barcode/i18n/uk.po | 117 + .../product_multi_barcode/i18n/vi.po | 116 + .../product_multi_barcode/i18n/vi_VN.po | 121 + .../product_multi_barcode/i18n/zh_CN.po | 140 + .../product_multi_barcode/i18n/zh_TW.po | 116 + .../product_multi_barcode/models/__init__.py | 5 + .../models/product_barcode.py | 83 + .../models/product_product.py | 70 + .../models/product_template.py | 13 + .../readme/CONTRIBUTORS.rst | 11 + .../readme/DESCRIPTION.rst | 6 + .../product_multi_barcode/readme/USAGE.rst | 16 + .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 469 ++++ .../description/product_multi_barcode.png | Bin 0 -> 79837 bytes .../product_multi_barcode/tests/__init__.py | 3 + .../tests/test_product_multi_barcode.py | 76 + .../views/product_template_view.xml | 25 + .../views/product_view.xml | 46 + .../pyproject.toml | 42 + .../README.md | 47 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 74 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 74 + .../__init__.py | 1 + .../__manifest__.py | 21 + .../i18n/bs.po | 19 + .../i18n/it.po | 22 + ...t_multi_barcode_constraint_per_company.pot | 19 + .../models/__init__.py | 1 + .../models/product_barcode.py | 22 + .../readme/DESCRIPTION.rst | 4 + .../security/ir_rule.xml | 12 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 415 +++ .../pyproject.toml | 43 + .../README.md | 47 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 11 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 89 + .../__init__.py | 0 .../__manifest__.py | 14 + .../i18n/bs.po | 20 + .../i18n/it.po | 23 + .../i18n/product_multi_barcode_stock_menu.pot | 20 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/CREDITS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 435 +++ .../views/barcode_view.xml | 32 + .../pyproject.toml | 43 + .../README.md | 47 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 91 + .../__init__.py | 5 + .../__manifest__.py | 17 + .../product_packaging_multi_barcode/hooks.py | 13 + .../i18n/bs.po | 83 + .../i18n/es.po | 93 + .../i18n/fr.po | 84 + .../i18n/it.po | 95 + .../i18n/product_packaging_multi_barcode.pot | 83 + .../models/__init__.py | 5 + .../models/product_barcode.py | 75 + .../models/product_packaging.py | 49 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/CREDITS.rst | 5 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 441 +++ .../tests/__init__.py | 4 + .../test_product_packaging_multi_barcode.py | 72 + .../views/barcode_view.xml | 34 + .../views/product_packaging_view.xml | 20 + .../pyproject.toml | 43 + .../README.md | 50 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 9 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 20 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 12 + .../pyproject.toml | 46 + .../stock_barcodes/README.rst | 419 +++ .../stock_barcodes/__init__.py | 7 + .../stock_barcodes/__manifest__.py | 47 + .../data/stock_barcodes_action.xml | 50 + .../data/stock_barcodes_option.xml | 635 +++++ .../stock_barcodes/hooks.py | 20 + .../stock_barcodes/i18n/bs.po | 2049 ++++++++++++++ .../stock_barcodes/i18n/es.po | 2392 +++++++++++++++++ .../stock_barcodes/i18n/fr.po | 2167 +++++++++++++++ .../stock_barcodes/i18n/it.po | 2375 ++++++++++++++++ .../stock_barcodes/i18n/stock_barcodes.pot | 2049 ++++++++++++++ .../stock_barcodes/i18n/tr.po | 2215 +++++++++++++++ .../stock_barcodes/models/__init__.py | 8 + .../models/barcode_events_mixin.py | 11 + .../models/stock_barcodes_action.py | 189 ++ .../models/stock_barcodes_option.py | 127 + .../stock_barcodes/models/stock_move.py | 37 + .../stock_barcodes/models/stock_move_line.py | 40 + .../stock_barcodes/models/stock_picking.py | 73 + .../models/stock_picking_type.py | 104 + .../stock_barcodes/models/stock_quant.py | 80 + .../stock_barcodes/readme/CONTRIBUTORS.rst | 25 + .../stock_barcodes/readme/DESCRIPTION.rst | 11 + .../stock_barcodes/readme/HISTORY.rst | 29 + .../stock_barcodes/readme/ROADMAP.rst | 4 + .../stock_barcodes/readme/USAGE.rst | 260 ++ .../stock_barcodes/reports/__init__.py | 1 + .../reports/barcode_actions_report.py | 16 + .../reports/barcode_actions_report.xml | 25 + .../stock_barcodes/reports/reports.xml | 28 + .../security/ir.model.access.csv | 11 + .../static/description/icon.png | Bin 0 -> 2994 bytes .../static/description/icon.svg | 1041 +++++++ .../static/description/index.html | 728 +++++ .../static/src/docs/barcodes_actions.pdf | Bin 0 -> 7883 bytes .../static/src/docs/barcodes_demo.pdf | Bin 0 -> 64270 bytes .../static/src/img/add_product.png | Bin 0 -> 6351 bytes .../static/src/img/apply_inventory.png | Bin 0 -> 6214 bytes .../static/src/img/apply_inventory_reason.png | Bin 0 -> 23054 bytes .../src/img/barcode_interface_picking.png | Bin 0 -> 63492 bytes .../confirm_all_quantity_items_picking.png | Bin 0 -> 22371 bytes .../static/src/img/confirm_items_picking.png | Bin 0 -> 14957 bytes .../static/src/img/create_barcode_action.png | Bin 0 -> 19880 bytes .../static/src/img/form_add_product.png | Bin 0 -> 60984 bytes .../src/img/form_add_product_quantity.png | Bin 0 -> 24353 bytes .../static/src/img/form_add_product_reset.png | Bin 0 -> 22790 bytes .../src/img/inventory_barcode_action.png | Bin 0 -> 35164 bytes .../static/src/img/list_action_items.png | Bin 0 -> 19198 bytes .../static/src/img/list_items.png | Bin 0 -> 64067 bytes .../static/src/img/list_items_picking.png | Bin 0 -> 63492 bytes .../src/img/list_items_picking_edit.png | Bin 0 -> 15760 bytes .../src/img/list_items_picking_quantity.png | Bin 0 -> 15294 bytes .../src/img/list_items_picking_scanned.png | Bin 0 -> 65272 bytes .../static/src/img/list_picking.png | Bin 0 -> 55065 bytes .../static/src/img/print_barcodes.png | Bin 0 -> 22284 bytes .../stock_barcodes/static/src/img/scan.png | Bin 0 -> 5405 bytes .../static/src/scss/barcode.scss | 135 + .../stock_barcodes/static/src/scss/stock.scss | 285 ++ .../stock_barcodes/static/src/sounds/bell.wav | Bin 0 -> 17684 bytes .../static/src/sounds/error.wav | Bin 0 -> 25190 bytes .../src/utils/barcode_handler_field.esm.js | 36 + .../src/utils/barcodes_models_utils.esm.js | 26 + .../actions/stock_barcode_main_menu.esm.js | 88 + .../actions/stock_barcode_main_menu.scss | 74 + .../views/actions/stock_barcode_main_menu.xml | 45 + .../src/views/form/form_controller.esm.js | 71 + .../static/src/views/form/form_view.esm.js | 14 + .../src/views/kanban/kanban_record.esm.js | 27 + .../src/views/kanban/kanban_renderer.esm.js | 200 ++ .../src/views/kanban/kanban_view.esm.js | 8 + .../views/kanban/stock_barcodes_kanban.xml | 28 + .../static/src/views/view_compiler.esm.js | 16 + .../static/src/views/views.esm.js | 225 ++ .../static/src/widgets/boolean_toggle.esm.js | 72 + .../static/src/widgets/numeric_step.esm.js | 40 + .../static/src/widgets/numeric_step.xml | 17 + .../static/src/widgets/view_button.esm.js | 8 + .../static/src/widgets/view_button.xml | 14 + .../stock_barcodes/tests/__init__.py | 4 + .../stock_barcodes/tests/common.py | 192 ++ .../tests/test_stock_barcodes.py | 141 + .../tests/test_stock_barcodes_new_lot.py | 25 + .../tests/test_stock_barcodes_picking.py | 539 ++++ .../views/stock_barcodes_action_view.xml | 116 + .../views/stock_barcodes_menu.xml | 10 + .../views/stock_barcodes_option_view.xml | 111 + .../views/stock_location_views.xml | 19 + .../views/stock_picking_views.xml | 131 + .../stock_barcodes/wizard/__init__.py | 6 + .../stock_barcodes_candidate_picking.py | 148 + .../wizard/stock_barcodes_read.py | 905 +++++++ .../wizard/stock_barcodes_read_inventory.py | 162 ++ .../stock_barcodes_read_inventory_views.xml | 204 ++ .../wizard/stock_barcodes_read_picking.py | 1021 +++++++ .../stock_barcodes_read_picking_views.xml | 415 +++ .../wizard/stock_barcodes_read_todo.py | 223 ++ .../wizard/stock_barcodes_read_todo_view.xml | 214 ++ .../wizard/stock_barcodes_read_views.xml | 489 ++++ .../wizard/stock_production_lot.py | 60 + .../wizard/stock_production_lot_views.xml | 48 + .../README.md | 47 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 9 + .../pyproject.toml | 43 + .../stock_barcodes_picking_batch/README.rst | 90 + .../stock_barcodes_picking_batch/__init__.py | 4 + .../__manifest__.py | 25 + .../data/stock_barcodes_action.xml | 15 + .../stock_barcodes_picking_batch/i18n/bs.po | 260 ++ .../stock_barcodes_picking_batch/i18n/es.po | 292 ++ .../stock_barcodes_picking_batch/i18n/it.po | 270 ++ .../i18n/stock_barcodes_picking_batch.pot | 260 ++ .../models/__init__.py | 3 + .../models/stock_picking_batch.py | 39 + .../readme/CONTRIBUTORS.rst | 5 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 1 + .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 439 +++ .../static/src/js/barcodes_models_mixin.js | 17 + .../src/js/barcodes_models_utils.esm.js | 7 + .../tests/__init__.py | 2 + .../test_stock_barcodes_picking_batch.py | 154 ++ .../views/stock_picking_batch_views.xml | 41 + .../wizard/__init__.py | 3 + .../stock_barcodes_read_picking_batch.py | 358 +++ ...tock_barcodes_read_picking_batch_views.xml | 344 +++ .../README.md | 46 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 17 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 15 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 32 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 9 + .../pyproject.toml | 42 + .../README.rst | 113 + .../__init__.py | 6 + .../__manifest__.py | 28 + .../controllers/__init__.py | 1 + .../controllers/main.py | 69 + .../data/paperformat_label.xml | 46 + .../i18n/bs.po | 363 +++ .../i18n/es.po | 380 +++ .../i18n/it.po | 378 +++ .../stock_picking_product_barcode_report.pot | 363 +++ .../models/__init__.py | 4 + .../models/ir_actions_report.py | 10 + .../models/product_packaging.py | 13 + .../models/res_company.py | 18 + .../models/res_config_settings.py | 20 + .../readme/CONFIGURE.rst | 8 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 5 + .../report/report_base_label.xml | 25 + .../report/report_label_barcode.xml | 102 + ...t_label_barcode_quant_package_template.xml | 109 + .../report/report_label_barcode_template.xml | 97 + .../report/report_label_custom.xml | 25 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 461 ++++ .../tests/__init__.py | 1 + ...st_stock_picking_product_barcode_report.py | 108 + .../views/ir_actions_report_view.xml | 13 + .../views/product_views.xml | 24 + .../views/res_config_settings_view.xml | 48 + .../wizard/__init__.py | 4 + .../stock_barcode_selection_printing.py | 236 ++ .../stock_barcode_selection_printing_view.xml | 124 + 627 files changed, 55555 insertions(+) create mode 100644 README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/demo/res_users.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/am.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/barcodes_generator_abstract.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/ca.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/de.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/el_GR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fi.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/gl.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr_HR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl_NL.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_PT.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/sl.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/tr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/zh_CN.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_generate_mixin.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_rule.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONFIGURE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CREDITS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/INSTALL.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/ROADMAP.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/security/res_groups.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_nomenclature_form.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_rule_form_manual.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_rule_form_sequence.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/models.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/test_barcodes_generator_abstract.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/menu.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_nomenclature.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_rule.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/barcode_rule.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/function.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/ir_sequence.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/stock_location.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/hooks.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/barcodes_generator_location.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/hr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/nl_NL.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/tr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/barcode_rule.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/stock_location.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONFIGURE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CREDITS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/stock_location_sequence_generation.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/tests/test_barcode_generator.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/views/stock_location.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/demo/barcode_rule.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/demo/ir_sequence.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/demo/product_packaging.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/barcodes_generator_package.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/es_ES.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/hr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/nl_NL.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/i18n/tr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/models/barcode_rule.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/models/product_packaging.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/readme/CONFIGURE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/readme/CREDITS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/static/description/product_packaging_sequence_generation.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/tests/test_barcodes_generator_package.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/barcodes_generator_package/views/product_packaging.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/demo/barcode_rule.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/demo/product.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/demo/res_users.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/barcodes_generator_product.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/es_ES.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/hr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/nl_NL.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/tr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/i18n/zh_CN.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/models/barcode_rule.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/models/product_product.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/models/product_template.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/readme/CONFIGURE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/readme/CREDITS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/static/description/product_template_manual_generation.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/tests/test_barcodes_generator_product.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/views/view_product_product.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/barcodes_generator_product/views/view_product_template.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/i18n/product_barcode_constraint_per_company.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/models/product_product.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/product_barcode_constraint_per_company/tests/test_module.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/hooks.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/am.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/ar.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/bg.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/ca.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/ca_ES.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/cs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/da.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/da_DK.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/de.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/el_GR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/en_GB.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_AR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_CO.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_CR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_EC.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_ES.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_MX.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_PE.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_PY.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/es_VE.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/eu.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/fa.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/fi.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/fr_CA.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/fr_CH.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/fr_FR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/gl.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/gl_ES.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/he.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/hr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/hr_HR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/ja.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/ko.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/lt.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/lt_LT.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/lv.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/mk.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/mn.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/nb.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/nb_NO.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/nl.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/nl_BE.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/nl_NL.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/pl.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/product_multi_barcode.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/product_multi_ean.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/pt.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/pt_PT.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/ro.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/ru.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/sk.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/sl.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/sr@latin.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/sv.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/th.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/tr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/tr_TR.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/uk.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/vi.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/vi_VN.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/zh_CN.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/i18n/zh_TW.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/models/product_barcode.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/models/product_product.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/models/product_template.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/static/description/product_multi_barcode.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/tests/test_product_multi_barcode.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/views/product_template_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/product_multi_barcode/views/product_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/i18n/product_multi_barcode_constraint_per_company.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/models/product_barcode.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/security/ir_rule.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/product_multi_barcode_constraint_per_company/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/i18n/product_multi_barcode_stock_menu.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/readme/CREDITS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/product_multi_barcode_stock_menu/views/barcode_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/hooks.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/i18n/product_packaging_multi_barcode.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/models/product_barcode.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/models/product_packaging.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/readme/CREDITS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/tests/test_product_packaging_multi_barcode.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/views/barcode_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/product_packaging_multi_barcode/views/product_packaging_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/data/stock_barcodes_action.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/data/stock_barcodes_option.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/hooks.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/i18n/fr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/i18n/stock_barcodes.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/i18n/tr.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/barcode_events_mixin.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_barcodes_action.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_barcodes_option.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_move.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_move_line.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_picking.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_picking_type.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_quant.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/readme/HISTORY.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/readme/ROADMAP.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/reports/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/reports/barcode_actions_report.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/reports/barcode_actions_report.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/reports/reports.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/security/ir.model.access.csv create mode 100755 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/description/icon.svg create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/docs/barcodes_actions.pdf create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/docs/barcodes_demo.pdf create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/add_product.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/apply_inventory.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/apply_inventory_reason.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/barcode_interface_picking.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/confirm_all_quantity_items_picking.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/confirm_items_picking.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/create_barcode_action.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/form_add_product.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/form_add_product_quantity.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/form_add_product_reset.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/inventory_barcode_action.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/list_action_items.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/list_items.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/list_items_picking.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/list_items_picking_edit.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/list_items_picking_quantity.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/list_items_picking_scanned.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/list_picking.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/print_barcodes.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/img/scan.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/scss/barcode.scss create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/scss/stock.scss create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/sounds/bell.wav create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/sounds/error.wav create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/utils/barcode_handler_field.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/utils/barcodes_models_utils.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/actions/stock_barcode_main_menu.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/actions/stock_barcode_main_menu.scss create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/actions/stock_barcode_main_menu.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_controller.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_view.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_record.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_renderer.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_view.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/stock_barcodes_kanban.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/view_compiler.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/views.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/widgets/boolean_toggle.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/widgets/numeric_step.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/widgets/numeric_step.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/widgets/view_button.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/widgets/view_button.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/tests/common.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/tests/test_stock_barcodes.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/tests/test_stock_barcodes_new_lot.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/tests/test_stock_barcodes_picking.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/views/stock_barcodes_action_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/views/stock_barcodes_menu.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/views/stock_barcodes_option_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/views/stock_location_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/views/stock_picking_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_candidate_picking.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read_inventory.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read_inventory_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read_picking.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read_picking_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read_todo.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read_todo_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_barcodes_read_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_production_lot.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/wizard/stock_production_lot_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/data/stock_barcodes_action.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/i18n/stock_barcodes_picking_batch.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/models/stock_picking_batch.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/static/src/js/barcodes_models_mixin.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/static/src/js/barcodes_models_utils.esm.js create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/tests/test_stock_barcodes_picking_batch.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/views/stock_picking_batch_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/wizard/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/wizard/stock_barcodes_read_picking_batch.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch/stock_barcodes_picking_batch/wizard/stock_barcodes_read_picking_batch_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/README.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/FAQ.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/INSTALL.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/MODELS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/REPORTS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/SECURITY.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/USAGE.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/pyproject.toml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/README.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/__manifest__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/controllers/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/controllers/main.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/data/paperformat_label.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/i18n/bs.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/i18n/es.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/i18n/it.po create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/i18n/stock_picking_product_barcode_report.pot create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/models/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/models/ir_actions_report.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/models/product_packaging.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/models/res_company.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/models/res_config_settings.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/readme/CONFIGURE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/readme/USAGE.rst create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/report/report_base_label.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/report/report_label_barcode.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/report/report_label_barcode_quant_package_template.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/report/report_label_barcode_template.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/report/report_label_custom.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/static/description/icon.png create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/static/description/index.html create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/tests/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/tests/test_stock_picking_product_barcode_report.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/views/ir_actions_report_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/views/product_views.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/views/res_config_settings_view.xml create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/wizard/__init__.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/wizard/stock_barcode_selection_printing.py create mode 100644 odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report/stock_picking_product_barcode_report/wizard/stock_barcode_selection_printing_view.xml diff --git a/README.md b/README.md new file mode 100644 index 0000000..8b1bca3 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# OCA Warehouse + +This repository contains **12** OCA packages for warehouse. + +## Packages Included (12 packages) + +- **odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract** - From stock: logistics_barcode_barcodes_generator_abstract +- **odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location** - From stock: logistics_barcode_barcodes_generator_location +- **odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_package** - From stock: logistics_barcode_barcodes_generator_package +- **odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_product** - From stock: logistics_barcode_barcodes_generator_product +- **odoo-bringout-oca-stock-logistics-barcode-product_barcode_constraint_per_company** - From stock: logistics_barcode_product_barcode_constraint_per_company +- **odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode** - From stock: logistics_barcode_product_multi_barcode +- **odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_constraint_per_company** - From stock: logistics_barcode_product_multi_barcode_constraint_per_company +- **odoo-bringout-oca-stock-logistics-barcode-product_multi_barcode_stock_menu** - From stock: logistics_barcode_product_multi_barcode_stock_menu +- **odoo-bringout-oca-stock-logistics-barcode-product_packaging_multi_barcode** - From stock: logistics_barcode_product_packaging_multi_barcode +- **odoo-bringout-oca-stock-logistics-barcode-stock_barcodes** - From stock: logistics_barcode_stock_barcodes +- **odoo-bringout-oca-stock-logistics-barcode-stock_barcodes_picking_batch** - From stock: logistics_barcode_stock_barcodes_picking_batch +- **odoo-bringout-oca-stock-logistics-barcode-stock_picking_product_barcode_report** - From stock: logistics_barcode_stock_picking_product_barcode_report + + +## Installation + +Install any package from this category: + +```bash +# Install from local directory +pip install packages/oca-warehouse/PACKAGE_NAME/ + +# Install in development mode +pip install -e packages/oca-warehouse/PACKAGE_NAME/ + +# Using uv (recommended for speed) +uv add packages/oca-warehouse/PACKAGE_NAME/ +``` + +## Repository Structure + +Each package in this repository follows the standard Odoo addon structure: + +``` +oca-warehouse/ +├── odoo-bringout-oca-PROJECT-ADDON/ +│ ├── ADDON_NAME/ # Complete addon code +│ │ ├── __init__.py +│ │ ├── __manifest__.py +│ │ └── ... (models, views, etc.) +│ ├── pyproject.toml # Python package configuration +│ └── README.md # Package documentation +└── ... +``` + +## Contributing + +These packages are maintained as part of the [OCA (Odoo Community Association)](https://github.com/OCA) ecosystem. + +## License + +Each package maintains its original license as specified in the OCA repositories. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/README.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/README.md new file mode 100644 index 0000000..0f049b8 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/README.md @@ -0,0 +1,46 @@ +# Generate Barcodes (Abstract) + +Odoo addon: barcodes_generator_abstract + +## Installation + +```bash +pip install odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract +``` + +## Dependencies + +This addon depends on: +- barcodes + +## Manifest Information + +- **Name**: Generate Barcodes (Abstract) +- **Version**: 16.0.3.1.0 +- **Category**: Tools +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/stock-logistics-barcode](https://github.com/OCA/stock-logistics-barcode) branch 16.0, addon `barcodes_generator_abstract`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Reports: doc/REPORTS.md +- Security: doc/SECURITY.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/README.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/README.rst new file mode 100644 index 0000000..ef31dfa --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/README.rst @@ -0,0 +1,204 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +============================ +Generate Barcodes (Abstract) +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:537901b8bc9e1b9e144eb0e0f12996612cbbc4d0a3f0af1eb9b8012ccb8a29d2 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-barcode/tree/16.0/barcodes_generator_abstract + :alt: OCA/stock-logistics-barcode +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-16-0/stock-logistics-barcode-16-0-barcodes_generator_abstract + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-barcode&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for any Model. + +For example, if the barcode pattern is "20.....{NNNDD}": + +* the EAN13 code will begin with '20', +* followed by 5 digits (named *Barcode Base* in this module), +* followed by 5 others digits to define the variable price with 2 decimals, +* the last digit (the 13rd digit) is the control digit (i.e. the checksum). + +With this module, it is possible to: + +* Affect a pattern (barcode.rule) to a model + +* Define a Barcode base: + * manually, if the base of the barcode must be set by a user (typically an + internal code defined in your company). + * automatically by a sequence, if you want to let Odoo increment a + sequence (typical case of a customer number incrementation). + +* Generate a barcode, based on the defined pattern and the barcode base + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +This module use an extra python library named 'python-barcode' you should install +to make barcode generation works properly. + +``sudo pip install python-barcode`` + +Configuration +============= + +To configure this module, you need to: + +* Go to Settings / Technical / Sequences & Identifiers / Barcode Nomenclatures +* Select a Nomenclature +* Create or select a rule + +.. image:: https://raw.githubusercontent.com/OCA/stock-logistics-barcode/16.0/barcodes_generator_abstract/static/description/barcode_nomenclature_form.png + +* For manual generation, set: + * 'Base set Manually' in 'Generate Type' + * Set the model + +.. image:: https://raw.githubusercontent.com/OCA/stock-logistics-barcode/16.0/barcodes_generator_abstract/static/description/barcode_rule_form_manual.png + +* For automatic generation, set: + * 'Base managed by Sequence' in 'Generate Type' + * Set the model + * Generate a new sequence by button, or affect a existing one + +.. image:: https://raw.githubusercontent.com/OCA/stock-logistics-barcode/16.0/barcodes_generator_abstract/static/description/barcode_rule_form_sequence.png + +In all cases, padding will be computed automaticaly, based on the number +of '.' in the Barcode Pattern field. + +Usage +===== + +This module is an abstract module. You can configure Barcode Rule, but to +enable this feature, you need to install an extra module for a given model. +This repository provide 'barcodes_generator_product' and +'barcodes_generator_partner' module to generate barcode for product or partner +model. + +Alternatively, you can develop a custom module for a custom model. See +'Inheritance' parts. + +If you want to generate barcode for another model, you can create a custom +module that depend on 'barcodes_generator_abstract' and inherit your model +like that: + +.. code:: + + class MyModel(models.Model): + _name = 'my.model' + _inherit = ['my.model', 'barcode.generate.mixin'] + + class barcode_rule(models.Model): + _inherit = 'barcode.rule' + + generate_model = fields.Selection(selection_add=[('my.model', 'My Model')]) + +Eventually, you should inherit your model view adding buttons and fields. + +Note +~~~~ + +Your model should have a field 'barcode' defined. + +Known issues / Roadmap +====================== + +* On barcode.rule model, constraint and domain system could be set between + 'type' and 'generate_model' fields. +* Cache is being cleared in a constraint in `barcode.rule`. Mutating in a + constraint is bad practice & should be moved somewhere. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP +* La Louve +* LasLabs + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL (https://twitter.com/legalsylvain) +* Dave Lasley +* `Tecnativa `__: + + * Carlos Roca + +* `Ooops404 `__: + + * Ilyas + +Other credits +~~~~~~~~~~~~~ + +Images +~~~~~~ + +* Icon of the module is based on the Oxygen Team work and is under LGPL licence: + http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org.html + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px + :target: https://github.com/legalsylvain + :alt: legalsylvain + +Current `maintainer `__: + +|maintainer-legalsylvain| + +This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__init__.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__init__.py new file mode 100644 index 0000000..83e553a --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__manifest__.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__manifest__.py new file mode 100644 index 0000000..577abe3 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright (C) 2014-Today GRAP (http://www.grap.coop) +# Copyright (C) 2016-Today La Louve (http://www.lalouve.net) +# Copyright (C) 2018 Komit (https://komit-consulting.com) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Generate Barcodes (Abstract)", + "summary": "Generate Barcodes for Any Models", + "version": "16.0.3.1.0", + "category": "Tools", + "author": "GRAP, La Louve, LasLabs, Odoo Community Association (OCA)", + "maintainers": ["legalsylvain"], + "website": "https://github.com/OCA/stock-logistics-barcode", + "license": "AGPL-3", + "depends": ["barcodes"], + "data": [ + "security/res_groups.xml", + "views/view_barcode_rule.xml", + "views/view_barcode_nomenclature.xml", + "views/menu.xml", + ], + "demo": ["demo/res_users.xml"], + "external_dependencies": {"python": ["python-barcode"]}, +} diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/demo/res_users.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/demo/res_users.xml new file mode 100644 index 0000000..6c781b7 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/demo/res_users.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/am.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/am.po new file mode 100644 index 0000000..9143b4c --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/am.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Amharic (https://www.transifex.com/oca/teams/23907/am/)\n" +"Language: am\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "ID" +#~ msgstr "ID" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/barcodes_generator_abstract.pot b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/barcodes_generator_abstract.pot new file mode 100644 index 0000000..e2686d4 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/barcodes_generator_abstract.pot @@ -0,0 +1,144 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \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: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to" +" 'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/bs.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/bs.po new file mode 100644 index 0000000..a3a639c --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/bs.po @@ -0,0 +1,144 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \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: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "Automatsko generiranje" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "Baza barkoda" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "Generiranje barkoda" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "Nomenklature barkodova" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "Barkod pravilo" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "Baza upravljana sekvencijom" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "Baza postavljena ručno" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "Mixin generiranja barkoda" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "Generiši barkodove" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to" +" 'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Model generiranja" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "Tip generiranja" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "Sekvenca generiranja" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "Ako je 'Tip generiranja' postavljen, spomenite model povezan s ovim pravilom." + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "Bez generiranja" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "Dopunjavanje" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Odaberite pravilo za generiranje barkoda" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "Sekvenca - %s" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/ca.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/ca.po new file mode 100644 index 0000000..214c37f --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/ca.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "ID" +#~ msgstr "ID" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/de.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/de.po new file mode 100644 index 0000000..7eed57e --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/de.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2020-08-04 12:59+0000\n" +"Last-Translator: André Volksdorf \n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "Automatische Generierung" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "Strichcode Basis" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "Strichcode Erstellung" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "Strichcode-Nomenklaturen" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "Strichcode-Regeln" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Anzeigename" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Zuletzt geändert am" + +#, fuzzy +#~ msgid "Sequence Id" +#~ msgstr "Reihenfolge" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/el_GR.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/el_GR.po new file mode 100644 index 0000000..376b3bf --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/el_GR.po @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Greek (Greece) (https://www.transifex.com/oca/teams/23907/" +"el_GR/)\n" +"Language: el_GR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "ID" +#~ msgstr "Κωδικός" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/es.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/es.po new file mode 100644 index 0000000..1cbe013 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/es.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2023-09-03 13:35+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" +"Permite generar el código de barras, incluyendo un número (una base) en el " +"código de barras final.\n" +"\n" +" - 'Base establecida manualmente' : El usuario debe establecer manualmente " +"el valor de la base del código de barras.\n" +" - 'Base gestionada por Secuencia': El sistema generará la base a través de " +"una secuencia" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "Generación automática" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "Base de los código de barras" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "Generar código de barras" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "Nomenclatura del código de barras" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "Regla del código de barras" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "Base gestionada por secuencia" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "Base establecida manualmente" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" +"Márquelo para generar automáticamente una base y un código de barras si se " +"selecciona esta regla." + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "Generar código de barras mixto" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "Generar código de barras" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" +"Generar base solo se puede usar con la regla de código de barras con " +"'Generar tipo' establecido en 'Base gestionada por secuencia'" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Generar modelo" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "Generar tipo" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "Generación de secuencia" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" +"Si establece 'Generar tipo', mencione el modelo relacionado con esta regla." + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" +"Si deja el campo de secuencia en blanco, se creará automáticamente una " +"secuencia cuando se guarde la regla de código de barras, basada en el " +"relleno del código de barras." + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "No generar" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "Relleno" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Seleccione una regla para generar un código de barras" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "Secuencia - %s" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" +"Este valor se utiliza para generar códigos de barras según la configuración " +"de la regla del código de barras." + +#~ msgid "" +#~ "Allow to generate barcode, including a number (a base) in the final " +#~ "barcode.\n" +#~ " 'Base Set Manually' : User should set manually the value of the barcode " +#~ "base\n" +#~ " 'Base managed by Sequence': User will use a button to generate a new " +#~ "base. This base will be generated by a sequence" +#~ msgstr "" +#~ "Permite generar código de barras, añadiendo un número (configurado en la " +#~ "base) en el código de barras final.\n" +#~ " 'Configurar base manualmente': el usuario debe configurar manualmente " +#~ "el valor de la base del código de barras\n" +#~ " 'Base gestionada por secuencia': El usuario utilizará un botón para " +#~ "generar una nueva base. Esta base será generada por una secuencia" + +#~ msgid "" +#~ "Check this to automatically generate a barcode upon creation of a new " +#~ "record in the mixed model." +#~ msgstr "" +#~ "Seleccione para generar automáticamente un código de barras al crear un " +#~ "nuevo registro en el modelo mixto." + +#, python-format +#~ msgid "" +#~ "Only one rule per model can be used for automatic barcode generation." +#~ msgstr "" +#~ "Solo se puede utilizar una regla por modelo para la generación automática " +#~ "de códigos de barras." + +#~ msgid "Display Name" +#~ msgstr "Nombre mostrado" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#, fuzzy +#~ msgid "Sequence Id" +#~ msgstr "Secuencia" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fi.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fi.po new file mode 100644 index 0000000..eeae5c2 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fi.po @@ -0,0 +1,160 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Nimi" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Viimeksi muokattu" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fr.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fr.po new file mode 100644 index 0000000..bf65d05 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/fr.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-06-06 13:40+0000\n" +"PO-Revision-Date: 2023-06-06 13:40+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" +"Autorise à générer des codes barre en incluant un numéro (base du code " +"barre) dans le code barre final.\n" +" 'Base indiquée manuellement' : L'utilisateur devra indiquer manuellement la " +"base du barcode\n" +" 'Base gérée via une séquence': L'utilisateur devra utiliser un boutton pour " +"générer une nouvelle base. Cette base sera générée par une séquence" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "Génération Automatique" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "Base du code Barre" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "Génération d'un code barre" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "Nomenclatures codes barres" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "Règle de code barre" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "Base gérée via une séquence" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "Base indiquée manuellement" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" +"Cocher cette case pour générer automatiquement une base et un code barre si " +"cette règle est sélectionnée." + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "Générer des codes barre" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "Générer des codes barre" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" +"Générer une base de code barre peut être utilisée seulement si la règle de " +"code barre est de type 'gérée via une séquence'" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Type de génération" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "Type de génération" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "Séquence de génération" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" +"Si 'Générer Type' est défini, mentionnez le modèle associé à cette règle." + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" +"Si vous laissez le champ séquence vide, une séquence sera créé " +"automatiquement quand la règle de code barre sera sauvegardée, avec une " +"configuration basée sur la structure du code barre." + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "Pas de génération" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "Taille" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Sélectionner une règle pour génerer un code barre" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "Séquence - %s" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" +"Cette valeur est utilisée pour générer un code barre en se basant sur le " +"paramétrage de la règle de code barre." diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/gl.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/gl.po new file mode 100644 index 0000000..8dbf538 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/gl.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "ID" +#~ msgstr "ID" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr.po new file mode 100644 index 0000000..be1fede --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr.po @@ -0,0 +1,167 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-02 01:48+0000\n" +"PO-Revision-Date: 2017-12-02 01:48+0000\n" +"Last-Translator: Bole , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "" +#~ "Allow to generate barcode, including a number (a base) in the final " +#~ "barcode.\n" +#~ " 'Base Set Manually' : User should set manually the value of the barcode " +#~ "base\n" +#~ " 'Base managed by Sequence': User will use a button to generate a new " +#~ "base. This base will be generated by a sequence" +#~ msgstr "" +#~ "Omogućuje generiranje barkodova, uključujući broj(osnova) u finalnom " +#~ "barkodu.\n" +#~ "'Osnova postavljena ručno' : korisnik treba ručno postaviti vrijednost " +#~ "osnovice barkoda.\n" +#~ "'Osnova prema sekvenci' : korisnik će koristiti guzmb za generirnje nove " +#~ "osnove. Ta osnova će biti generirana iz sekvence." diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr_HR.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr_HR.po new file mode 100644 index 0000000..a1f2dc9 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/hr_HR.po @@ -0,0 +1,156 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-16 01:43+0000\n" +"PO-Revision-Date: 2017-02-16 01:43+0000\n" +"Last-Translator: Bole , 2017\n" +"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/" +"hr_HR/)\n" +"Language: hr_HR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Naziv" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/it.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/it.po new file mode 100644 index 0000000..10df78e --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/it.po @@ -0,0 +1,230 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2024-01-26 10:35+0000\n" +"Last-Translator: Francesco Foresti \n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" +"Consente di generare un codice a barre, incluso un numero (una base) nel " +"codice a barre finale.\n" +"\n" +" 'Base impostata manualmente' : l'utente deve impostare manualmente il " +"valore della base del codice a barre\n" +" 'Base gestita da sequenza': l'utente utilizzerà un pulsante per generare " +"una nuova base. Questa base sarà generata da una sequenza" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "Generazione Automatica" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "Base codice a barre" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "Generazione codici a barre" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "Nomenclatura Codice a Barre" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "Regola codice a barre" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "Base gestita da Sequenza" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "Base impostata Manualmente" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" +"Selezionare questa opzione per generare qutomaticamente una base e un codice " +"a barre se questa regola è selezionata." + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "Genera Codice a barre" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "Genera codici a barre" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" +"Genera base può essere utilizzato solo con la regola del codice a barre con " +"'Genera tipo' impostato su 'Base gestita da sequenza'" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Genera modello" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "Genera tipo" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "Sequenza generazione" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" +"Se 'Genera tipo' è impostato, menzionare il modello relativo a questa regola." + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" +"Se si lascia vuoto il campo sequenza, una sequenza verrà creata " +"automaticamente quando la regola codice a barre verrà salvata, in base al " +"riempimento del codice a barre." + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "Nessuna generazione" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "Padding" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Selezionare una regola per generare il codice a barre" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "Sequenza - %s" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" +"Questo valore è utilizzato per generare il codice a barre in accordo alle " +"impostazioni della regola del codice a barre." + +#~ msgid "" +#~ "Allow to generate barcode, including a number (a base) in the final " +#~ "barcode.\n" +#~ " 'Base Set Manually' : User should set manually the value of the barcode " +#~ "base\n" +#~ " 'Base managed by Sequence': User will use a button to generate a new " +#~ "base. This base will be generated by a sequence" +#~ msgstr "" +#~ "Consenti di generare un codice a barre, incluso un numero (a base) nel " +#~ "codice a barre finale.\n" +#~ " 'Base impostata manualmente' : L'utente deve impostare manualmente il " +#~ "valore della base del codice a barre\n" +#~ " 'Base gestita da Sequence': L'utente utilizzerà un pulsante per generare " +#~ "una nuova base. Questa base sarà generata da una sequenza" + +#~ msgid "" +#~ "Check this to automatically generate a barcode upon creation of a new " +#~ "record in the mixed model." +#~ msgstr "" +#~ "Spuntare questo per generare automaticamente un codice a barre al momento " +#~ "della creazione di un nuovo record nel modello misto." + +#, python-format +#~ msgid "" +#~ "Only one rule per model can be used for automatic barcode generation." +#~ msgstr "" +#~ "Solo una regola per modello può essere usata per la generazione " +#~ "automatica dei codici a barre." + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "Generate Sequence" +#~ msgstr "Genera Sequenza" + +#, python-format +#~ msgid "" +#~ "Generate Sequence is possible only if 'Generate Type' is set to 'Base " +#~ "managed by Sequence'" +#~ msgstr "" +#~ "Genera Sequenza è possibile solo se 'Genera Tipo' è impostato per 'Base " +#~ "gestita da sequenza'" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + +#~ msgid "Partners" +#~ msgstr "Partner" + +#~ msgid "Products" +#~ msgstr "Prodotti" + +#~ msgid "Sequence Id" +#~ msgstr "ID Sequenza" + +#~ msgid "Stock Location" +#~ msgstr "Ubicazione Scorte" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl.po new file mode 100644 index 0000000..0f841e2 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl.po @@ -0,0 +1,157 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Te tonen naam" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst bijgewerkt op" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl_NL.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl_NL.po new file mode 100644 index 0000000..2f61a61 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/nl_NL.po @@ -0,0 +1,168 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-07 15:18+0000\n" +"PO-Revision-Date: 2017-07-07 15:18+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Weergavenaam" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst aangepast op" + +#, fuzzy +#~ msgid "Sequence Id" +#~ msgstr "Volgorde" + +#~ msgid "barcode.rule" +#~ msgstr "barcode.rule" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt.po new file mode 100644 index 0000000..6087f1c --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "ID" +#~ msgstr "ID" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_BR.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_BR.po new file mode 100644 index 0000000..f0702fa --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_BR.po @@ -0,0 +1,178 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2017 +# falexandresilva , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-07 15:18+0000\n" +"PO-Revision-Date: 2024-07-06 20:58+0000\n" +"Last-Translator: Rodrigo Sottomaior Macedo " +"\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/" +"23907/pt_BR/)\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" +"Permite gerar código de barras, incluindo um número (uma base) no código de " +"barras final.\n" +"\n" +" - 'Base Set Manually': O usuário deve definir manualmente o valor da base " +"do código de barras\n" +" - 'Base gerenciada por Sequência': Sistema irá gerar a base através de uma " +"sequência" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "Geração Automática" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "Base de código de barras" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "Geração de código de barras" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "Nomenclaturas de código de barras" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "Regra do código de barras" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "Base gerenciada por Sequencia" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "Base definida manualmente" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" +"Marque isto para gerar automaticamente uma base e um código de barras se " +"esta regra estiver selecionada." + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "Gerar mixin de código de barras" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "Gerar códigos de barras" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" +"Gerar Base pode ser usado apenas com regra de código de barras com 'Gerar " +"Tipo' definido como 'Base gerenciada por Sequência'" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Gerar modelo" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "Gerar tipo" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "Sequência de Geração" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" +"Se 'Gerar Tipo' estiver definido, mencione o modelo relacionado a esta regra." + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" +"Se você deixar o campo de sequência em branco, uma sequência será criada " +"automaticamente quando a regra do código de barras for salva, com base no " +"preenchimento do código de barras." + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "Sem geração" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "Preenchimento" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Selecione uma regra para gerar um código de barras" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "Sequência - %s" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" +"Este valor é utilizado para gerar o código de barras de acordo com a " +"configuração da regra do código de barras." + +#~ msgid "ID" +#~ msgstr "Identificação" + +#~ msgid "Last Modified on" +#~ msgstr "Última atualização em" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_PT.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_PT.po new file mode 100644 index 0000000..f776cac --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/pt_PT.po @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2016-11-25 08:40+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Portuguese (Portugal) (https://www.transifex.com/oca/" +"teams/23907/pt_PT/)\n" +"Language: pt_PT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "ID" +#~ msgstr "ID" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/sl.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/sl.po new file mode 100644 index 0000000..637c751 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/sl.po @@ -0,0 +1,165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2020-08-11 16:59+0000\n" +"Last-Translator: Matjaz Mozetic \n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3;\n" +"X-Generator: Weblate 3.10\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" + +#~ msgid "Display Name" +#~ msgstr "Prikazni naziv" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Zadnjič spremenjeno" + +#~ msgid "Sequence Id" +#~ msgstr "ID zaporedja" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/tr.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/tr.po new file mode 100644 index 0000000..384df9c --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/tr.po @@ -0,0 +1,169 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 08:40+0000\n" +"PO-Revision-Date: 2025-02-20 11:06+0000\n" +"Last-Translator: İsmail Çağan Yılmaz \n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" +"Son barkodda bir sayı (bir baz) dahil olmak üzere barkod oluşturmaya izin " +"verin.\n" +"\n" +" - 'Baz Manuel Olarak Ayarlandı' : Kullanıcı barkod tabanının değerini " +"manuel olarak ayarlamalıdır\n" +" - 'Baz Dizi kullanarak ayarlandı': Sistem, bazı bir dizi aracılığıyla " +"oluşturacaktır" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "Otomatik Oluşturma" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "Baz Barkod" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "Barkod Oluşturma" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "Barkod İsimlendirmeleri" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "Barkod Kuralı" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "Baz Dizi kullanarak ayarlandı" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "Baz Manuel Olarak Ayarlandı" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" +"Bu kural seçilirse otomatik olarak bir baz ve barkod oluşturmak için bunu " +"işaretleyin." + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "Barkod Oluşturma Birleştirim" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "Barkodları Oluştur" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" +"Baz Oluşturma yalnızca 'Tür Oluştur'un 'Baz Dizi kullanarak ayarlandı' " +"olarak ayarlandığı barkod kuralıyla kullanılabilir" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Model Oluştur" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "Tür Oluştur" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "Dizi Oluştur" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "'Tür Oluştur' ayarlanmışsa bu kuralla ilgili modeli belirtin." + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" +"Dizi alanını boş bırakırsanız, barkod kuralı kaydedildiğinde barkodun " +"tasarımına göre otomatik olarak bir sıra oluşturulacaktır." + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "Oluşturma yok" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "Tasarım" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Barkod oluşturmak için bir kural seçin" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "Dizi - %s" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" +"Bu değer, barkod kuralının ayarına göre barkod oluşturmak için kullanılır." + +#~ msgid "ID" +#~ msgstr "ID" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/zh_CN.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/zh_CN.po new file mode 100644 index 0000000..24bd012 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/i18n/zh_CN.po @@ -0,0 +1,147 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_abstract +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "Automatic Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "Barcode Generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.ui.menu,name:barcodes_generator_abstract.menu_barcode_rule +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__sequence +msgid "Base managed by Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__manual +msgid "Base set Manually" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_automate +msgid "" +"Check this to automatically generate a base and a barcode if this rule is " +"selected." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model,name:barcodes_generator_abstract.model_barcode_generate_mixin +msgid "Generate Barcode Mixin" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:res.groups,name:barcodes_generator_abstract.generate_barcode +msgid "Generate Barcodes" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_generate_mixin.py:0 +#, python-format +msgid "" +"Generate Base can be used only with barcode rule with 'Generate Type' set to " +"'Base managed by Sequence'" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_generate_mixin__generate_type +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__sequence_id +msgid "Generation Sequence" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_abstract +#: model_terms:ir.ui.view,arch_db:barcodes_generator_abstract.view_barcode_rule_form +msgid "" +"If you leave the sequence field blank, a sequence will be created " +"automatically when the barcode rule is saved, based on the padding of the " +"barcode." +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields.selection,name:barcodes_generator_abstract.selection__barcode_rule__generate_type__no +msgid "No generation" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,field_description:barcodes_generator_abstract.field_barcode_rule__padding +msgid "Padding" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_abstract +#. odoo-python +#: code:addons/barcodes_generator_abstract/models/barcode_rule.py:0 +#, python-format +msgid "Sequence - %s" +msgstr "" + +#. module: barcodes_generator_abstract +#: model:ir.model.fields,help:barcodes_generator_abstract.field_barcode_generate_mixin__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/__init__.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/__init__.py new file mode 100644 index 0000000..757ecf3 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import barcode_generate_mixin +from . import barcode_rule diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_generate_mixin.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_generate_mixin.py new file mode 100644 index 0000000..59ea1aa --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_generate_mixin.py @@ -0,0 +1,110 @@ +# Copyright (C) 2014-TODAY GRAP (http://www.grap.coop) +# Copyright (C) 2016-TODAY La Louve (http://www.lalouve.net) +# Copyright 2017 LasLabs Inc. +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import barcode + +from odoo import _, api, exceptions, fields, models + + +class BarcodeGenerateMixin(models.AbstractModel): + _name = "barcode.generate.mixin" + _description = "Generate Barcode Mixin" + + # Column Section + barcode_rule_id = fields.Many2one( + string="Barcode Rule", + comodel_name="barcode.rule", + help="Select a rule to generate a barcode", + ) + + barcode_base = fields.Integer( + copy=False, + help="This value is used to generate barcode" + " according to the setting of the barcode rule.", + ) + + generate_type = fields.Selection( + related="barcode_rule_id.generate_type", + ) + + @api.model_create_multi + def create(self, vals_list): + """It creates a new barcode if automation is active.""" + records = super().create(vals_list) + for rec in records: + rule = rec.barcode_rule_id + if rule and rule.generate_automate and rule.generate_type == "sequence": + rec.generate_base() + if not rec.barcode: + rec.generate_barcode() + return records + + def write(self, vals): + """Generate new barcodes if a barcode rule with automation + is applied.""" + res = super().write(vals) + if vals.get("barcode_rule_id"): + rule = self.env["barcode.rule"].browse(vals["barcode_rule_id"]) + if rule.generate_automate and rule.generate_type == "sequence": + for rec in self: + rec.generate_base() + if not rec.barcode: + rec.generate_barcode() + return res + + # View Section + def generate_base(self): + """Generate a base barcode, based on sequence, if the item + has no barcode defined. + Raise an exception if the generate_type of the barcode rule + is not set to 'sequence'.""" + for item in self.filtered(lambda x: not x.barcode_base): + if item.generate_type != "sequence": + raise exceptions.UserError( + _( + "Generate Base can be used only with barcode rule with" + " 'Generate Type' set to 'Base managed by Sequence'" + ) + ) + else: + item.barcode_base = item.barcode_rule_id.sequence_id.next_by_id() + + def generate_barcode(self): + for item in self: + padding = item.barcode_rule_id.padding + str_base = str(item.barcode_base).rjust(padding, "0") + custom_code = self._get_custom_barcode(item) + if custom_code: + custom_code = custom_code.replace("." * padding, str_base) + barcode_class = barcode.get_barcode_class(item.barcode_rule_id.encoding) + item.barcode = barcode_class(custom_code).get_fullcode() + + # Custom Section + @api.model + def _get_custom_barcode(self, item): + """ + If the pattern is '23.....{NNNDD}' + this function will return '23.....00000' + Note : Overload _get_replacement_char to have another char + instead that replace 'N' and 'D' char. + """ + if not item.barcode_rule_id: + return False + + # Define barcode + custom_code = item.barcode_rule_id.pattern + custom_code = custom_code.replace("{", "").replace("}", "") + custom_code = custom_code.replace("D", self._get_replacement_char("D")) + return custom_code.replace("N", self._get_replacement_char("N")) + + @api.model + def _get_replacement_char(self, char): + """ + Can be overload by inheritance + Define wich character will be used instead of the 'N' or the 'D' + char, present in the pattern of the barcode_rule_id + """ + return "0" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_rule.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_rule.py new file mode 100644 index 0000000..56451e6 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/models/barcode_rule.py @@ -0,0 +1,90 @@ +# Copyright (C) 2014-Today GRAP (http://www.grap.coop) +# Copyright (C) 2016-Today La Louve (http://www.lalouve.net) +# Copyright 2017 LasLabs Inc. +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models + +_GENERATE_TYPE = [ + ("no", "No generation"), + ("manual", "Base set Manually"), + ("sequence", "Base managed by Sequence"), +] + + +class BarcodeRule(models.Model): + + _inherit = "barcode.rule" + + # Column Section + generate_type = fields.Selection( + selection=_GENERATE_TYPE, + required=True, + default="no", + help="Allow to generate barcode, including a number" + " (a base) in the final barcode.\n\n" + " - 'Base Set Manually' : User should set manually the value of the" + " barcode base\n" + " - 'Base managed by Sequence': System will generate the base" + " via a sequence", + ) + + generate_model = fields.Selection( + selection=[], + help="If 'Generate Type' is set, mention the model related to this rule.", + ) + + padding = fields.Integer(compute="_compute_padding", readonly=True, store=True) + + sequence_id = fields.Many2one( + string="Generation Sequence", comodel_name="ir.sequence" + ) + + generate_automate = fields.Boolean( + string="Automatic Generation", + help="Check this to automatically generate a base and a barcode" + " if this rule is selected.", + ) + + # Compute Section + @api.depends("pattern") + def _compute_padding(self): + for rule in self: + rule.padding = rule.pattern.count(".") + + # On Change Section + @api.onchange("generate_type") + def onchange_generate_type(self): + for rule in self: + if rule.generate_type == "no": + rule.generate_model = False + + # CRUD + @api.model_create_multi + def create(self, vals_list): + res = super().create(vals_list) + res.generate_sequence_if_required() + return res + + def write(self, vals): + res = super().write(vals) + self.generate_sequence_if_required() + return res + + def generate_sequence_if_required(self): + IrSequence = self.env["ir.sequence"] + rules = self.filtered( + lambda x: x.generate_type == "sequence" and not x.sequence_id + ) + for rule in rules: + sequence = IrSequence.create(self._prepare_sequence(rule)) + rule.sequence_id = sequence.id + + # Custom Section + @api.model + def _prepare_sequence(self, rule): + return { + "name": _("Sequence - %s") % rule.name, + "padding": rule.padding, + } diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONFIGURE.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONFIGURE.rst new file mode 100644 index 0000000..c7a749e --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONFIGURE.rst @@ -0,0 +1,23 @@ +To configure this module, you need to: + +* Go to Settings / Technical / Sequences & Identifiers / Barcode Nomenclatures +* Select a Nomenclature +* Create or select a rule + +.. image:: ../static/description/barcode_nomenclature_form.png + +* For manual generation, set: + * 'Base set Manually' in 'Generate Type' + * Set the model + +.. image:: ../static/description/barcode_rule_form_manual.png + +* For automatic generation, set: + * 'Base managed by Sequence' in 'Generate Type' + * Set the model + * Generate a new sequence by button, or affect a existing one + +.. image:: ../static/description/barcode_rule_form_sequence.png + +In all cases, padding will be computed automaticaly, based on the number +of '.' in the Barcode Pattern field. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..4b79241 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CONTRIBUTORS.rst @@ -0,0 +1,9 @@ +* Sylvain LE GAL (https://twitter.com/legalsylvain) +* Dave Lasley +* `Tecnativa `__: + + * Carlos Roca + +* `Ooops404 `__: + + * Ilyas diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CREDITS.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CREDITS.rst new file mode 100644 index 0000000..05d4062 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/CREDITS.rst @@ -0,0 +1,5 @@ +Images +~~~~~~ + +* Icon of the module is based on the Oxygen Team work and is under LGPL licence: + http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org.html diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/DESCRIPTION.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/DESCRIPTION.rst new file mode 100644 index 0000000..8175f69 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/DESCRIPTION.rst @@ -0,0 +1,21 @@ +This module extends Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for any Model. + +For example, if the barcode pattern is "20.....{NNNDD}": + +* the EAN13 code will begin with '20', +* followed by 5 digits (named *Barcode Base* in this module), +* followed by 5 others digits to define the variable price with 2 decimals, +* the last digit (the 13rd digit) is the control digit (i.e. the checksum). + +With this module, it is possible to: + +* Affect a pattern (barcode.rule) to a model + +* Define a Barcode base: + * manually, if the base of the barcode must be set by a user (typically an + internal code defined in your company). + * automatically by a sequence, if you want to let Odoo increment a + sequence (typical case of a customer number incrementation). + +* Generate a barcode, based on the defined pattern and the barcode base diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/INSTALL.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/INSTALL.rst new file mode 100644 index 0000000..2ce690c --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/INSTALL.rst @@ -0,0 +1,4 @@ +This module use an extra python library named 'python-barcode' you should install +to make barcode generation works properly. + +``sudo pip install python-barcode`` diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/ROADMAP.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/ROADMAP.rst new file mode 100644 index 0000000..52df172 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/ROADMAP.rst @@ -0,0 +1,4 @@ +* On barcode.rule model, constraint and domain system could be set between + 'type' and 'generate_model' fields. +* Cache is being cleared in a constraint in `barcode.rule`. Mutating in a + constraint is bad practice & should be moved somewhere. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/USAGE.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/USAGE.rst new file mode 100644 index 0000000..0c4d724 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/readme/USAGE.rst @@ -0,0 +1,30 @@ +This module is an abstract module. You can configure Barcode Rule, but to +enable this feature, you need to install an extra module for a given model. +This repository provide 'barcodes_generator_product' and +'barcodes_generator_partner' module to generate barcode for product or partner +model. + +Alternatively, you can develop a custom module for a custom model. See +'Inheritance' parts. + +If you want to generate barcode for another model, you can create a custom +module that depend on 'barcodes_generator_abstract' and inherit your model +like that: + +.. code:: + + class MyModel(models.Model): + _name = 'my.model' + _inherit = ['my.model', 'barcode.generate.mixin'] + + class barcode_rule(models.Model): + _inherit = 'barcode.rule' + + generate_model = fields.Selection(selection_add=[('my.model', 'My Model')]) + +Eventually, you should inherit your model view adding buttons and fields. + +Note +~~~~ + +Your model should have a field 'barcode' defined. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/security/res_groups.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/security/res_groups.xml new file mode 100644 index 0000000..6b9f3be --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/security/res_groups.xml @@ -0,0 +1,16 @@ + + + + + Generate Barcodes + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_nomenclature_form.png b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_nomenclature_form.png new file mode 100644 index 0000000000000000000000000000000000000000..4a921ef62141c313cae5fedb395cbee0f3841b0e GIT binary patch literal 78174 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 L)z4*}Q$iB}oX0D? literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_rule_form_manual.png b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_rule_form_manual.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4c4268263d3b8fb5e912fea87ee996e05855c7 GIT binary patch literal 26389 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 literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_rule_form_sequence.png b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/barcode_rule_form_sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..25bfaeb0e442c6460f9369aa2621a7c4753350b8 GIT binary patch literal 33743 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 N_jL7hS?83{1OUUw?^FN) literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/icon.png b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f3533a281ec705b8a9d933f080145fb8ddda7df9 GIT binary patch literal 16262 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 S+{wVez~JfX=d#Wzp$PzfzKzEK literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/index.html b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/index.html new file mode 100644 index 0000000..15d524d --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/static/description/index.html @@ -0,0 +1,565 @@ + + + + + +README.rst + + + +

+ + + +Odoo Community Association + +
+

Generate Barcodes (Abstract)

+ +

Beta License: AGPL-3 OCA/stock-logistics-barcode Translate me on Weblate Try me on Runboat

+

This module extends Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for any Model.

+

For example, if the barcode pattern is “20…..{NNNDD}”:

+
    +
  • the EAN13 code will begin with ‘20’,
  • +
  • followed by 5 digits (named Barcode Base in this module),
  • +
  • followed by 5 others digits to define the variable price with 2 decimals,
  • +
  • the last digit (the 13rd digit) is the control digit (i.e. the checksum).
  • +
+

With this module, it is possible to:

+
    +
  • Affect a pattern (barcode.rule) to a model
  • +
  • +
    Define a Barcode base:
    +
      +
    • manually, if the base of the barcode must be set by a user (typically an +internal code defined in your company).
    • +
    • automatically by a sequence, if you want to let Odoo increment a +sequence (typical case of a customer number incrementation).
    • +
    +
    +
    +
  • +
  • Generate a barcode, based on the defined pattern and the barcode base
  • +
+

Table of contents

+ +
+

Installation

+

This module use an extra python library named ‘python-barcode’ you should install +to make barcode generation works properly.

+

sudo pip install python-barcode

+
+
+

Configuration

+

To configure this module, you need to:

+
    +
  • Go to Settings / Technical / Sequences & Identifiers / Barcode Nomenclatures
  • +
  • Select a Nomenclature
  • +
  • Create or select a rule
  • +
+https://raw.githubusercontent.com/OCA/stock-logistics-barcode/16.0/barcodes_generator_abstract/static/description/barcode_nomenclature_form.png +
    +
  • +
    For manual generation, set:
    +
      +
    • ‘Base set Manually’ in ‘Generate Type’
    • +
    • Set the model
    • +
    +
    +
    +
  • +
+https://raw.githubusercontent.com/OCA/stock-logistics-barcode/16.0/barcodes_generator_abstract/static/description/barcode_rule_form_manual.png +
    +
  • +
    For automatic generation, set:
    +
      +
    • ‘Base managed by Sequence’ in ‘Generate Type’
    • +
    • Set the model
    • +
    • Generate a new sequence by button, or affect a existing one
    • +
    +
    +
    +
  • +
+https://raw.githubusercontent.com/OCA/stock-logistics-barcode/16.0/barcodes_generator_abstract/static/description/barcode_rule_form_sequence.png +

In all cases, padding will be computed automaticaly, based on the number +of ‘.’ in the Barcode Pattern field.

+
+
+

Usage

+

This module is an abstract module. You can configure Barcode Rule, but to +enable this feature, you need to install an extra module for a given model. +This repository provide ‘barcodes_generator_product’ and +‘barcodes_generator_partner’ module to generate barcode for product or partner +model.

+

Alternatively, you can develop a custom module for a custom model. See +‘Inheritance’ parts.

+

If you want to generate barcode for another model, you can create a custom +module that depend on ‘barcodes_generator_abstract’ and inherit your model +like that:

+
+class MyModel(models.Model):
+    _name = 'my.model'
+    _inherit = ['my.model', 'barcode.generate.mixin']
+
+class barcode_rule(models.Model):
+    _inherit = 'barcode.rule'
+
+    generate_model = fields.Selection(selection_add=[('my.model', 'My Model')])
+
+

Eventually, you should inherit your model view adding buttons and fields.

+
+

Note

+

Your model should have a field ‘barcode’ defined.

+
+
+
+

Known issues / Roadmap

+
    +
  • On barcode.rule model, constraint and domain system could be set between +‘type’ and ‘generate_model’ fields.
  • +
  • Cache is being cleared in a constraint in barcode.rule. Mutating in a +constraint is bad practice & should be moved somewhere.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • GRAP
  • +
  • La Louve
  • +
  • LasLabs
  • +
+
+
+

Contributors

+ +
+ +
+

Images

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

legalsylvain

+

This module is part of the OCA/stock-logistics-barcode project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+
+ + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/__init__.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/__init__.py new file mode 100644 index 0000000..c24e006 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/__init__.py @@ -0,0 +1 @@ +from . import test_barcodes_generator_abstract diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/models.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/models.py new file mode 100644 index 0000000..ae7fd9b --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/models.py @@ -0,0 +1,24 @@ +# Copyright 2021 Tecnativa - Carlos Roca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + +# pylint: disable=consider-merging-classes-inherited + + +class BarcodeRuleUserFake(models.Model): + _inherit = "barcode.rule" + + generate_model = fields.Selection( + selection_add=[("res.users", "Users")], ondelete={"res.users": "cascade"} + ) + + type = fields.Selection( + selection_add=[("user", "User")], ondelete={"user": "cascade"} + ) + + +class BarcodeGeneratorUserFake(models.Model): + _name = "res.users" + _inherit = ["res.users", "barcode.generate.mixin"] + + barcode = fields.Char(copy=False) diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/test_barcodes_generator_abstract.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/test_barcodes_generator_abstract.py new file mode 100644 index 0000000..d84e832 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/tests/test_barcodes_generator_abstract.py @@ -0,0 +1,102 @@ +# Copyright 2021 Tecnativa - Carlos Roca +# Copyright 2023-Today GRAP (http://www.grap.coop) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo_test_helper import FakeModelLoader + +from odoo.exceptions import UserError +from odoo.tests import TransactionCase + + +class TestBarcodesGeneratorAbstract(TransactionCase, FakeModelLoader): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + from .models import BarcodeGeneratorUserFake, BarcodeRuleUserFake + + cls.loader.update_registry( + ( + BarcodeGeneratorUserFake, + BarcodeRuleUserFake, + ) + ) + cls.barcode_rule_fake = cls.env["barcode.rule"].create( + { + "name": "User rule", + "barcode_nomenclature_id": cls.env.ref( + "barcodes.default_barcode_nomenclature" + ).id, + "type": "user", + "sequence": 999, + "encoding": "ean13", + "pattern": "20.....{NNNDD}", + "generate_type": "manual", + "generate_model": "res.users", + } + ) + cls.user_fake = cls.env["res.users"].create( + { + "name": "Test user", + "login": "testing_01", + } + ) + + @classmethod + def tearDownClass(cls): + cls.loader.restore_registry() + super().tearDownClass() + + def test_generate_sequence_manually(self): + self.user_fake.barcode_rule_id = self.barcode_rule_fake + self.assertFalse(self.user_fake.barcode_base) + self.assertFalse(self.user_fake.barcode) + + with self.assertRaises(UserError): + self.user_fake.generate_base() + + self.user_fake.generate_barcode() + self.assertEqual( + self.user_fake.barcode, + "2000000000008", + ) + self.user_fake.barcode_base = 10 + self.user_fake.generate_barcode() + self.assertEqual( + self.user_fake.barcode, + "2000010000005", + ) + + def test_generate_sequence_sequence(self): + self.barcode_rule_fake.generate_type = "sequence" + self.assertTrue(self.barcode_rule_fake.sequence_id) + + self.user_fake.barcode_rule_id = self.barcode_rule_fake + self.assertFalse(self.user_fake.barcode_base) + self.assertFalse(self.user_fake.barcode) + + self.user_fake.generate_base() + self.assertEqual(self.user_fake.barcode_base, 1) + self.assertFalse(self.user_fake.barcode) + + self.user_fake.generate_barcode() + self.assertEqual(self.user_fake.barcode, "2000001000007") + + self.user_fake.barcode_base = False + self.user_fake.generate_base() + self.assertEqual(self.user_fake.barcode_base, 2) + self.user_fake.generate_barcode() + self.assertEqual(self.user_fake.barcode, "2000002000006") + + def test_generate_sequence_sequence_automate(self): + self.barcode_rule_fake.write( + { + "generate_type": "sequence", + "generate_automate": True, + } + ) + self.assertTrue(self.barcode_rule_fake.sequence_id) + + self.user_fake.barcode_rule_id = self.barcode_rule_fake + self.assertEqual(self.user_fake.barcode_base, 1) + self.assertEqual(self.user_fake.barcode, "2000001000007") diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/menu.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/menu.xml new file mode 100644 index 0000000..d155e62 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/menu.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_nomenclature.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_nomenclature.xml new file mode 100644 index 0000000..cf0a7eb --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_nomenclature.xml @@ -0,0 +1,32 @@ + + + + + barcode.nomenclature + + + + + + + + + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_rule.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_rule.xml new file mode 100644 index 0000000..283222b --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/barcodes_generator_abstract/views/view_barcode_rule.xml @@ -0,0 +1,55 @@ + + + + + barcode.rule + + + + + + + + + + + + + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/ARCHITECTURE.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/ARCHITECTURE.md new file mode 100644 index 0000000..21808cb --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/ARCHITECTURE.md @@ -0,0 +1,32 @@ +# Architecture + +```mermaid +flowchart TD + U[Users] -->|HTTP| V[Views and QWeb Templates] + V --> C[Controllers] + V --> W[Wizards – Transient Models] + C --> M[Models and ORM] + W --> M + M --> R[Reports] + DX[Data XML] --> M + S[Security – ACLs and Groups] -. enforces .-> M + + subgraph Barcodes_generator_abstract Module - barcodes_generator_abstract + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONFIGURATION.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONFIGURATION.md new file mode 100644 index 0000000..5cc9942 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for barcodes_generator_abstract. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONTROLLERS.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/DEPENDENCIES.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/DEPENDENCIES.md new file mode 100644 index 0000000..717eb37 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [barcodes](../../odoo-bringout-oca-ocb-barcodes) diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/FAQ.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/FAQ.md new file mode 100644 index 0000000..b905819 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/FAQ.md @@ -0,0 +1,4 @@ +# FAQ + +- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). +- Q: How to enable? A: Start server with --addon barcodes_generator_abstract or install in UI. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/INSTALL.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/INSTALL.md new file mode 100644 index 0000000..02c72b3 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract" +# or +uv pip install odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract" +``` diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/MODELS.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/MODELS.md new file mode 100644 index 0000000..092977f --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in barcodes_generator_abstract. + +```mermaid +classDiagram + class barcode_generate_mixin + class barcode_rule +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/OVERVIEW.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/OVERVIEW.md new file mode 100644 index 0000000..6054271 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: barcodes_generator_abstract. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon barcodes_generator_abstract +- License: LGPL-3 diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/REPORTS.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/SECURITY.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/SECURITY.md new file mode 100644 index 0000000..b18a9ff --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/SECURITY.md @@ -0,0 +1,74 @@ +# Security + +Access control and security definitions in barcodes_generator_abstract. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[all_odoo_addons_repos.txt](../all_odoo_addons_repos.txt)** + - 318 model access rules +- **[bosnian_translations.json](../bosnian_translations.json)** + - 50 model access rules +- **[bosnian_translations_output.json](../bosnian_translations_output.json)** + - 444 model access rules +- **[CHANGELOG.md](../CHANGELOG.md)** + - 132 model access rules +- **[delete_all_odoo_addons.sh](../delete_all_odoo_addons.sh)** + - 50 model access rules +- **[delete_odoo_addons.sh](../delete_odoo_addons.sh)** + - 44 model access rules +- **[doc](../doc)** +- **[docker](../docker)** +- **[input](../input)** +- **[nix](../nix)** +- **[odoo.conf](../odoo.conf)** + - 58 model access rules +- **[odoo_packages_bez_l10n.txt](../odoo_packages_bez_l10n.txt)** + - 1947 model access rules +- **[odoo_packages_bringout.txt](../odoo_packages_bringout.txt)** + - 1947 model access rules +- **[odoo_packages.txt](../odoo_packages.txt)** + - 2085 model access rules +- **[output](../output)** +- **[packages](../packages)** +- **[PACKAGES.md](../PACKAGES.md)** + - 298 model access rules +- **[README.md](../README.md)** + - 338 model access rules +- **[scripts](../scripts)** +- **[temp](../temp)** +- **[TRANSLATION_BS_SUMMARY.md](../TRANSLATION_BS_SUMMARY.md)** + - 146 model access rules +- **[verify_deletions.sh](../verify_deletions.sh)** + - 55 model access rules + +## Record Rules + +Row-level security rules defined in: + +## Security Groups & Configuration + +Security groups and permissions defined in: +- **[res_groups.xml](../barcodes_generator_abstract/security/res_groups.xml)** + - 1 security groups defined + +```mermaid +graph TB + subgraph "Security Layers" + A[Users] --> B[Groups] + B --> C[Access Control Lists] + C --> D[Models] + B --> E[Record Rules] + E --> F[Individual Records] + end +``` + +Security files overview: +- **[res_groups.xml](../barcodes_generator_abstract/security/res_groups.xml)** + - Security groups, categories, and XML-based rules + +Notes +- Access Control Lists define which groups can access which models +- Record Rules provide row-level security (filter records by user/group) +- Security groups organize users and define permission sets +- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/TROUBLESHOOTING.md @@ -0,0 +1,5 @@ +# Troubleshooting + +- Ensure Python and Odoo environment matches repo guidance. +- Check database connectivity and logs if startup fails. +- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/USAGE.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/USAGE.md new file mode 100644 index 0000000..68b6f81 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/USAGE.md @@ -0,0 +1,7 @@ +# Usage + +Start Odoo including this addon (from repo root): + +```bash +python3 scripts/nix_odoo_web_server.py --db-name mydb --addon barcodes_generator_abstract +``` diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/WIZARDS.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/pyproject.toml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/pyproject.toml new file mode 100644 index 0000000..5b03327 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_abstract" +version = "16.0.0" +description = "Generate Barcodes (Abstract) - Generate Barcodes for Any Models" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-stock-logistics-barcode-barcodes>=16.0.0", + "requests>=2.25.1" +] +readme = "README.md" +requires-python = ">= 3.11" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Office/Business", +] + +[project.urls] +homepage = "https://github.com/bringout/0" +repository = "https://github.com/bringout/0" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.metadata] +allow-direct-references = true + +[tool.hatch.build.targets.wheel] +packages = ["barcodes_generator_abstract"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/README.md b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/README.md new file mode 100644 index 0000000..84e85bf --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/README.md @@ -0,0 +1,47 @@ +# Generate Barcodes for Stock Locations + +Odoo addon: barcodes_generator_location + +## Installation + +```bash +pip install odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location +``` + +## Dependencies + +This addon depends on: +- barcodes_generator_abstract +- stock + +## Manifest Information + +- **Name**: Generate Barcodes for Stock Locations +- **Version**: 16.0.1.0.0 +- **Category**: Tools +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/stock-logistics-barcode](https://github.com/OCA/stock-logistics-barcode) branch 16.0, addon `barcodes_generator_location`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Reports: doc/REPORTS.md +- Security: doc/SECURITY.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/README.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/README.rst new file mode 100644 index 0000000..8685f10 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/README.rst @@ -0,0 +1,130 @@ +===================================== +Generate Barcodes for Stock Locations +===================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:6aaeee640999db99f4f6d879b9c42e9626848385af8d2315cff1c6590df316ae + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-barcode/tree/16.0/barcodes_generator_location + :alt: OCA/stock-logistics-barcode +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-16-0/stock-logistics-barcode-16-0-barcodes_generator_location + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-barcode&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module expands Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for Stock Locations. + +For example, a typical pattern for partners is "042........." that means +that: +* the EAN13 code will begin by '042' +* followed by 0 digits (named Barcode Base in this module) +* a 13 digit control + +With this module, it is possible to: + +* Assign a pattern (barcode.rule) to a stock.location + +* Define a Barcode base: + * manually, if the base of the barcode must be set by a user. (typically an + internal code defined in your company) + * automatically by a sequence, if you want to let Odoo to increment a + sequence. (typical case of a customer number incrementation) + +* Generate a barcode, based on the defined pattern and the barcode base + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, see the 'Configuration' Section of the description +of the module 'barcodes_generator_abstract' + +Usage +===== + +To use this module, you need to: + +* Go to a Stock Location form + +1 for manual generation + * Set a Barcode Rule + * Set a Barcode Base + * click on the button 'Generate Barcode (Using Barcode Rule)' + +2 for automatic generation + * Set a Barcode Rule + * click on the button 'Generate Base (Using Sequence)' + * click on the button 'Generate Barcode (Using Barcode Rule)' + +.. image:: https://raw.githubusercontent.com/barcodes_generator/static/description/stock_location_sequence_generation.png + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* LasLabs + +Contributors +~~~~~~~~~~~~ + +* Dave Lasley +* `Tecnativa `_: + + * David Vidal + * Ernesto Tejeda + +Other credits +~~~~~~~~~~~~~ + +* Icon of the module is based on the Oxygen Team work and is under LGPL licence: + http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org.html + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__init__.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__init__.py new file mode 100644 index 0000000..071962a --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import uninstall_hook diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__manifest__.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__manifest__.py new file mode 100644 index 0000000..c6b8868 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2017 LasLabs Inc. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Generate Barcodes for Stock Locations", + "version": "16.0.1.0.0", + "category": "Tools", + "author": "LasLabs, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/stock-logistics-barcode", + "license": "AGPL-3", + "depends": ["barcodes_generator_abstract", "stock"], + "data": ["views/stock_location.xml"], + "demo": [ + "demo/ir_sequence.xml", + "demo/barcode_rule.xml", + "demo/stock_location.xml", + "demo/function.xml", + ], + "uninstall_hook": "uninstall_hook", +} diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/barcode_rule.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/barcode_rule.xml new file mode 100644 index 0000000..de39432 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/barcode_rule.xml @@ -0,0 +1,21 @@ + + + + + Stock Location Rule (Generated Barcode) + + location + 998 + ean13 + 119......... + + + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/function.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/function.xml new file mode 100644 index 0000000..7c37c82 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/function.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/ir_sequence.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/ir_sequence.xml new file mode 100644 index 0000000..cc50aab --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/ir_sequence.xml @@ -0,0 +1,12 @@ + + + + + Stock Location Sequence (Generated Barcode) + 10 + 1 + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/stock_location.xml b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/stock_location.xml new file mode 100644 index 0000000..44a272d --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/demo/stock_location.xml @@ -0,0 +1,12 @@ + + + + + Location with Generated Barcode + + internal + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/hooks.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/hooks.py new file mode 100644 index 0000000..08a914e --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/hooks.py @@ -0,0 +1,13 @@ +# Copyright 2020 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + + +def uninstall_hook(cr, registry): + """Delete barcode rules with generate model `stock.location` as they + won't be useful anymore""" + cr.execute( + """ + DELETE FROM barcode_rule + WHERE generate_model = 'stock.location' + """ + ) diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/barcodes_generator_location.pot b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/barcodes_generator_location.pot new file mode 100644 index 0000000..b87669f --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/barcodes_generator_location.pot @@ -0,0 +1,82 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \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: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/bs.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/bs.po new file mode 100644 index 0000000..a4c9e79 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/bs.po @@ -0,0 +1,82 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \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: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "Barkod" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "Baza barkoda" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "Barkod pravilo" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "Generiraj barkodove" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "Generiraj osnovno ( koristi br.krug)" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Model generiranja" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "Tip generiranja" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "Ako je 'Tip generiranja' postavljen, spomenite model povezan s ovim pravilom." + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Odaberite pravilo za generiranje barkoda" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "Lokacija zalihe" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/es.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/es.po new file mode 100644 index 0000000..16507ef --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/es.po @@ -0,0 +1,89 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +# Translators: +# enjolras , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-15 02:01+0000\n" +"PO-Revision-Date: 2018-02-15 02:01+0000\n" +"Last-Translator: enjolras , 2018\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "Generar Código de Barras" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "Generar Base (utilizando secuencia)" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "Ubicación de existencias" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/fr.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/fr.po new file mode 100644 index 0000000..19a403d --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/fr.po @@ -0,0 +1,89 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-12 02:40+0000\n" +"PO-Revision-Date: 2017-04-12 02:40+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "Générer une base (via une séquence)" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/hr.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/hr.po new file mode 100644 index 0000000..a563ead --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/hr.po @@ -0,0 +1,90 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +# Translators: +# Bole , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-15 02:01+0000\n" +"PO-Revision-Date: 2018-02-15 02:01+0000\n" +"Last-Translator: Bole , 2018\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "Generiraj barkodove" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "Generiraj osnovno ( koristi br.krug)" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "Lokacija zalihe" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/it.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/it.po new file mode 100644 index 0000000..c50c40e --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/it.po @@ -0,0 +1,96 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-04-02 11:43+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" +"Consente di generare un codice a barre, incluso un numero (una base) nel " +"codice a barre finale.\n" +"\n" +" 'Base impostata manualmente' : l'utente deve impostare manualmente il " +"valore della base del codice a barre\n" +" 'Base gestita da sequenza': l'utente utilizzerà un pulsante per generare " +"una nuova base. Questa base sarà generata da una sequenza" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "Codice a barre" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "Base codice a barre" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "Regola codice a barre" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "Genera codice a barre" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "Genera base (usando sequenza)" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Modello generazione" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "Tipo generazione" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" +"Se 'Tipo generazione' è impostato, indica il modello relativo a questa " +"regola." + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Seleziona una regola per generare il barcode" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "Ubicazione" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" +"Questo valore è usato per generare un codice a barre in base alle " +"impostazione della regola." diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/nl_NL.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/nl_NL.po new file mode 100644 index 0000000..e474b31 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/nl_NL.po @@ -0,0 +1,90 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-07 15:18+0000\n" +"PO-Revision-Date: 2017-07-07 15:18+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final " +"barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode " +"base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/tr.po b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/tr.po new file mode 100644 index 0000000..d66b792 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/i18n/tr.po @@ -0,0 +1,93 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_generator_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-02-20 11:06+0000\n" +"Last-Translator: İsmail Çağan Yılmaz \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__generate_type +msgid "" +"Allow to generate barcode, including a number (a base) in the final barcode.\n" +"\n" +" - 'Base Set Manually' : User should set manually the value of the barcode base\n" +" - 'Base managed by Sequence': System will generate the base via a sequence" +msgstr "" +"Son barkodda bir sayı (bir baz) dahil olmak üzere barkod oluşturmaya izin " +"verin.\n" +"\n" +" - 'Baz Manuel Olarak Ayarlandı' : Kullanıcı barkod tabanının değerini " +"manuel olarak ayarlamalıdır\n" +" - 'Baz Dizi tarafından ayarlandı': Sistem, bazı bir dizi aracılığıyla " +"oluşturacaktır" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Barcode" +msgstr "Barkod" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_base +msgid "Barcode Base" +msgstr "Baz Barkod" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_barcode_rule +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Barcode Rule" +msgstr "Barkod Kuralı" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Barcode" +msgstr "Barkod Oluştur" + +#. module: barcodes_generator_location +#: model_terms:ir.ui.view,arch_db:barcodes_generator_location.view_location_form +msgid "Generate Base (Using Sequence)" +msgstr "Baz Oluştur (Dizi Kullanarak)" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_barcode_rule__generate_model +msgid "Generate Model" +msgstr "Model Oluştur" + +#. module: barcodes_generator_location +#: model:ir.model.fields,field_description:barcodes_generator_location.field_stock_location__generate_type +msgid "Generate Type" +msgstr "Tür Oluştur" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_barcode_rule__generate_model +msgid "If 'Generate Type' is set, mention the model related to this rule." +msgstr "'Tür Oluştur' ayarlanmışsa bu kuralla ilgili modeli belirtin." + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_rule_id +msgid "Select a rule to generate a barcode" +msgstr "Barkod oluşturmak için bir kural seçin" + +#. module: barcodes_generator_location +#: model:ir.model,name:barcodes_generator_location.model_stock_location +#: model:ir.model.fields.selection,name:barcodes_generator_location.selection__barcode_rule__generate_model__stock_location +msgid "Stock Location" +msgstr "Stok Konumu" + +#. module: barcodes_generator_location +#: model:ir.model.fields,help:barcodes_generator_location.field_stock_location__barcode_base +msgid "" +"This value is used to generate barcode according to the setting of the " +"barcode rule." +msgstr "" +"Bu değer, barkod kuralının ayarına göre barkod oluşturmak için kullanılır." diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/__init__.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/__init__.py new file mode 100644 index 0000000..975d700 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import barcode_rule +from . import stock_location diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/barcode_rule.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/barcode_rule.py new file mode 100644 index 0000000..b337963 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/barcode_rule.py @@ -0,0 +1,11 @@ +# Copyright 2017 LasLabs Inc. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class BarcodeRule(models.Model): + _inherit = "barcode.rule" + + generate_model = fields.Selection( + selection_add=[("stock.location", "Stock Location")], + ) diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/stock_location.py b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/stock_location.py new file mode 100644 index 0000000..85864ea --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/models/stock_location.py @@ -0,0 +1,48 @@ +# Copyright 2017 LasLabs Inc. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import json + +from lxml import etree + +from odoo import api, models + + +class StockLocation(models.Model): + _name = "stock.location" + _description = "Stock Location" + _inherit = ["stock.location", "barcode.generate.mixin"] + + @api.model + def get_view(self, view_id=None, view_type="form", **options): + """The redefinition of this method is intended to manipulating + the form view of stock.location to add the barcode field to the + view in case it has not been added by the stock_barcodes module. + """ + result = super().get_view(view_id=view_id, view_type=view_type, **options) + if view_type == "form": + doc = etree.XML(result["arch"]) + barcode_field = doc.xpath("//field[@name='barcode']") + if barcode_field: + # If the field exists in the view, it's assumed it has + # been added by 'stock_barcodes' module, then all the + # fields inside 'barcodes_generator_location' group + # (added by this module) are moved next to the existing + # `barcode' field. + barcode_field = barcode_field[0] + group = doc.xpath("//group[@name='barcodes_generator_location']")[0] + for node in group.getchildren()[::-1]: + barcode_field.addnext(node) + # Remove the group since it will be empty at this point. + group.getparent().remove(group) + else: + # If the field does not exist in the view, it is added + # together with the fields that this module adds. + barcode_field = etree.Element("field", {"name": "barcode"}) + placeholder = doc.xpath("//field[@name='barcode_rule_id']")[0] + placeholder.addprevious(barcode_field) + # To the `barcode` field in the view (either the new + # or the existing one), a modifier is added. + modifier = {"readonly": [("generate_type", "=", "sequence")]} + barcode_field.set("modifiers", json.dumps(modifier)) + result["arch"] = etree.tostring(doc) + return result diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONFIGURE.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONFIGURE.rst new file mode 100644 index 0000000..721a53f --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONFIGURE.rst @@ -0,0 +1,2 @@ +To configure this module, see the 'Configuration' Section of the description +of the module 'barcodes_generator_abstract' diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..9cd91f3 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Dave Lasley +* `Tecnativa `_: + + * David Vidal + * Ernesto Tejeda diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CREDITS.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CREDITS.rst new file mode 100644 index 0000000..3e18f75 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/CREDITS.rst @@ -0,0 +1,2 @@ +* Icon of the module is based on the Oxygen Team work and is under LGPL licence: + http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org.html diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/DESCRIPTION.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/DESCRIPTION.rst new file mode 100644 index 0000000..cd7a192 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/DESCRIPTION.rst @@ -0,0 +1,20 @@ +This module expands Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for Stock Locations. + +For example, a typical pattern for partners is "042........." that means +that: +* the EAN13 code will begin by '042' +* followed by 0 digits (named Barcode Base in this module) +* a 13 digit control + +With this module, it is possible to: + +* Assign a pattern (barcode.rule) to a stock.location + +* Define a Barcode base: + * manually, if the base of the barcode must be set by a user. (typically an + internal code defined in your company) + * automatically by a sequence, if you want to let Odoo to increment a + sequence. (typical case of a customer number incrementation) + +* Generate a barcode, based on the defined pattern and the barcode base diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/USAGE.rst b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/USAGE.rst new file mode 100644 index 0000000..3c30054 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/readme/USAGE.rst @@ -0,0 +1,15 @@ +To use this module, you need to: + +* Go to a Stock Location form + +1 for manual generation + * Set a Barcode Rule + * Set a Barcode Base + * click on the button 'Generate Barcode (Using Barcode Rule)' + +2 for automatic generation + * Set a Barcode Rule + * click on the button 'Generate Base (Using Sequence)' + * click on the button 'Generate Barcode (Using Barcode Rule)' + +.. image:: /barcodes_generator/static/description/stock_location_sequence_generation.png diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/icon.png b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..07ed687542190b95e62e67316995ad8bb3dc5bd0 GIT binary patch literal 19578 zcmeAS@N?(olHy`uVBq!ia0y~yU^oK89Bd2>31$OoxR)p~54FBaI!*g6v9sE~E(Td(v=yI=}bF zHHlW{PKj%nj!SZha!Eh>sCHD)Rp!QPO9S8hAExI&%Z057`7qgOZk_#Vll!3-MeCot zeQElw!`@|NWK^e<7(bDvA;qDke){Wq*+(`S{?@s^Nc_IGrGckHg~!6B%myZ}Z4`Oh zK72g==+wh%)$~Qvy`=fROyxI>YWf$x_p702e&7BLA=l%A_CzfVP2BVTx4Xu?g%j3@ zPJ4OFy|iwnlZzlbn+iKu$g9`ETmJB;r=`u4ty+B1>e$Y6k7B~Yu5lVoeRrYuhcKt_ zLht%;3BOq#N_;#ne1Ebd76=w_{_6jtw3AD@v}WnKy-PO4Fy2qvcznOO7 z=i6U@9a}q;_`XQ6H_6SFJFPoq;+uaf*REZA^xc$Q-t(^;Mm@4%t>IYV$y7IWo$cLk z#y@_qI3e+Ec^f>ycqUl8_lk3CcKYn#?kJ|Qr zb?9xaKPno2V^8JhoYT{E-5xJ8l(v4gV)2@N`|fSayPNfX|NpuLs(Jf8i z>+i;8X@~F0K07r(BJ7>Q%{6CF`5)}oTzBcA+vnL?YfQJ@O**?ZZ09ex`j=AYze(?( z&nsOz;hiL#2iufsuS^|QJSynRKDzTz#afwV5&?T8|NDllFqt2|)Nb)(H@}WeS02SI zE9SYxy5#ZpQit3Y^-Dtx^Ycqf zOBp40`0ZM?N~`|D0>@6Vj?cRnKU-#1f71K=%`-E9-+sev5_v$JA?Zu?3a%QahKz1T z&t=b})5^9zO{p%s(rCCfM*B>bIJd{`-0Il2y?Y*L)!(W6efvUSdqmkgj?-sOy$q@> z3%@sS&%Nx10LA#=8%rFr^M&qRe(dzGO&OW zE9We}5xAA*iRJg?_>TWSj@#e*eBM4kc)8!!9L|Ky%*+J6o#pcOb$fcH&Cjh`y_z|G z(Y9^Z-tGTiSH3g2uz1bE^%c*ptP6h0oZPd8;m~{*rp?oSRBFEaRsOYjcHQfUWs_5% z&78inOkX)%H+tPvk!rK$65i#lKX0$wd~8Pk`#nE&>tDQ>ye8#|;k3!oYi=7|W>eV9 z*}=v6L5cIbPGPgS+^PoWKg@G~$H)He>|?(4vDHdp$)e*WpIlj&Rmuo>F+8{;^0rpx z_>J(>c^f0nq$IILCA_$>Fz)HLt^@uD8lTk|nVOieL?wNBadBJS-(L?t>2AL>X->}c z{nPb!+~T`a-!p63TCaAojLR(6Tbk;kW1Mq-ZrmVf0o|9r(n_ZjR*?-#5- zU=V*iJ4GyZ_2c@RXJ^~5HJKkIb!KsEm#jj`t^W(^n5XS+dm_Q^uprg_0b|R(+X7!s zPF9O_b!|O6!*cWC@47lVJXO{Y`RXqPr%!4d zeAz-FLihLfqSp(^U&hR&G!2 z*c)FpjaRz7lUKfU!ztb0tK~ENO<30VPu{({DLpJ#uWcn7h)kb|;>OEa5 zp`oa#h-tG&TB5>@)nV(mDfio4dUkGZ_WC`ayiR>*v=BJp;LX7DZvX3byMvbb+exmz zpLdh@l8*1HOH1vquei|o=z|OAu2q&Fl&^fe9;0TQxil{~N4R2_8Am`wrs9t|`J%sV z8(L-*Y|{N^q++-Bl9?oz)zr7#Zyvuhu>Y*79b4ElHLv2NyydR|#>M%6duvy|JkO^?ZwMQ4T+L*R8*1STdte zKhN6dkLuA<2kw<)yomyV8p8IUnpU`+L5M^QY&o z+@pDUvVF?}W?e3utoJnaZuQm!U$;&Xx31jusQ%pN&FOOaN7L&{{VS$^%ADcxg-`Ls z7lDh>Ef1Jk8Z9l{SD!Ckv8`mOZ~adz>mTL%k;OYq`JUP(9%8Y6&|sGO>)r16x7v86 znHmahil3c{-RJD>y?Otalm9nLhK752*mBn}sQ=MZWABSyliYP_iM?TKn5XSCfya$; zVzGyGr%hcu;p(bCEbkPKeD*lyUb|)2JmDExb!}n1PvRGp-%mMx?abzt#(G=#>{%2$ zEq>=a!?&Gn4g3jvty^W*bN!#!^0j+cyswAXrzy`?Gx=>lAaH)8@1&r#{l6#suD<_e zdwgx@)+u`1XSJ{UwzuhE)`=@;EB~nP`h3pXw&3I>)yB-056Rz++a7rA;bfVa7rHBG z;UUA|H8rm~%N`wB`t69;SB9kv-rnBM&fw%NQ~Twj;5{A3Dn+FMg`|QL}WP zjlbU1oIaN$=peOr-9Eo-=dB`RSFd$V3)uGO@tl}YzkTZe+a~C4);s>`bCgNj!gBsy zWk(qs#3rmVa(;Aam0xSsN8A5J(xz4Gu7<@bB>bPxaR1HsX`ELl7VMl;1AN zdv^WVT=`chyXJ48M51vf+-_~FICfTh1-=72R2Q zmXcaqa@TrW+SA$7?*5pQs~?|WdHeO69R`QlGHVv?usGbsE_yN~NASg!nG+h@6qv{I%X>{R{Q5h?-r#XRNMI)8FmQ>)Cx@`mwkyr}+D;p^M69)L&8LG`N5DsHf1a z{$s+t7e9VYdeHu*+Vjty8#@C0JO8&G)PMP7HJ9|=oqUfr@trGwS@O_xdWEm_v{Ny= zLZbGreXe$5L8$2T)oJS{hiJCXtaO`U!*GaG)9#Sk)*HfVK3jODy}x!?t&aFK>FL^- z3|49JXvg5GPfv$s%G%yN#lQ1P+nE{ZtVfk|TV$RIR&CRNX!m~4=Qq9P_c%-rvfF)V zJRo^|&!Im~uN`EV*~DjDx)^!t%&Biv`sdG&Pgs1c=d#SQ1J)dQ=O+{&+@m>%$2NKT zABFyA{<--Zmz|IHEnT|z-znv7YhS$&+x#?BI^=#%DKFFU1jfZHA|C6`@Oo6vBv2Le zLF=~Zy~4$nt^ZX&zvh^2@MUw@zNdEgf*0KQ`q}#TKD}6frljdTo%R##j{XmsvBto< zE^iTo!}eFtzeeZh*#}%O$ZXOo{gT`IwbNKueu>d_E5E(n+Ln*gDxTiAz4x89*}xPUMrfz%-6*hY&mcHJ;wU?o6XFL=~tr8 z=ZJgsU-*>se9dQR_c+_g-8%b|z5O|&i{w5mTlrCVTiIEz=)d1g#a8dRKFg$VgJvBBsrlUOesTR=ea<)A)e?Tk$c0)jIDy9ZI$ZykE8H zpRYoKpJU*kWyYfMD>ryPXKYgryM590_ZI7m(+i*7csZ^9%g$-$&kr{;n4VsFT0?U4 zZKWxB5&5FCjx%4ZZc$jIx@VeN^#4PT!!~^})Q;G9VpEh<&MJ!!N!Jv#=YLDop7A-+ z^4#R+xng&m83YrQ_;;n4>U%D8E4(1QHQ`{>kqA}?W)X(Qv&x#4v9YRPo#@H)Cq7&)Ycpj%?#unOPN3u^io9D2*YMCb16V;4W`De_G|7rWZ)U+IsSc)95{FWDF$ zwjEL4-1fe1OS$(=wff7?bQ^tr{m*|}J3II9Y5!Xt-{m(eN{ijT60z9S)MVxw{nfK; zw(Ko^bJVQvn$77OK@%(dejJz?m3*v+vxd1v)}H0_>Lp857}$>U3GneWFi&D&%e*MW z(3BVPR8#TQ?7F`ncB{xgf3o7Wr^w|$E6w9HAyTp66{ncv^ldr*Cdqp|{(#)Tuq&Pc@(0_~xek zh9<$sSNs=y#woi;Wd7XdvijXTt_3qT9G7BekydhxR`|fPPd9p-PR3uxCT7;_7HvoF zx7=)*=5X6UYo6bfxpT#TXy4u@mv>tHf4lFw%7D~q?JsYj! zGa~Pm-43dne$RAS-12!dUtP>^2xx8it*!b+IV3ZlCw#&=+XeUkFT8M3!qwvEy1wHt zA3fw^-R*VdXtwrLyQRhPk=xE~vngNRTk)Om^zA?Ua$=XVOv++^ttOKk+8&=WxzFnC zv5Z~@UHfMOTXLh9^2*!UMBG1+-*8|}sCkxd9ZQ1aj>8QMIz6cmf*-hB1njtx$;r?n z=IG7P5jsm|M&6R|Tw7dobGQD#$NkgH@^{|pizh0Vh3m?7b$*!G*>>j0Nr|=Rej7gt z-jidjc2~Xli?{7JtG}EaaZHW>^;3%I%HUv-*d!foXZ z49vnD#ccN*!sP8453+MKG~AfT+{(7xmCNQm;Ji6 z#?{a?*l+W*#dhh=YG*vwOjxABp_@>!*6dLCh9ogV&3-W%MLu?Rt|Sh|@&+lxBo~7h z&kj7;(%gNr{kI3dLJg>%l@7t|I=Zulg5;&cG} z7W2^SpVln;BWucJYpi$idV_`U)XI!MdpAnwU;CKW+H3W%>yZf$B&X(7 zj$lBG_(C=j4ihz@0|icR7zEf@k0%y=@0YPOI>Ej9q~-M|&UH5JGpaq$m$L7gsx3SF z@XlrDKQ2&I&OP}%e)CM{{nyQwcU?a}XQh3XNR*ido4}Vx&tHG9K3M(gxLojjCa0;N z3`5VQYMHKgFJAue0fRtSnbE{gQ@$Oy>c6ik`ElNb_v@IN-sa4^@HcDsZr7?M_Ri(= z4&FVbz4+ft`N-F+e1*1!ac;Sx?wEb$AN%d}IqCl{PLDpfCDP1V|9aS-{YC;uLi|hB zgc2M)1fx2{=3LCNRp+QGo8WFycHM)2LB>zR*)wJ_3d~uiP&pHm*KTv#GM)A? zyMAZqlN*gqzZqC!H)UU6$6F)Va*y#K;}OO_o0IarEt%W$?(PaX>OH&Iwb^a<{>ZnA zZ(Y+mXKg)fqWmuM=hYuPTPDwvS*R&5di!%u)}1+bE+5+d_37J8y}jl2)z%ANpTD{I zdv@-cPw#&od|AG|I%i!~R$JfJU2BAH7aZ}|dHu)!_KB11thyV#kBj6z<5Mh2bZUs) z!7L$=b%N9U&?}Z}Ti=~@D0s&IT=COmIbD6;KTHiz92|Tcqy>xl&odb?Fxfxa`~4pG zC(rBl2d|l*Nqtnxt@osNtHF~p%Os{Ep9LLzbsaL6u-4Yc&Dlf!~TOpSlq(^_X7kcn15@Y^gX z>egqY>LncKWL{1@^R3P2&#$8U^L9ieznsq%vi1C)rx&!YeBuSl4E` zpdHg@+i0!RIset`);yiD_{{%DXQfgkWH`3%mR(rJq99OpMrsRBpV4tXjwQVE#q!T9 z%o376&0}UtRcfhcmN{ow_VM@q|8@~kr)pn%^ju8Iy{>b8;il`31;2#_w%Ov(QR9Jp0LchG4Zm{mIn<&wRkF^hMm+0^87ihyO|K{nKjF z{EAgoCg;(Lb3JPJr{!B5PV>LevO#W<9czo$C%>uE{TxnQOMY7|soL7+b9X_{lGv+> zr}Sbbe5i@~X~Z?p=brh#qMdiYr`~T9;lK3g8FOju=Rd|~s>{89N-MfB2>PiXaGYO% zxh>&-*Mnu3mWI{8-mdffO#Nma#&uh(R{xB?J~MpVp-<1^QzAe4DjYbvmqTxvu-cT% zJSR6Yw_Fx_zvr``!WV`|SHt7C9+$7bGq38^$^`x8lE!H)r@cQWN^mYe{q5!Q`Pc6G zE&cc6VshC6BMsO8e-dpHZ(h2d>vnAU+0(WTv%X$VyUL&C+j1oEm>$)~$(THRv*UeyaOd9Nfof72(^B?~4Ba6Z*&Y-~L^ z^XRpj8Cpl|cHdT4Tyd_1Nn*>5GrLz-&u{!Lu(syrtabYgN*28}DBjP^?4a;K;2E#- z^&G2bX?v{B3b3_$^DDfl+xvdsZzctum>mW;POQ-_KRbQWW8XNIs-+RW$A4v4&3dw?B=_5PULcyC|GBz=0@r?<&DXTH2&rM`Z-&dY7r?>%QwTo|<={QS>r*X_Tj=J!5{ znf=vEXsv4b6yJOKYo3aVtTMgy;@zL@tp{pZ-UjX78NiY1zGUl{XS)BFhwAP)8nuOI zYw(otl%Ml|%H9osJL$7bRPAzAfwBfRhC>Mtwih1|{PDQYT5kt`fz_eAIcqLHV>Z3b z)KDeLDy1l&W$Z2*`L-o-+poXdb5GvR|7FZS@9xLbJI_=prfqv=z5Y)6Woi4Rd*hED zzWD#%GneVH3zuJQKd>NvW6bTi*O{Bw&A)x8@NspB^@ptAG72gh_1SCV{xxj>VB)JQ zvUz54ppm<+B>Q7dZiQQEA2-a8c9WL46}rD=eW=sPs1FVXcU|j@Z(J++UA`vqq*M8> z;KF0=PyI!vviwxMBk)u3P}CvIQx-S*M7I3uv0#=taA*hnzk`1&kKfQfuW!UKYx%ts zIY)QS>KPbTvW{PGs-XICZ*NgSEg=C=07>XRF<`rhAYd3>(g=1tGd4TV>K)6H5N{rYzI zbFUBHM=L7RRGAJLFe=?x5We{E@42~>s_bPqg6f`X$NwyExi5Ig<2|36@3)uJqmRw_ zdv~ed(R&jN9j(-#@QEC0X!>*a^97+Tf6nBk+N-l&yTE60frY{4{6$uI`|IB(FH-K& zzR!>_VAcDZT`bPO4&VFm zy56kx&7am?jrwZ%?Ctkh(|{<$J&tLU%)&Bee_HGDHl%j$@~t<1Zrk&$$okEU|I67N zPQR*Z{HDo!@m9?1-~Vmy8cAK-y4C4u@DqpmOOiiMyZcm1TQ~W?|NChdH@&spddAMF zV{X5K(gDlG%Ol=h|Ci&Nx_XW0Kj+VrSa+}8G_BQqwtZym{6hPN8X1Wlk^vuho>@F( zxZKM1L*`+@V$%x>4Xh3_wSPFj9T0eX=xo)8AGb3cuCK~|y>`#Clbg2o2Za@H&vY5S+iw1>n@snR?Emszp9j*QnJ26 zk>$wjEP*KX){Se!PRC2zN~bi)cxZuyS{Y)IaTYdcYuIIsMJ>B0lWvJ;&0+r;JnW^bsBn0%)*LD+DnlJ3-75fRO?lDsod zExxhI&F`9DSo9jR>ZyMp{*rF8sea8LwXo*0R`jO>tY*gF>)!IMD3|%h=o=GiJLR9| zk7X{4%sm~BHLbl`5#t)WaP7x`x1Y`X!m54colI4E>|5Ec#~aFx{Lh7oR(BmrkGW8K z_Tk$JMN{8#>#a??X?b_~t?&6?if7;3c*|>T*5x@HbS-}|`TMTxo1J_5+l*Yj>17g? zcM5D5UbgX!+x@_6`6jk@$@cj#{oWdVli#n#!1!ITV3uN^WcvY~q&$(>yr~cvvJYs zuw?n%*88cQyUPOKKW5)|XtDh!Mg4P|X5ReHI{(opwK~toJjb(IJk>6JJL<%se^)Fj z%e$jq zdDs45>+kt}-3I$Vhd0k(QGC+KkpGbylYdb0Qn8Dn`GhV65X)tWMEH+J|sN_{`Re$6JsP}5gUYdIT^Es#GQF1aE( z^QCgX&7(=*JbEg>{906<`|Dc%t%GYhr75A)fCyuWY0`u8s>0oy}Q)}=Jfiu-v+JU6Q|uJpviYd3yv%Dv7O zDYSD*PSbsf<*`A>r5rx9aLgC8(z$SODBJnVvJSDxZF{B`_{dE`yV0e)gT`K5Fj@qaH2l*4q~U@6+^k z9F9H55^u3J=0$Dco6GdYukcU1{hx)gzux^zh)I0>YJ1M(zw+Chll)ihowz0a^m@ta zwwkt;LDAP&?u@?7)?y)1Fz@vhmb}%cx1|1xI^?KcbH6QHH8HI0{CBm|FLBmcYZi+z z|EZ~c`rE8Z{COs$`#)+qK&Km6*NCnw&Fp3`#2)bgRF0{7q4QpT6_?{{vhs zY=5}j8QQ8dUV5HxkZL+xm0tGSd4*t6!!xGE*Do*k_qVuMvfGMlwlCkD^tq+ecF*ak z6yw_^z2vYbdqhL;#q4F3Q>IP36jt6nW9hES!(9J+tM}(Do;N!?S$ci|_hLC?Q@491 zr7MrEIy>#O=o(RpM^cRu>sQ99ymbrTI)ANX)oh=A@i$HgD*qPY*;5do-61P<(Xy=l za(lmZ`SzgDoSK_%mxK6!Z}{@zv{~+{4D0{RK`iS|WzL*E`^~)NW;QyBk*lI7g}N`F z=gR%AMat3r!Der_=x^qxj=C%?ESLVO$?95tH=1|ADt%X^EF)LT?2}Q?d3+CT6WS3jEcSZ`^Df8QbxAxhBdd8RjExUfXBSN8K9!u-v zzK-{&{ziyvF6P_&U9e$YfcNHY{ZFi!eT`cSa*M(Y`j_R(}``1 z&y<_oT=L37w&}HJL-WVZZA)_NL%)?Rc%buK;U1@BS}fD-zJ;0$t-Ig-VcychZE^66 zRiQq^5tc*$*f|(D-ZDrqTw1w&p45@VdyE%8+)*=MJZ-MM!R)w-hpf@R-rfG!!_4oe zIYVo*zQT=c|NEI&x67p_XT@{x3MlN^>(k5DH#0qK&-`5-Vi^1|ZwOf0VeR&U$F$?4{ac?yeV4Yp*c>qH*RtGN zvy62cs!VR2U%oTOPPeJFiGRlk?%ig<^3hr&NfmIQm%Je3-J*;ouFX zO63DTgl6bua7E>_+!Ji-E3kH0!1|&vscQQv;U&-OOn4tK@$gAByq*&5xAC}K^_f)h zBZ<5RO^U15RH&&*e!N@$XJ>3xU4q!vsq42*fA?$R*;P9ZK6@c8(4)GA(ebfma^JmAAQ|hCHF{o0?U$!zp2+I7+%>HdhPb5H}xBt{r>jJu73V?dZmbdy7*FuzQy`oeir!>@)fJEw);trvb;8=qAmQn_#WTz+x+16TH?{{+EX%yH|of z*If6ldxUS|+E+ncnI;Hgj6} z5B|3^nxB8!UCEL^d8Im|p~uYr&<5VWjtoI;ulZK3T6cNgN~seWGFh#+?_WrmP{Y1& zf6tt(Ba=0yPpnx#@%60l_nsX4_;Gi!=;w>m@3ob zEewp;1&SID+O7#qaFMc}|9ZKAAoGKH2{RANrw6Z>Hk@vp z@P|QinON$<{sTFO`XAIW94xwWyYBP+vPTb|nw4F?|2CpmRAmces7=bOXN|s@kDniV z{wkN!I4RBWAfcF-;ld-~AAb+a|GSX4=i{-m)TO(>9$@C*l6iUA z%_W|bnchx_-h9sM$|?CtThA=xxfY}QK|;J}{Q?)6u-^^mL$?Pm4B4vBW+iYW*?#$f zq*mdzyDU#nyXv!LO=SE=W`0|>wT%xXCQlG7U&LK#q_C^tb%Xb+$i{!-Az8Y2xgK13 zDSqHh#)J(?ixjq;eBz^)#LmSsd*+%3c7=!R3~U_1Cm5TO=Oj<-U8HzI{=)+aW|==s z3UGCF`g`+-+pFBlDzGXBYpD1o0~tK%IPS(a!q2l>FGN;7w7$TPMKBtt18gI zdqZGu+*}{OC2E{3f4*_IMNYo9Fx+&@txs*9)5>2=&pGx+xw){f(Y`Wh`KD%on;akK>Esssr)b(``>G$MxLnekNP}CGc!%_LW~**K_@wV{}C?ecH5c zP6qqNIL74@!Y{t>d6Oh<^^e2)?FGmKl9H8C+>1<-GcujrCipMg4wh8CqqA zdoOuP9n_af)NNLasy)Z?Q)!mnJNcBu{lE73+P}EK$jP!d(V=>gV%#*z!YUhi^|+7o zUkclPxzHS%n*Bd>V^{lHhi?UrWs9F)x6hpUHT#LhiaAr}9A(N%ylS#4^vaZs+8ZkB zpLtiG&)T$B+AaF)w%)qBivfwtJ}+K==IP2^53_G252x6e9rW3UH`Mg3KM({(&hx`=r(`f zJfk7t_Kh6T+pFIGJ?MU`F+DEnvuX0Qcflq}Hs2W~d0!kVpZ56nw%o7gYj+&~6!j(Z zW{f?9+rF}%b9eSRJQk8V%EtY0!A6Js;#D2dSB0;>iHtqx6FvX8;b{qz!)iXW7l%z1 zO#Le4c|c``^~a6B9^U`W+yCD%@W?aceW{E6_g&E19vZRN%)r~#&sjiNpki70hG6rk zCWr8BhL&Gh+3PMmU;fIpdTZ%wUd{NVpI4Vg$?b~#y>Q*swei9~c7Nfi)QS@*iCL_= znemB}?ml&a6fT~O4hL_Iz53}pU8T9VKgp86@$m81u7W+L85h=OWv|>PW_)YbxBoNF z+P&*xSP*$DXt}-n^x%)1c0Vs$b>dyxly~2Ab@e|_-(S|Nrt@E4eQm1T%Q|27Z`*wZLS3klLST*&4s(KXb1!tlqVDrTtB_<88NFE~=WmN|N0)BpuU>8Be=uviW{8&mU5P0ZH)+MoDu3tWG5PG9A-#@O zyu^^N=gb=mg(aCrY^OWrY;MhB@4f60H7|5p{+1cr>LMeHnq+G}u}bM*l+m4;bL*dK zYVv{@cAdAz4HGWEyng-aEqnRjOMNB6)_E5G;z-=KtyjdL$auES;;?3~P_AC79S$od zIdiCF@NQeVGTQ#sD|4?3E61G9nZ(6UT z>b~yTqpY*LU|s5lpAK8wl(NFPWwI(W9Ti)66oWpzsQ$jiDECHK_6-vsCynS7^Cza6 za~`~8oo2lw@cgRlJa?j2uVLpn6;bDKVbAg8Z#ubC11>TB-c0 zv6nYPMVEfNw`%IPWgAaubuEuf&FNbEA$-RC{YT|~{%$t=ej@oq)%s<7|FH&NjobX} z$%W(p4^94`uBzJ~d2)lNnaBP4=R!X_9N=8)_%&&Ua(2or4S~(=!UsCGpOG=2#=r5^ zclB3G@?HpOPJYAHow_!Adi;d_pU#R%G$}ZwFme5LW;Qu)(zxE!@$@M!)`p~6CQJFZ zv~0>*u4?f0)79AM1$>Q*9zL7ev*p?&!D}iFS2M%hV!xV2ug=fXuPUFb8?*7|HW8m~ z7bkz?SCcY|6fo}7e0gSOQpoK5fD;?vzv?dQ)c!lSV*W*eM7PtNJX%{#yrYAbL`)_38b$ObW$>z7rr}L3w(UNp_zEwG5Yd>A8`B!!J{p$Sg;`ZFl z&u;04?O$2E>~dex36)P@1Hb2_p5)Q=65-ow}IO+G38w$40oIF{&M*im% zW4+C7zr43J-;Lh(V{N;M;%oU|Dr=Vc^2|a5)srV?(RCliPV0yCPlzh_sams?K|tt(*`;e=C5sA*w=D9rwVf8c#BsAz z>H1f}TP1gD^}8+jdh=FVY3nwx0!^OEg^IJD*qh|sPb*E8s$Q{b>(-4*(KlCw76$Wg z`Y8Wrk!W^!-!;?yn?m#NzLOI>!t=s#J*UHkv)2u#u@RaPqsxh%A9L@WGIyO>(1vAzV^_|GS_l8 z&022F$gx!aLP+Ny&0ABr5As(vNhIcNy`?sH!hMC6*I9q6H26B+W;tfsvhK0Ki|_|! zFXpLbcC@{Hbu9Em!1wIMXBKGjPRZ4slQUa8Tc`Mq&)M@@d_MA3TLlWl#4o-wp8B|n zTQ8u_x#2Uk&$iTSJBn8OYSvx;G|RjB-U7$>sV#kUd7`@ROOU-?q1AUp5UEzUVl&eU{2<=ZNH zl{HNK@-mi6qxWvIxvk2_*t=W0Os#B#n#&J=DOGUWrMRqgM7VPS6Pw_oFyq`!#LPllb?XoK;`m-dQq!qOlQhJ2eS3Rqf z4mry+?e68-zKe5T3zhO-yma}Kw=c_Mfg4sr$JBWDm>Maq6}&&^PvW%ovTwPL@myE0 zJASG}TGHp$;;HFJb_Fn(t!Z2!vrgy9QB#)bE2TNCuS=YGY;)X)?FdWK-@~oqaT)u6 zp3T1{ddHWYf3`0}$Cr$r?Dc!M#s1p+)}5up@7jvj+kE}vKF;ozaLrKm{dr>Es=KNt zu8S*=YG2!xI(4_uk>KaC3GU}++sQXYs$kMwze@xPR&N-o*k@-+>=3x=OH#OG` zFKlv_QT~xPMLOVu_mRJRA{ksh3Q@JwrmHbG+02nYXlTb$x$E!jd3C=s-+iB2?lhZ? z|GxJ>mxddMyUy6WX}-l*G^sN9dBi_Q^{B9q7aRhjw#s_HZQj4Jt<`#35}%||ggn#9 z+iMkab@jhXr!G^SEL_7b#!`26RVe3#1&RV`>@sFN3AwCK92g^JFm${;VwHEz`GLQM zQ@4d~us|wSCVII20Ov zdHC_s=KU{4=ls?Ec_ORaWZeW)m)E`4j?O9Tm3N$MIl#=-GR@(%@AQm_8y8vD%sKr2 zp-mlArsDEgi?kTVM*p%kJD-`f7|-4@-&Eqvw$xpf;bl)1_BXmrY^2z`H{ABzw=bK`@kKvqbc8)W~@0_CMJVx<$oAsh2*xLkW=&0a+(p#z>vY1?zS-Uf=mOG?t#h%M=PfNbH5#Qe;^Yt%O(7r zL9)T2+hW7R7~|VwzJl`))5e^$& z+bAZd3ySP=eHWeN|2$x~%yDlxIMXlhqToKxr;grtN-q1($ba~+q3k>V6?s90OM9MO zQL5f@W~BxX*De=EHWrNwOe|4VTUeu*);`+8l4#P$Z?Y5sX+ zbHSxE0eQYt7o5Ru4a%+b7R{qL#&me*fx-JI~&zV5l) zZT&))j=IF^^EM%A-OqPLPA=w|?H5z*#IM0|X3EhVrwcouF)3KR*>HH$=G!Z`ce3R9 zFg28#OjTA^KmWO_UG-D9ZtXd(y0T@VcmLV$|MYA9kK5}kZqJIVZee1}G-~hlU-GuU znM2_3!LM>PYNstHyU&dMw&mZJCqIN`teFHj43nj|{9s|1XefEqslIDTr$q6|-YDzm zw|YGj%9>p_`R4rEg?vu!STY&%AzPHUdDt&EoKMb7u;RX&|Xupj#2D% zsJLE?#6H!+Ii_V*k1D3KN8UP}C3oqkP-Rp7ki9_SGhC>S& zRCqQN@?GXsY(Jr1$)@vMR^fsM14mJ^&=29=MeCZ6?EX2~w5sb`$M^SaY=R19!Jf=d zH?>qu_cMFu`{@ery|bB|2O17o>rUhnnBjFYP56Q1>;Rs-{L_-LYOvpugt{u%R*n`5|{$)%W9TJZ~OHJ(Lg`OJ+ z=wy|@+M>=a^>k}9^9;?$$NTwP%FfNPG^_shCgHGYP=LHpp8P>y*B?wdo-hA!T)NN^ zST5kyzv1$$`^D#N9aqc8bo_VxA$cIVhgpDui{V&Ff!(d9w2SHudv(v>dwrYPKD;e9 z=j&Es&xOsh^%=98)W@z7B=K>VD2K==EV zsoyt#oy=+QF#p1*%e#u>BfJav8WOlsX37?wP<(j#VxfLv!%Lwzi^Sg@@mMF! zxl(=M*TPMQ*V?-t5?|n&ep-rM%IzS2QDYNy-|C4em8eNS z&QY#Zs4rh4EpReg>XOsnH|h4-*FRr8oqB)yW^sXzaS4I4+ zvX>OFWODlGzF+Y{&EnW!|9(x3nqRiak_BM`DA` zvrd_caO^dnJIB6JUr_CmOyQApmo*uf7ATZ0zSF?e+qi7Uzi0MuO{OYW|ESQ^uNqntzF~KTsE`WUG3cN*MDW* zr55eaUeG^({WZI%Qd|xV&b$m98Jz|hH_r5Y>`p046W+&?Cj8)_$zo~o_P+=B|JD6D zEusBO2@5l8FT=**(zk!rRo2Kc&Gu<%2$Q?aS@1xCnX69u#hPWxe8LV6&MkAZj? z&)fHOTEV9+_V>~m7JBirt&O=ebynf`9XqtYFUyXyylI^~v2$nh%O&4=oFcp#c%J!A zRP&ir9&Gs{_fecf>rEDec@>X1uX(Ak@f`lX>~Z1z-vX~DeptWb5tm!&+clfdCEapd zbaLXauj}{!tEzszcKaL9^o@VbqQ5NqET6=-TKxa>+`f6;fo}bM7OCO-=XXT%-94?p zU#3Rn$?yCB_bvD0n&DZ=Y1(-@N<&(SDmx9rf?`erM}@X1@QY@3QFkUvw@RojOy+v~9)z3+;AS z`t{{ru*d zn@$W2TsEMy0OpqOdh`92#1(a>$$zXqZ?pe(v0v!>k@x<0+63A@`^0p}du+HBE510` z?(@v_d70Dwnx=V_Kb;!BZMT}cVWIBJ%FdFL=YL+W|9kz2=_%=XMuO*%Y~1-+lk*^SR~o)=!(C`Ty-a?f-|S&wrS`b#DEWiSEB%P5os0Np{J@9g~l~ z{GL*qXVm)qy88awAKf!fUjN~{T5g$X_O+IJwZ55!l4@1fGPeK!e12!pAz%CDV%h%S zzX^|Io@_aiU;q1d*~xj;?{=2$zuO-kSE>5r!Oq`*e?0EreYmVJGIFMF)E14xzWyb~ zz5Db%_zE_-ru~SVVO4T8iEp9m3&%$@4txsoQF6L5zhJNL$u!}YarJ*oxBP2haGlT0 zwDp$Y!87v|w3aI`^0)Qb?e+T7QmG3?*UQ9{%}UxP<$hkrv#V6?f9%qUkxwkuZ!A4L z=g>zsmLH;g0$!{NHfA^`jLq$fD!Oo{kdy1F?*tzCpYw&QbySSsJdiI?e zESZcg_YB`|J<`DBvWYEmS(?@>pVjkU?dv;dsj#GI-%fSO6?*fZeA@N-rPN~4L+=l5 z{JpN_b)nOTpD(N#3L6TRO)g$nna^;patn`PbKNJ;OJA=FKa~n-@R(v%HzDWWj@J*p zN}pF5zw`L;dzVc0uRf#3vRg`%O+_=3*q&C%GdP~vQlP=Z?N!~f*o?zJ~!~O{C#%&JT$}fVK`|(ySU|?-1Sl|%-$X&qWc;)lUhT9hA z-KneDeAnKJ>BzgvE&j_AoaPCqNH8cE)P7J^XmAkMDU1j%;MILNC%Y~=$?~(|-LuO$ z1g=E5Xj&?$TW@q#)3sF-KH!k-a4v_7nMt@)FG76I%_o2MmdrmT$f&eb!$n<|y$T|1uT`Cwb}|Sixs}YA#Vl0Uf6$WSGN*%uZlnA`%jK#a zKY2MW2sAKl<}6b1dcIOdP@!p6*S|M?%taf7vo#8~y-Yn6n6^&1yZul@!7L_+9gbF? z${QY7#BOzA;mA^7$?EtI{( z6ES@vGb^9z0*|sap2xkM%AOW{U*asos3e<}$S|$ZRAf!>f}`vr7T4CPYyB*}W73zx zdoZML|DUJ&Cr|$VTF%l@m-_!e-HvGI#+xqr!uMBkOuj5M!-r4gha8K$`MnC|bLF=( zI%QRhReK(FFvmV%$kvc3IlR$tEBhMeR%VvS-4pYD^vrr9_SIC1&%3ePQ`zB*Uj6r9 zcjivEEqrw3z{WK1zad8$WEU_fFfi#h?mRly`bTZCAUi_RnMa?Z)SAgg0xhJ-{HWidlR>+7Ce4i#9Il%D?Sh3b``{eg7rjB(>N@vTJ zf2(}Br@D&y*%Kp|{nc&E%u)h*=P#s$l`J()^L+B|1gDv|dT^k-)S|_oSAOa^x0Idz z5|_ZQDIrbTD_dq+eosvD^U=DLKL6I-eP1ql3-6y>Vr?@knXy+0BX|a4pdO>gcj^dNwKg(R&@qEI$rBi|zVn|$}0PG3YV4~x_L%>(ZA;o^O=?Qs9LR`|7Z9A z$V>LB9@hlkv`YovFJ5q-QSjduq4m=L{$$_ZUsq)_F<-Z3dt=Jx^&cM}U+(^JQBcV& z=DSiW(|$1pONP8WxP@zL%fw*aX}dM$W}SapzHPDMtX&r~Bi~MLxy$4-e@ae+?UAz+ zxx}q)%C&0jYGfFd&h*Z+d{;dAr0DI;wva;)F1_*I__(=yX5{O%>+ig4Uc4{&wLQ3> z-|OkOr=420$F~&Sko&lpza?M1|Ajg4#%?3m=}LTGq}i1mzDU1b%)VTiUCCid@>-YF zSLUFEX@1R}-_M=zi-f|WiC6cnzt{2H_Wb8O=BE6v)|c;gzu(q(ji>#x>v7w|j1|1+ z4^N3vf0%u-@VUi?%X(+$?mqhl)a2Oz>*{*7Nt?ZorB06(s}WTzG_rbO%J;!hD0iBJ z@|23US4TqB@2=R1Lu1}t~ z@~6i1xfTaRm^->I_?+cn`OCl*>UE&{6+_WwyRublUbrl`ypUUc*>L_!ww!BQD?TPw zzu)^k=kKqtH8b~JX6+Cvo6DRt@#L2RyFktFX=;_gF>3%L#x7^e!% zt9Cx`e&b{@f9Iol&l%=QaCQFjUe`UZK50raS!XPfd@Pey(S!fYn!&}V#Df%XFfcGM Nc)I$ztaD0e0s!s-oDl#3 literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/index.html b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/index.html new file mode 100644 index 0000000..bd0c842 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/index.html @@ -0,0 +1,487 @@ + + + + + + +Generate Barcodes for Stock Locations + + + +
+

Generate Barcodes for Stock Locations

+ + +

Beta License: AGPL-3 OCA/stock-logistics-barcode Translate me on Weblate Try me on Runboat

+

This module expands Odoo functionality, allowing user to generate barcode +depending on a given barcode rule for Stock Locations.

+

For example, a typical pattern for partners is “042………” that means +that: +* the EAN13 code will begin by ‘042’ +* followed by 0 digits (named Barcode Base in this module) +* a 13 digit control

+

With this module, it is possible to:

+
    +
  • Assign a pattern (barcode.rule) to a stock.location
  • +
  • +
    Define a Barcode base:
    +
      +
    • manually, if the base of the barcode must be set by a user. (typically an +internal code defined in your company)
    • +
    • automatically by a sequence, if you want to let Odoo to increment a +sequence. (typical case of a customer number incrementation)
    • +
    +
    +
    +
  • +
  • Generate a barcode, based on the defined pattern and the barcode base
  • +
+

Table of contents

+ +
+

Configuration

+

To configure this module, see the ‘Configuration’ Section of the description +of the module ‘barcodes_generator_abstract’

+
+
+

Usage

+

To use this module, you need to:

+
    +
  • Go to a Stock Location form
  • +
+
+
1 for manual generation
+
    +
  • Set a Barcode Rule
  • +
  • Set a Barcode Base
  • +
  • click on the button ‘Generate Barcode (Using Barcode Rule)’
  • +
+
+
2 for automatic generation
+
    +
  • Set a Barcode Rule
  • +
  • click on the button ‘Generate Base (Using Sequence)’
  • +
  • click on the button ‘Generate Barcode (Using Barcode Rule)’
  • +
+
+
+https://raw.githubusercontent.com/barcodes_generator/static/description/stock_location_sequence_generation.png +
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • LasLabs
  • +
+
+
+

Contributors

+ +
+
+

Other credits

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/stock-logistics-barcode project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/stock_location_sequence_generation.png b/odoo-bringout-oca-stock-logistics-barcode-barcodes_generator_location/barcodes_generator_location/static/description/stock_location_sequence_generation.png new file mode 100644 index 0000000000000000000000000000000000000000..43259e9e05a6a8afe7ebd51e7a4b5f48ffe4bb7c GIT binary patch literal 67651 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 + + + + stock.location + + + + + + + + + + + + + + + diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_controller.esm.js b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_controller.esm.js new file mode 100644 index 0000000..1a71bb2 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_controller.esm.js @@ -0,0 +1,71 @@ +/** @odoo-module */ +/* Copyright 2021 Tecnativa - Alexandre D. Díaz + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +import {onMounted, useEffect} from "@odoo/owl"; +import {FormController} from "@web/views/form/form_controller"; +import {useService} from "@web/core/utils/hooks"; + +export class StockBarcodesFormController extends FormController { + setup() { + super.setup(); + const busService = useService("bus_service"); + const ormService = useService("orm"); + this.enableApplyCount = false; + // Adds support to use control_pannel_hidden from the + // context to disable the control panel + if (this.props.context.control_panel_hidden) { + this.display.controlPanel = false; + } + + const handleNotification = ({detail: notifications}) => { + if (notifications && notifications.length > 0) { + notifications.forEach((notif) => { + const {payload, type} = notif; + if (type === "count_apply_inventory" && payload) { + this.countApplyInventory(payload.count); + } + }); + } + }; + useEffect(() => { + busService.addChannel("stock_barcodes_form_update"); + busService.addEventListener("notification", handleNotification); + const $applyInventory = $("span.count_apply_inventory"); + if ($applyInventory.length > 0) { + if (!this.enableApplyCount) { + this.countApplyInventory(1); + this.enableApplyCount = true; + } + } else { + this.enableApplyCount = false; + } + return () => { + busService.deleteChannel("stock_barcodes_form_update"); + busService.removeEventListener("notification", handleNotification); + }; + }); + + onMounted(async () => { + if (this.props.resModel === "wiz.stock.barcodes.read.inventory") { + const fields = ["count_inventory_quants"]; + const countApply = await ormService.call( + this.props.resModel, + "read", + [this.props.resId], + {fields} + ); + this.countApplyInventory( + countApply.length > 0 ? countApply[0].count_inventory_quants : 0 + ); + } + }); + } + + countApplyInventory(countApply = 0) { + const $countApply = $("span.count_apply_inventory"); + if ($countApply.length) { + $countApply.text(countApply); + } + } +} diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_view.esm.js b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_view.esm.js new file mode 100644 index 0000000..a85ed91 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/form/form_view.esm.js @@ -0,0 +1,14 @@ +/** @odoo-module */ +/* Copyright 2021 Tecnativa - Alexandre D. Díaz + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +import {StockBarcodesFormController} from "./form_controller.esm"; +import {formView} from "@web/views/form/form_view"; +import {registry} from "@web/core/registry"; + +export const StockBarcodesFormView = { + ...formView, + Controller: StockBarcodesFormController, +}; + +registry.category("views").add("stock_barcodes_form", StockBarcodesFormView); diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_record.esm.js b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_record.esm.js new file mode 100644 index 0000000..bf94bdc --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_record.esm.js @@ -0,0 +1,27 @@ +/** @odoo-module */ +/* Copyright 2022 Tecnativa - Alexandre D. Díaz + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +import {KanbanRecord} from "@web/views/kanban/kanban_record"; +import {patch} from "@web/core/utils/patch"; + +patch(KanbanRecord.prototype, "stock_barcodes.KanbanRecord", { + props: { + ...KanbanRecord.props, + }, + + setup() { + this._super(...arguments); + }, + + async onCustomGlobalClick() { + const record_barcode = $('div[name="inventory_quant_ids"]'); + if (record_barcode.length > 0) { + const record = this.props.record; + $("div.oe_kanban_operations").addClass("d-none"); + $("div.oe_kanban_operations-" + record.data.id).removeClass("d-none"); + return; + } + this._super.apply(this, arguments); + }, +}); diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_renderer.esm.js b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_renderer.esm.js new file mode 100644 index 0000000..bd3f846 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_renderer.esm.js @@ -0,0 +1,200 @@ +/** @odoo-module */ +/* Copyright 2022 Tecnativa - Alexandre D. Díaz + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +import {onPatched, useEffect, useRef} from "@odoo/owl"; +import {useBus, useService} from "@web/core/utils/hooks"; +import {KanbanRenderer} from "@web/views/kanban/kanban_renderer"; +import {isAllowedBarcodeModel} from "../../utils/barcodes_models_utils.esm"; +import {patch} from "@web/core/utils/patch"; +import {useHotkey} from "@web/core/hotkeys/hotkey_hook"; + +patch(KanbanRenderer.prototype, "stock_barcodes.KanbanRenderer", { + setup() { + const rootRef = useRef("root"); + useHotkey( + "Enter", + ({target}) => { + if (!target.classList.contains("o_kanban_record")) { + return; + } + + // Open first link + let firstLink = null; + if (isAllowedBarcodeModel(this.props.list.resModel)) { + firstLink = target.querySelector( + ".oe_kanban_action_button,.oe_btn_quick_action" + ); + } + if (!firstLink) { + firstLink = target.querySelector( + ".oe_kanban_global_click, a, button" + ); + } + if (firstLink && firstLink instanceof HTMLElement) { + firstLink.click(); + } + return; + }, + {area: () => rootRef.el} + ); + + this._super(...arguments); + this.ormService = useService("orm"); + this.action = useService("action"); + const busService = useService("bus_service"); + this.enableCurrentOperation = 0; + const handleNotification = ({detail: notifications}) => { + if (notifications && notifications.length > 0) { + notifications.forEach((notif) => { + const {payload, type} = notif; + if (type === "enable_operations" && payload) { + this.enableCurrentOperation = payload.id; + } + }); + } + }; + useEffect(() => { + busService.addChannel("stock_barcodes_kanban_update"); + busService.addEventListener("notification", handleNotification); + return () => { + busService.deleteChannel("stock_barcodes_kanban_update"); + busService.removeEventListener("notification", handleNotification); + }; + }); + + onPatched(() => { + $("div.oe_kanban_operations-" + this.enableCurrentOperation).removeClass( + "d-none" + ); + }); + + if (isAllowedBarcodeModel(this.props.list.resModel)) { + if (this.env.searchModel) { + useBus(this.env.searchModel, "focus-view", () => { + const {model} = this.props.list; + if (model.useSampleModel || !model.hasData()) { + return; + } + const cards = Array.from( + rootRef.el.querySelectorAll(".o_kanban_record") + ); + const firstCard = cards.find( + (card) => + card.querySelectorAll("button[name='action_barcode_scan']") + .length > 0 + ); + if (firstCard) { + // Focus first kanban card + firstCard.focus(); + } + }); + } + } + + this.showMessageScanProductPackage = + this.props.list.resModel === "stock.picking"; + }, + + getNextCard(direction, iCard, cards, iGroup, isGrouped) { + let nextCard = null; + switch (direction) { + case "down": + nextCard = iCard < cards[iGroup].length - 1 && cards[iGroup][iCard + 1]; + break; + case "up": + nextCard = iCard > 0 && cards[iGroup][iCard - 1]; + break; + case "right": + if (isGrouped) { + nextCard = iGroup < cards.length - 1 && cards[iGroup + 1][0]; + } else { + nextCard = iCard < cards[0].length - 1 && cards[0][iCard + 1]; + } + break; + case "left": + if (isGrouped) { + nextCard = iGroup > 0 && cards[iGroup - 1][0]; + } else { + nextCard = iCard > 0 && cards[0][iCard - 1]; + } + break; + } + return nextCard; + }, + + // eslint-disable-next-line complexity + // This is copied from the base kanban_renderer. + // We want to only focus card with barcode when isAllowedBarcodeModel returns true + // Since there is no way to hook and change the candidate cards that are selectable + // (cards line 84) we cannot inherit and change the result. And even if we called + // super it would not respect inheritability + /** + * Redefines focusNextCard to select only kanban card with a barcode + * when isAllowBarcodeModel returns true for the current model + * + * @param {Node} area + * @param {String} direction + * + * @returns {String/Boolean} + */ + focusNextCard(area, direction) { + const {isGrouped} = this.props.list; + const closestCard = document.activeElement.closest(".o_kanban_record"); + if (!closestCard) { + return; + } + const groups = isGrouped + ? [...area.querySelectorAll(".o_kanban_group")] + : [area]; + let cards = [...groups] + .map((group) => [...group.querySelectorAll(".o_kanban_record")]) + .filter((group) => group.length); + + if (isAllowedBarcodeModel(this.props.list.resModel)) { + cards = cards.map((group) => { + const result = group.filter((card) => { + return ( + card.querySelectorAll('button[name="action_barcode_scan"]') + .length > 0 + ); + }); + return result; + }); + } + + let iGroup = null; + let iCard = null; + for (iGroup = 0; iGroup < cards.length; iGroup++) { + const i = cards[iGroup].indexOf(closestCard); + if (i !== -1) { + iCard = i; + break; + } + } + if (iCard === undefined) { + iCard = 0; + iGroup = 0; + } + // Find next card to focus + const nextCard = this.getNextCard(direction, iCard, cards, iGroup, isGrouped); + + if (nextCard && nextCard instanceof HTMLElement) { + nextCard.focus(); + return true; + } + }, + + async openBarcodeScanner() { + if (this.showMessageScanProductPackage) { + const action = await this.ormService.call( + "stock.picking", + "action_barcode_scan", + [false, false] + ); + this.action.doAction(action); + } + }, +}); + +KanbanRenderer.template = "stock_barcodes.BarcodeKanbanRenderer"; diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_view.esm.js b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_view.esm.js new file mode 100644 index 0000000..1e03eab --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/kanban_view.esm.js @@ -0,0 +1,8 @@ +/** @odoo-module */ + +import {kanbanView} from "@web/views/kanban/kanban_view"; +import {registry} from "@web/core/registry"; + +registry.category("views").add("stock_barcodes_kanban", { + ...kanbanView, +}); diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/stock_barcodes_kanban.xml b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/stock_barcodes_kanban.xml new file mode 100644 index 0000000..e160814 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/kanban/stock_barcodes_kanban.xml @@ -0,0 +1,28 @@ + + + + + +
+ Scan a transfer, a product or a lot to filter your records + Scan a transfer or a product to filter your records + +
+
+
+ +
diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/view_compiler.esm.js b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/view_compiler.esm.js new file mode 100644 index 0000000..986bd1f --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/view_compiler.esm.js @@ -0,0 +1,16 @@ +/** @odoo-module */ + +import {ViewCompiler} from "@web/views/view_compiler"; +import {patch} from "@web/core/utils/patch"; + +patch(ViewCompiler.prototype, "Add hotkey props to button tag", { + compileButton(el, params) { + const hotkey = el.getAttribute("data-hotkey"); + el.removeAttribute("data-hotkey"); + const button = this._super(el, params); + if (hotkey) { + button.setAttribute("hotkey", hotkey); + } + return button; + }, +}); diff --git a/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/views.esm.js b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/views.esm.js new file mode 100644 index 0000000..c126ce3 --- /dev/null +++ b/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/static/src/views/views.esm.js @@ -0,0 +1,225 @@ +/** @odoo-module */ +/* Copyright 2024 Akretion +/* Copyright 2024 Tecnativa + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +import {getVisibleElements, isVisible} from "@web/core/utils/ui"; +import {FormController} from "@web/views/form/form_controller"; +import {KanbanController} from "@web/views/kanban/kanban_controller"; +import {ListController} from "@web/views/list/list_controller"; +import {_t} from "@web/core/l10n/translation"; +import {isAllowedBarcodeModel} from "../utils/barcodes_models_utils.esm"; +import {patch} from "@web/core/utils/patch"; +import {useEffect} from "@odoo/owl"; +import {useService} from "@web/core/utils/hooks"; + +let barcodeOverlaysVisible = false; + +// This is necessary because the hotkey service does not make its API public for +// some reasons +export function barcodeRemoveHotkeyOverlays() { + for (const overlay of document.querySelectorAll(".o_barcode_web_hotkey_overlay")) { + overlay.remove(); + } + barcodeOverlaysVisible = false; +} + +// This is necessary because the hotkey service does not make its API public for +// some reasons +export function barcodeAddHotkeyOverlays(activeElement) { + for (const el of getVisibleElements( + activeElement, + "[data-hotkey]:not(:disabled)" + )) { + const hotkey = el.dataset.hotkey; + const overlay = document.createElement("div"); + overlay.classList.add( + "o_barcode_web_hotkey_overlay", + "position-absolute", + "top-0", + "bottom-0", + "start-0", + "end-0", + "d-flex", + "justify-content-center", + "align-items-center", + "m-0", + "bg-black-50", + "h6" + ); + const overlayKbd = document.createElement("kbd"); + overlayKbd.className = "small"; + overlayKbd.appendChild(document.createTextNode(hotkey.toUpperCase())); + overlay.appendChild(overlayKbd); + + let overlayParent = null; + if (el.tagName.toUpperCase() === "INPUT") { + // Special case for the search input that has an access key + // defined. We cannot set the overlay on the input itself, + // only on its parent. + overlayParent = el.parentElement; + } else { + overlayParent = el; + } + + if (overlayParent.style.position !== "absolute") { + overlayParent.style.position = "relative"; + } + overlayParent.appendChild(overlay); + } + barcodeOverlaysVisible = true; +} + +function setupView() { + const actionService = useService("action"); + const uiService = useService("ui"); + const busService = useService("bus_service"); + const notification = useService("notification"); + + const handleKeys = async (ev) => { + if (ev.keyCode === 113) { + // F2 + const {activeElement} = uiService; + + if (barcodeOverlaysVisible) { + barcodeRemoveHotkeyOverlays(); + } else { + barcodeAddHotkeyOverlays(activeElement); + } + } else if (ev.keyCode === 120) { + // F9 + const button = document.querySelector("button[name='action_clean_values']"); + if (isVisible(button)) { + button.click(); + } + } else if (ev.keyCode === 123 || ev.keyCode === 115) { + // F12 or F4 + await actionService.doAction( + "stock_barcodes.action_stock_barcodes_action_client", + { + name: "Barcode wizard menu", + res_model: "wiz.stock.barcodes.read.picking", + type: "ir.actions.act_window", + } + ); + } + }; + + const handleNotification = ({detail: notifications}) => { + if (notifications && notifications.length > 0) { + notifications.forEach((notif) => { + const {payload, type} = notif; + if ( + (this.model.root.resModel === payload.res_model) & + (this.model.root.resId === payload.res_id) + ) { + if (type === "stock_barcodes_sound") { + if (payload.sound === "ko") { + this.$sound_ko[0].play(); + } else { + this.$sound_ok[0].play(); + } + } else if (type === "stock_barcodes_focus") { + requestIdleCallback(() => { + const input = document.querySelector( + `[name=${payload.field_name}] input` + ); + if (input) { + input.focus(); + } + }); + } else if (type === "stock_barcodes_notify") { + notification.add(notif.payload.message, { + title: notif.payload.title, + type: notif.payload.type, + sticky: notif.payload.sticky, + }); + } + } + + if (type === "stock_barcodes_edit_manual") { + if (payload.manual_entry) { + this.env.bus.trigger("enableFormEditBarcode"); + } else if (!payload.manual_entry) { + this.env.bus.trigger("disableFormEditBarcode"); + } + } else if (type === "actions_barcode") { + if (payload.valid_picking) { + notification.add(_t("The transfer has been validated"), { + type: "success", + }); + } else if (payload.apply_inventory) { + actionService.doAction( + "stock_barcodes.action_stock_barcodes_action_client" + ); + notification.add( + _t("The inventory adjustment has been validated"), + { + type: "success", + } + ); + } + } else if (type === "actions_barcode_notification") { + notification.add(_t(payload.message), { + type: payload.message_type, + sticky: payload.sticky, + }); + } + }); + } + }; + + useEffect(() => { + document.body.addEventListener("keydown", handleKeys); + + this.$sound_ok = $("