diff --git a/setup/shopfloor_reception_mobile/odoo/addons/shopfloor_reception_mobile b/setup/shopfloor_reception_mobile/odoo/addons/shopfloor_reception_mobile new file mode 120000 index 0000000000..f8e621457c --- /dev/null +++ b/setup/shopfloor_reception_mobile/odoo/addons/shopfloor_reception_mobile @@ -0,0 +1 @@ +../../../../shopfloor_reception_mobile \ No newline at end of file diff --git a/setup/shopfloor_reception_mobile/setup.py b/setup/shopfloor_reception_mobile/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/shopfloor_reception_mobile/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/shopfloor_reception_mobile/README.rst b/shopfloor_reception_mobile/README.rst new file mode 100644 index 0000000000..f1ecf20df1 --- /dev/null +++ b/shopfloor_reception_mobile/README.rst @@ -0,0 +1,87 @@ +========================== +Shopfloor reception mobile +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:234cb764175aaec3c2482ea7467a0a1c81235ee64c1a2e183614e26571157c99 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fwms-lightgray.png?logo=github + :target: https://github.com/OCA/wms/tree/16.0/shopfloor_reception_mobile + :alt: OCA/wms +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/wms-16-0/wms-16-0-shopfloor_reception_mobile + :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/wms&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Frontend for the reception scenario in shopfloor. +Allows to receive products and create the proper packs for each logistic unit. + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Juan Miguel Sánchez Arce +* Michael Tietz (MT Software) +* Souheil Bejaoui + +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-JuMiSanAr| image:: https://github.com/JuMiSanAr.png?size=40px + :target: https://github.com/JuMiSanAr + :alt: JuMiSanAr + +Current `maintainer `__: + +|maintainer-JuMiSanAr| + +This module is part of the `OCA/wms `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/shopfloor_reception_mobile/__init__.py b/shopfloor_reception_mobile/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/shopfloor_reception_mobile/__manifest__.py b/shopfloor_reception_mobile/__manifest__.py new file mode 100644 index 0000000000..a4f9bda450 --- /dev/null +++ b/shopfloor_reception_mobile/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2022 Camptocamp SA (http://www.camptocamp.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Shopfloor reception mobile", + "summary": "Scenario for receiving products", + "version": "16.0.1.0.0", + "development_status": "Beta", + "depends": ["shopfloor_mobile_base", "shopfloor_reception"], + "author": "Camptocamp, Odoo Community Association (OCA)", + "maintainers": ["JuMiSanAr"], + "website": "https://github.com/OCA/wms", + "category": "Warehouse Management", + "license": "AGPL-3", + "installable": True, + "data": ["templates/assets.xml"], +} diff --git a/shopfloor_reception_mobile/i18n/it.po b/shopfloor_reception_mobile/i18n/it.po new file mode 100644 index 0000000000..e69de29bb2 diff --git a/shopfloor_reception_mobile/i18n/shopfloor_reception_mobile.pot b/shopfloor_reception_mobile/i18n/shopfloor_reception_mobile.pot new file mode 100644 index 0000000000..4d8b20f912 --- /dev/null +++ b/shopfloor_reception_mobile/i18n/shopfloor_reception_mobile.pot @@ -0,0 +1,13 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.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" diff --git a/shopfloor_reception_mobile/readme/CONTRIBUTORS.rst b/shopfloor_reception_mobile/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..89cd5575f3 --- /dev/null +++ b/shopfloor_reception_mobile/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Juan Miguel Sánchez Arce +* Michael Tietz (MT Software) +* Souheil Bejaoui \ No newline at end of file diff --git a/shopfloor_reception_mobile/readme/DESCRIPTION.rst b/shopfloor_reception_mobile/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..a5eb54d03c --- /dev/null +++ b/shopfloor_reception_mobile/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +Frontend for the reception scenario in shopfloor. +Allows to receive products and create the proper packs for each logistic unit. diff --git a/shopfloor_reception_mobile/static/description/icon.png b/shopfloor_reception_mobile/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/shopfloor_reception_mobile/static/description/icon.png differ diff --git a/shopfloor_reception_mobile/static/description/index.html b/shopfloor_reception_mobile/static/description/index.html new file mode 100644 index 0000000000..74d45b61d4 --- /dev/null +++ b/shopfloor_reception_mobile/static/description/index.html @@ -0,0 +1,425 @@ + + + + + +Shopfloor reception mobile + + + +
+

Shopfloor reception mobile

+ + +

Beta License: AGPL-3 OCA/wms Translate me on Weblate Try me on Runboat

+

Frontend for the reception scenario in shopfloor. +Allows to receive products and create the proper packs for each logistic unit.

+

Table of contents

+ +
+

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

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

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:

+

JuMiSanAr

+

This module is part of the OCA/wms project on GitHub.

+

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

+
+
+
+ + diff --git a/shopfloor_reception_mobile/static/src/demo/demo.reception.js b/shopfloor_reception_mobile/static/src/demo/demo.reception.js new file mode 100644 index 0000000000..7da80f76d1 --- /dev/null +++ b/shopfloor_reception_mobile/static/src/demo/demo.reception.js @@ -0,0 +1,52 @@ +/** + * Copyright 2022 Camptocamp SA (http://www.camptocamp.com) + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + */ + +import {demotools} from "/shopfloor_mobile_base/static/wms/src/demo/demo.core.js"; + +let receipt_pickings = []; +for (let i = 0; i < 10; i++) { + receipt_pickings.push( + demotools.makePicking( + {}, + {lines_count: 5, line_random_pack: true, line_random_dest: true} + ) + ); +} + +const data_for_select_document = { + next_state: "select_document", + data: { + select_document: { + pickings: receipt_pickings, + }, + }, +}; + +const DEMO_RECEPTION = { + receipts: function (data) { + const res = data_for_select_document; + return res; + }, + scan_document: function (data) { + return { + next_state: "select_line", + data: { + select_line: { + picking: receipt_pickings.find((p) => p.id === data.picking_id), + }, + }, + }; + }, +}; + +const menuitem_id = demotools.addAppMenu( + { + name: "Reception", + scenario: "reception", + picking_types: [{id: 27, name: "Random type"}], + }, + "re_1" +); +demotools.add_case("reception", menuitem_id, DEMO_RECEPTION); diff --git a/shopfloor_reception_mobile/static/src/scenario/reception.js b/shopfloor_reception_mobile/static/src/scenario/reception.js new file mode 100644 index 0000000000..f921e21a35 --- /dev/null +++ b/shopfloor_reception_mobile/static/src/scenario/reception.js @@ -0,0 +1,508 @@ +/** + * Copyright 2022 Camptocamp SA (http://www.camptocamp.com) + * Copyright 2023 Michael Tietz (MT Software) + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + */ + +import {ScenarioBaseMixin} from "/shopfloor_mobile_base/static/wms/src/scenario/mixins.js"; +import {process_registry} from "/shopfloor_mobile_base/static/wms/src/services/process_registry.js"; +import event_hub from "/shopfloor_mobile_base/static/wms/src/services/event_hub.js"; +import {reception_states} from "./reception_states.js"; + +const Reception = { + mixins: [ScenarioBaseMixin], + template: ` + + + + + + + + + + + + + + + + `, + computed: { + visible_pickings: function () { + return !_.isEmpty(this.filtered_pickings) + ? this.filtered_pickings + : this.state.data.pickings; + }, + search_input_placeholder_expiry: function () { + return this.state.display_info.scan_input_placeholder_expiry; + }, + line_being_handled: function () { + return this.state.data.selected_move_line[0] || {}; + }, + ordered_moves: function () { + const moves = _.result(this.state, "data.picking.moves", []); + if (_.isEmpty(moves)) { + return; + } + // We sort the moves to ensure that the following order always takes place: + // Top: Partially done moves. + // Middle: Moves with 0 quantity_done. + // Bottom: Completely done moves. + return moves.sort((a, b) => a.progress - b.progress); + }, + }, + methods: { + screen_title: function () { + if (_.isEmpty(this.current_doc()) || this.state_is("select_document")) { + return this.menu_item().name; + } + const title = this.current_doc().record.name; + return title; + }, + current_doc: function () { + const data = this.state_get_data("select_move"); + if (_.isEmpty(data)) { + return null; + } + return { + record: data.picking, + identifier: data.picking.name, + }; + }, + picking_display_fields: function () { + return [ + {path: "origin", label: "Source Document"}, + {path: "partner.name", label: "Partner"}, + {path: "carrier"}, + { + path: "scheduled_date", + renderer: (rec, field) => { + return ( + "Scheduled Date: " + + this.utils.display.render_field_date(rec, field) + ); + }, + }, + ]; + }, + operation_options: function () { + return { + title_action_field: {action_val_path: "name"}, + fields: this.picking_display_fields(), + }; + }, + select_document_display_fields: function () { + var fields = this.picking_display_fields(); + fields.push({path: "move_line_count", label: "Lines"}); + return fields; + }, + manual_select_options_for_select_document: function (today_only = false) { + return { + group_title_default: today_only + ? "Pickings to process today" + : "Pickings to process", + group_color: this.utils.colors.color_for("screen_step_todo"), + list_item_extra_component: "picking-list-item-progress-bar", + showActions: false, + list_item_options: { + key_title: "name", + loud_title: true, + title_action_field: { + action_val_path: "name", + }, + fields: this.select_document_display_fields(), + }, + }; + }, + picking_detail_options_for_set_lot: function () { + return { + key_title: "product.display_name", + fields: [ + { + path: "product.supplier_code", + label: "Vendor code", + }, + { + path: "product.barcode", + label: "Barcode", + }, + {path: "lot.name", label: "Lot", klass: "loud"}, + { + path: "lot.expiration_date", + label: "Expiry date", + klass: "loud", + renderer: (rec, field) => { + return this.utils.display.render_field_date(rec, field); + }, + }, + ], + }; + }, + picking_detail_options_for_set_quantity: function () { + return { + key_title: "product.display_name", + fields: [ + { + path: "product.barcode", + label: "Barcode", + }, + { + path: "product.supplier_code", + label: "Vendor code", + }, + {path: "lot.name", label: "Lot"}, + { + path: "lot.expiration_date", + label: "Expiry date", + renderer: (rec, field) => { + return this.utils.display.render_field_date(rec, field); + }, + }, + ], + }; + }, + picking_detail_options_for_select_move: function (move) { + return { + show_title: true, + showActions: false, + list_item_options: { + loud_title: true, + title_action_field: { + action_val_path: "name", + }, + list_item_klass_maker: this.move_card_color, + key_title: "product.display_name", + fields: [ + { + path: "product.barcode", + label: "Barcode", + }, + { + path: "product.supplier_code", + label: "Vendor code", + }, + { + path: "quantity_done", + label: "Qty done", + display_no_value: true, + }, + ], + }, + }; + }, + picking_detail_options_for_set_destination: function () { + return { + key_title: "product.display_name", + fields: [ + { + path: "product.supplier_code", + label: "Vendor code", + }, + { + path: "product.barcode", + label: "Barcode", + action_val_path: "barcode", + }, + { + path: "lot.name", + label: "Lot", + }, + { + path: "lot.expiration_date", + label: "Expiry date", + renderer: (rec, field) => { + return this.utils.display.render_field_date(rec, field); + }, + }, + { + path: "package_dest.name", + label: "Pack", + klass: "loud", + }, + ], + }; + }, + select_dest_package_display_name_values: function (rec) { + var values = []; + if (rec.origin) { + values.push(rec.origin); + } + if (rec.partner.name) { + values.push(rec.partner.name); + } + return values; + }, + select_dest_package_display_name: function (rec) { + var values = this.select_dest_package_display_name_values(); + return values.join(" - "); + }, + picking_detail_options_for_select_dest_package: function () { + return { + fields: [ + { + path: "origin", + renderer: (rec, field) => { + return this.select_dest_package_display_name(rec); + }, + }, + ], + }; + }, + manual_select_options_for_select_dest_package: function () { + return { + group_title_default: "Packs available", + group_color: this.utils.colors.color_for("screen_step_todo"), + list_item_component: "list-item", + list_item_options: { + fields: [ + {path: "weight", label: "Weight", display_no_value: true}, + { + path: "move_line_count", + label: "Lines already in pack", + display_no_value: true, + }, + {path: "storage_type.name", label: "Package type"}, + ], + }, + }; + }, + on_search: function (input) { + this.filtered_pickings = this.state.data.pickings.filter((picking) => + this._apply_search_filter(picking, input.text) + ); + }, + reset_picking_filter: function () { + this.filtered_pickings = []; + }, + lot_has_expiry_date: function () { + // If there's a expiry date, it means there's a lot too. + const expiry_date = _.result( + this.line_being_handled, + "lot.expiration_date", + "" + ); + return !_.isEmpty(expiry_date); + }, + get_expiration_date_from_lot: function (lot) { + if (!lot.expiration_date) { + return; + } + return lot.expiration_date.split("T")[0]; + }, + move_card_color: function (move) { + if (move.progress === 100) { + return "screen_step_done"; + } else { + return "screen_step_todo"; + } + }, + _apply_search_filter: function (picking, input) { + if (_.isEmpty(picking.origin)) { + return false; + } + return picking.origin.includes(input); + }, + _get_states: function () { + return reception_states.bind(this)(); + }, + }, + data: function () { + return { + usage: "reception", + initial_state_key: "select_document", + scan_destination_qty: 0, + states: this._get_states(), + filter_input_placeholder: "Find an operation", + filtered_pickings: [], + }; + }, +}; + +process_registry.add("reception", Reception); + +export default Reception; diff --git a/shopfloor_reception_mobile/static/src/scenario/reception_states.js b/shopfloor_reception_mobile/static/src/scenario/reception_states.js new file mode 100644 index 0000000000..9ff37f360a --- /dev/null +++ b/shopfloor_reception_mobile/static/src/scenario/reception_states.js @@ -0,0 +1,299 @@ +/** + * Copyright 2020 Camptocamp SA (http://www.camptocamp.com) + * Copyright 2023 Michael Tietz (MT Software) + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + */ + +/* + Define states for reception scenario. + @param this VueJS component instance +*/ +export const reception_states = function () { + return { + init: { + enter: () => { + this.wait_call(this.odoo.call("start")); + }, + }, + select_document: { + display_info: { + title: "Choose an operation", + scan_placeholder: "Scan document / product / package", + }, + events: { + select: "on_select", + }, + on_select: (selected) => { + this.wait_call( + this.odoo.call("scan_document", { + barcode: selected.name, + }) + ); + }, + on_scan: (barcode) => { + this.wait_call( + this.odoo.call("scan_document", { + barcode: barcode.text, + }) + ); + }, + on_manual_selection: () => { + this.wait_call(this.odoo.call("list_stock_pickings")); + }, + }, + manual_selection: { + title: "Choose an operation", + events: { + select: "on_select", + go_back: "on_back", + }, + on_select: (selected) => { + this.wait_call( + this.odoo.call("scan_document", { + barcode: selected.name, + }) + ); + }, + on_back: () => { + this.state_to("select_document"); + this.reset_notification(); + this.reset_picking_filter(); + }, + }, + select_move: { + display_info: { + title: "Select a move", + scan_placeholder: "Scan product / package", + }, + events: { + cancel_picking_line: "on_cancel", + select: "on_select", + }, + on_scan: (barcode) => { + this.wait_call( + this.odoo.call("scan_line", { + picking_id: this.state.data.picking.id, + barcode: barcode.text, + }) + ); + }, + on_mark_as_done: () => { + this.wait_call( + this.odoo.call("done_action", { + picking_id: this.state.data.picking.id, + }) + ); + }, + on_select: (selected) => { + this.wait_call( + this.odoo.call("manual_select_move", { + move_id: selected.id, + }) + ); + }, + on_cancel: () => { + // TODO: this endpoing is currently missing in the backend, + // and it's currently in the roadmap. + // Once it's implemented, uncomment this call. + // this.wait_call( + // this.odoo.call("cancel", { + // package_level_id: this.state.data.id, + // }) + // ); + }, + }, + confirm_done: { + display_info: { + title: "Confirm done", + }, + events: { + confirm: "on_confirm", + go_back: "on_back", + }, + on_confirm: () => { + this.wait_call( + this.odoo.call("done_action", { + picking_id: this.state.data.picking.id, + confirmation: true, + }) + ); + }, + on_back: () => { + this.state_to("select_move"); + this.reset_notification(); + }, + }, + set_lot: { + display_info: { + title: "Set lot", + scan_placeholder: "Scan lot", + scan_input_placeholder_expiry: "Scan expiration date", + }, + on_scan: (barcode) => { + // Scan a lot + this.wait_call( + this.odoo.call("set_lot", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + lot_name: barcode.text, + }) + ).then(() => { + // We need to wait for the call to the backend to be over + // to update the date-picker-input component + // with the expiration_date of the selected lot. + event_hub.$emit("datepicker:newdate", this.line_being_handled.lot); + }); + }, + on_date_picker_selected: (expiration_date) => { + // Select expiration_date + this.wait_call( + this.odoo.call("set_lot", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + expiration_date: expiration_date, + }) + ); + }, + on_confirm_action: () => { + this.wait_call( + this.odoo.call("set_lot_confirm_action", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + }) + ); + }, + }, + set_quantity: { + display_info: { + title: "Set quantity", + scan_placeholder: "Scan document / product / package / location", + }, + events: { + qty_edit: "on_qty_edit", + go_back: "on_back", + cancel: "on_cancel", + }, + on_qty_edit: (qty) => { + this.scan_destination_qty = parseInt(qty, 10); + }, + on_scan: (barcode) => { + this.wait_call( + this.odoo.call("set_quantity", { + // TODO: add quantity from qty-picker + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + quantity: this.scan_destination_qty, + barcode: barcode.text, + confirmation: this.state.data.confirmation_required || "", + }) + ); + }, + on_cancel: () => { + this.wait_call( + this.odoo.call("set_quantity__cancel_action", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + }) + ); + }, + on_add_to_existing_pack: () => { + this.wait_call( + this.odoo.call("process_with_existing_pack", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + quantity: this.scan_destination_qty, + }) + ); + }, + on_create_new_pack: () => { + this.wait_call( + this.odoo.call("process_with_new_pack", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + quantity: this.scan_destination_qty, + }) + ); + }, + on_process_without_pack: () => { + this.wait_call( + this.odoo.call("process_without_pack", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + quantity: this.scan_destination_qty, + }) + ); + }, + on_back: () => { + this.state_to("select_move"); + this.reset_notification(); + }, + }, + set_destination: { + display_info: { + title: "Set destination", + scan_placeholder: "Scan destination location", + }, + on_scan: (location) => { + this.wait_call( + this.odoo.call("set_destination", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + location_name: location.text, + // FIXME if it is always set to true, it is not really used ? + confirmation: true, + }) + ); + }, + }, + select_dest_package: { + display_info: { + title: "Select destination package", + scan_placeholder: "Scan destination package", + }, + events: { + select: "on_select", + }, + on_scan: (barcode) => { + this.wait_call( + this.odoo.call("select_dest_package", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + barcode: barcode.text, + }) + ); + }, + on_select: (selected) => { + this.wait_call( + this.odoo.call("select_dest_package", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + barcode: selected.name, + }) + ); + }, + }, + confirm_new_package: { + display_info: { + title: "Confirm new package", + }, + events: { + confirm: "on_confirm", + go_back: "on_back", + }, + on_confirm: () => { + this.wait_call( + this.odoo.call("select_dest_package", { + picking_id: this.state.data.picking.id, + selected_line_id: this.line_being_handled.id, + confirmation: true, + barcode: this.state.data.new_package_name, + }) + ); + }, + on_back: () => { + this.state_to("select_dest_package"); + this.reset_notification(); + }, + }, + }; +}; diff --git a/shopfloor_reception_mobile/templates/assets.xml b/shopfloor_reception_mobile/templates/assets.xml new file mode 100644 index 0000000000..44464d9032 --- /dev/null +++ b/shopfloor_reception_mobile/templates/assets.xml @@ -0,0 +1,48 @@ + + + + +