Files
enterprise-addons/stock_barcode/static/tests/tours/tour_test_barcode_gs1.js
T

1572 lines
64 KiB
JavaScript

import * as helper from "./tour_helper_stock_barcode";
import { registry } from "@web/core/registry";
import { stepUtils } from "./tour_step_utils";
// Inventory Tests.
registry.category("web_tour.tours").add("test_gs1_inventory_gtin_8", {
steps: () => [
{
trigger: ".o_button_inventory",
run: "click",
},
{
trigger: ".o_barcode_client_action",
run: "scan 0100000082655853", // (01)00000082655853 -> GTIN-8 -> product barcode == 8265585
},
{
trigger: '.o_barcode_client_action:contains("PRO_GTIN_8")',
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "1");
},
},
{
trigger: '.o_barcode_client_action:contains("PRO_GTIN_8")',
run: "scan 3777", // (37)77 -> add 77 Units to the selected product (the last one)
},
{
trigger: '.o_barcode_line:contains("78")',
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "78");
},
},
...stepUtils.validateBarcodeOperation('.o_barcode_line .qty-done:contains("78")'),
],
});
registry.category("web_tour.tours").add("test_gs1_inventory_product_units", {
steps: () => [
{
trigger: ".o_button_inventory",
run: "click",
},
// The following scanned barcode should be decomposed like that:
// - (01)00000082655853 > product barcode (8265585)
// - (37)102 > units (102)
{
trigger: ".o_barcode_client_action",
run: "scan 010000008265585337102",
},
{
trigger: '.o_barcode_client_action:contains("PRO_GTIN_8")',
run: "click",
},
{
trigger: '.o_barcode_line:contains("102")',
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "102");
},
},
...stepUtils.validateBarcodeOperation(),
],
});
registry.category("web_tour.tours").add("test_gs1_inventory_lot_serial", {
steps: () => [
{
trigger: ".o_button_inventory",
run: "click",
},
// The following scanned barcode should be decomposed like that:
// - (01)00111155555717 > tracked by lot product barcode (111155555717)
// - (10)LOT-AAA > lot (LOT-AAA)
// - (30)5 > quantity (5)
{
trigger: ".o_barcode_client_action",
run: "scan 010011115555571710LOT-AAA~305",
},
{
trigger: '.o_barcode_line:contains("AAA")',
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ selected: true });
helper.assertLineProduct(line, "PRO_GTIN_12_lot");
helper.assertLineTrackingNumber(line, "LOT-AAA");
helper.assertLineQty(line, "5");
},
},
// Scans product + lot, and then scans the quantity after the line's creation.
{
trigger: ".o_barcode_client_action",
run: "scan 010011115555571710LOT-AAB",
},
{
trigger: '.o_sublines .o_barcode_line:contains("AAB")',
run: "click",
},
{
trigger: '.o_sublines .o_barcode_line.o_selected:contains("AAB")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(2);
const parentLine = helper.getLine({ selected: true });
const subline = helper.getSubline({ selected: true });
helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot");
helper.assertLineQty(parentLine, "6");
helper.assertLineTrackingNumber(subline, "LOT-AAB");
helper.assertLineQty(subline, "1");
},
},
{
trigger: ".o_barcode_client_action",
run: "scan 30009",
},
{
trigger: '.o_barcode_line.o_selected .qty-done:contains("10")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(2);
const parentLine = helper.getLine({ selected: true });
const subline = helper.getSubline({ selected: true });
helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot");
helper.assertLineQty(parentLine, "15");
helper.assertLineTrackingNumber(subline, "LOT-AAB");
helper.assertLineQty(subline, "10");
},
},
// Scans a second time a quantity (should increment the current line).
{
trigger: ".o_barcode_client_action",
run: "scan 305",
},
{
trigger: '.o_sublines .o_barcode_line.o_selected .qty-done:contains("15")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(2);
const parentLine = helper.getLine({ selected: true });
const subline = helper.getSubline({ selected: true });
helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot");
helper.assertLineQty(parentLine, "20");
helper.assertLineTrackingNumber(subline, "LOT-AAB");
helper.assertLineQty(subline, "15");
},
},
// Scans a lot + quantity (should get back the product from the previous
// line and create a new line).
{
trigger: ".o_barcode_client_action",
run: "scan 3020##10LOT-AAC",
},
{
trigger: '.o_barcode_line.o_selected:contains("AAC")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(3);
const parentLine = helper.getLine({ selected: true });
const subline = helper.getSubline({ selected: true });
helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot");
helper.assertLineQty(parentLine, "40");
helper.assertLineTrackingNumber(subline, "LOT-AAC");
helper.assertLineQty(subline, "20");
},
},
// Scans manually (with a custom separator) lot + quantity but with a lot already scanned,
// so it should increment the quantity on the line with this lot.
...stepUtils.inputManuallyBarcode("305Alt02910LOT-AAA"),
{
trigger: '.o_barcode_line.o_selected .qty-done:contains("10")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(3);
const parentLine = helper.getLine({ selected: true });
const subline = helper.getSubline({ selected: true });
helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot");
helper.assertLineQty(parentLine, "45");
helper.assertLineTrackingNumber(subline, "LOT-AAA");
helper.assertLineQty(subline, "10");
},
},
// The following scanned barcode should be decomposed like that:
// - (01)15222222222219 > tracked by SN product barcode (15222222222219)
// - (21)Serial1 > serial number (Serial1)
{
trigger: ".o_barcode_client_action",
run: "scan 011522222222221921Serial1",
},
{
trigger: '.o_barcode_line:contains("Serial1")',
run: function () {
helper.assertLinesCount(2);
helper.assertSublinesCount(0);
const line = helper.getLine({ selected: true });
helper.assertLineProduct(line, "PRO_GTIN_14_serial");
helper.assertLineTrackingNumber(line, "Serial1");
helper.assertLineQty(line, "1");
},
},
// The following scanned barcode should be decomposed like that:
// - (01)15222222222219 > tracked by SN product barcode (15222222222219)
// - (21)Serial2 > serial number (Serial2)
{
trigger: ".o_barcode_client_action",
run: "scan 011522222222221921Serial2",
},
{
trigger: '.o_sublines .o_barcode_line:contains("Serial2")',
run: "click",
},
{
trigger: '.o_barcode_line:contains("Serial2")',
run: function () {
helper.assertLinesCount(2);
helper.assertSublinesCount(2);
},
},
// Tries to scan multiple quantities for product tracked by SN, should set
// the inventory qty. to 1 instead, and display a notification.
{
trigger: ".o_barcode_client_action",
run: "scan 011522222222221921Serial3\x1D3020",
},
{
trigger: ".o_notification_bar.bg-danger",
run: "click",
},
{
trigger: '.o_barcode_line:contains("Serial3")',
run: function () {
helper.assertLinesCount(2);
helper.assertSublinesCount(3);
const parentLine = document.querySelector(".o_barcode_line.o_selected");
const subline = document.querySelector(".o_sublines .o_barcode_line.o_selected");
helper.assertLineQty(parentLine, "3");
helper.assertLineTrackingNumber(subline, "Serial3");
helper.assertLineQty(subline, "1");
},
},
// Tries to scan multiple quantities for product tracked by SN but without
// a SN, should set the inventory qty. to the scanned one (20).
{
trigger: ".o_barcode_client_action",
run: "scan 01152222222222193020",
},
{
trigger: ".o_sublines .o_barcode_line:nth-child(4)",
run: function () {
helper.assertLinesCount(2);
helper.assertSublinesCount(4);
const parentLine = helper.getLine({ selected: true });
const subline = helper.getSubline({ selected: true });
helper.assertLineQty(parentLine, "23");
helper.assertLineTrackingNumber(subline, false);
helper.assertLineQty(subline, "20");
const barcodeIconVisible = Boolean(
subline.querySelector(".o_line_tracking_number")
);
helper.assert(
barcodeIconVisible,
false,
"The SN HTML element should not be visible"
);
},
},
// Scans a serial number, it should not write it on the previous line (as
// multiple quantitieswas scanned) and create a new one instead.
{
trigger: ".o_barcode_client_action",
run: "scan 011522222222221921Serial4",
},
{
trigger: ".o_sublines .o_barcode_line:nth-child(5)",
run: function () {
helper.assertLinesCount(2);
helper.assertSublinesCount(5);
const parentLine = helper.getLine({ selected: true });
const subline = helper.getSubline({ selected: true });
helper.assertLineQty(parentLine, "24");
helper.assertLineTrackingNumber(subline, "Serial4");
helper.assertLineQty(subline, "1");
},
},
{
trigger: ".o_barcode_client_action",
run: "scan OBTVALI",
},
{
trigger: ".o_notification_bar.bg-success",
},
],
});
registry.category("web_tour.tours").add("test_gs1_inventory_package", {
steps: () => [
{
trigger: ".o_button_inventory",
run: "click",
},
// Scans the package in Section 1 => Should raise a warning.
{
trigger: ".o_barcode_client_action",
run: "scan 00987654123487568456",
},
{
trigger: ".o_notification_bar.bg-danger",
run: "click",
},
// Changes location for Section 1 and scans again the package.
{
trigger: ".o_barcode_client_action",
run: "scan LOC-01-01-00",
},
{
trigger: '.o_scan_product_or_src:contains("WH/Stock/Section 1")',
run: "scan 00987654123487568456",
},
{
trigger: ".o_barcode_line",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "product1" });
const product1_package = line.querySelector('div[name="package"]').innerText;
helper.assert(product1_package, "987654123487568456");
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "8/8");
},
},
// Changes location for Section 2 and scans the second package.
{
trigger: ".o_barcode_client_action",
run: "scan LOC-01-02-00",
},
{
trigger: '.o_scan_product_or_src:contains("WH/Stock/Section 2")',
run: "scan 00487325612456785124",
},
{
trigger: '.o_barcode_line[data-barcode="product2"]',
run: function () {
helper.assertLinesCount(2);
const line = helper.getLine({ barcode: "product2" });
const product2_package = line.querySelector('div[name="package"]').innerText;
helper.assert(product2_package, "487325612456785124");
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "6/6");
},
},
// Tries to scan the same package => Should raise a warning.
{
trigger: ".o_barcode_client_action",
run: "scan 00487325612456785124",
},
{
trigger: ".o_notification_bar.bg-danger",
run: "click",
},
// Scans additionnal products and put them in a new pack by scanning a non-existing package barcode.
{
trigger: ".o_barcode_client_action",
run: "scan 0100000082655853304",
},
{
trigger: ".o_barcode_line:nth-child(2)",
run: "scan 00122333444455555670",
},
{
trigger: ".o_barcode_line:contains(122333444455555670)",
run: function () {
helper.assertLinesCount(3);
const line1 = helper.getLine({ barcode: "product2" });
const line1_package = line1.querySelector('div[name="package"]').innerText;
helper.assertLineIsHighlighted(line1, false);
helper.assert(line1_package, "487325612456785124");
helper.assertLineQty(line1, "6/6");
const line2 = helper.getLine({ barcode: "82655853" });
const line2_package = line2.querySelector('div[name="package"]').innerText;
helper.assertLineIsHighlighted(line2, true);
helper.assert(line2_package, "122333444455555670");
helper.assertLineQty(line2, "4");
},
},
// Validates the inventory.
{
trigger: ".o_apply_page",
run: "scan OBTVALI",
},
{
trigger: ".o_notification_bar.bg-success",
},
],
});
// Picking Tests.
registry.category("web_tour.tours").add("test_gs1_package_receipt", {
steps: () => [
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHIN" },
// Scans PRO_GTIN_8 x4
{ trigger: ".o_barcode_client_action", run: "scan 0100000082655853300004" },
{
trigger: ".o_barcode_line",
run: function () {
helper.assertLinesCount(1);
const line1 = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line1, true);
helper.assertLineQty(line1, "4");
},
},
// Scans a package => As it doesn't exist in the DB, should put in pack the
// previously scanned quantities.
{ trigger: ".o_barcode_client_action", run: "scan 00546879213579461324" },
{
trigger: ".o_barcode_line .result-package:text('546879213579461324')",
run: function () {
helper.assertLinesCount(1);
const line1 = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line1, true);
helper.assertLineQty(line1, "4");
helper.assertLineResultPackage(line1, "546879213579461324");
},
},
// Scans PRO_GTIN_12 x8.
{ trigger: ".o_barcode_client_action", run: "scan 300008\x1D0100584687955629" },
{
trigger: ".o_barcode_line:nth-child(2)",
run: function () {
helper.assertLinesCount(2);
const line1 = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line1, false);
helper.assertLineQty(line1, "4");
helper.assertLineResultPackage(line1, "546879213579461324");
const line2 = helper.getLine({ barcode: "584687955629" });
helper.assertLineIsHighlighted(line2, true);
helper.assertLineQty(line2, "8");
},
},
// Scans again the same package. Now it already exists but should be assigned anyway.
{ trigger: ".o_barcode_client_action", run: "scan 00546879213579461324" },
{
trigger: ".o_barcode_line[data-barcode='584687955629'] :text('546879213579461324')",
run: function () {
helper.assertLinesCount(2);
const line1 = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line1, false);
helper.assertLineQty(line1, "4");
helper.assertLineResultPackage(line1, "546879213579461324");
const line2 = helper.getLine({ barcode: "584687955629" });
helper.assertLineIsHighlighted(line2, true);
helper.assertLineQty(line2, "8");
helper.assertLineResultPackage(line2, "546879213579461324");
},
},
// Selects a line and scans a package type, it should assign it
// to the selected line's result package.
{
trigger: '.o_barcode_line[data-barcode="584687955629"]',
run: "click",
},
{ trigger: '.o_selected[data-barcode="584687955629"]', run: "scan 91WOODC" },
...stepUtils.checkNotificationMessage(
"Package type Wooden Chest applied to the package 546879213579461324"
),
{
trigger: ".o_barcode_line",
run: function () {
helper.assertLinesCount(2);
const line1 = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line1, false);
helper.assertLineQty(line1, "4");
helper.assertLineResultPackage(line1, "546879213579461324");
const line2 = helper.getLine({ barcode: "584687955629" });
helper.assertLineIsHighlighted(line2, true);
helper.assertLineQty(line2, "8");
helper.assertLineResultPackage(line2, "546879213579461324");
},
},
// Scans PRO_GTIN_8 x6
{ trigger: ".o_barcode_client_action", run: "scan 0100000082655853300006" },
{
trigger: ".o_barcode_line.o_selected .o_product_label:text('PRO_GTIN_8')",
run: function () {
helper.assertLinesCount(3);
const line = helper.getLine({ selected: true });
helper.assertLineQty(line, "6");
},
},
// Scans a package with a type => put in pack the selected line in this package with the type.
{ trigger: ".o_barcode_client_action", run: "scan 00130406658041178543\x1D91IRONC" },
{
trigger: ".o_barcode_line.o_selected .result-package:text('130406658041178543')",
run: function () {
helper.assertLinesCount(3);
const line = helper.getLine({ selected: true });
helper.assertLineQty(line, "6");
helper.assertLineResultPackage(line, "130406658041178543");
},
},
// Scans PRO_GTIN_12 x12, then scans a package type to put in pack in a new package.
{ trigger: ".o_barcode_client_action", run: "scan 30000000120100584687955629" },
{
trigger: '.o_barcode_line.o_selected[data-barcode="584687955629"]',
run: function () {
helper.assertLinesCount(4);
const line = helper.getLine({ selected: true });
helper.assertLineQty(line, "12");
},
},
{ trigger: ".o_barcode_client_action", run: "scan 91IRONC" },
{
trigger: '.o_barcode_line.o_selected[data-barcode="584687955629"] [name="package"]',
run: function () {
helper.assertLinesCount(4);
const line = helper.getLine({ selected: true });
helper.assertLineQty(line, "12");
helper.assertLineResultPackage(line, "PACK0000123");
},
},
...stepUtils.validateBarcodeOperation(),
],
});
registry.category("web_tour.tours").add("test_gs1_package_delivery", {
steps: () => [
{
trigger: ".o_stock_barcode_main_menu",
run: "scan WHOUT",
},
// Scans the package
{
trigger: ".o_barcode_client_action",
run: "scan 00546879213579461324",
},
{
trigger: ".o_barcode_line:nth-child(2)",
run: function () {
helper.assertLinesCount(2);
const line1 = helper.getLine({ barcode: "82655853" });
helper.assertLineIsHighlighted(line1, true);
helper.assertLineQty(line1, "4");
helper.assert(line1.querySelector(".package").innerText, "546879213579461324");
helper.assert(
line1.querySelector(".result-package").innerText,
"546879213579461324"
);
const line2 = helper.getLine({ barcode: "584687955629" });
helper.assertLineIsHighlighted(line2, true);
helper.assertLineQty(line2, "8");
helper.assert(line2.querySelector(".package").innerText, "546879213579461324");
helper.assert(
line2.querySelector(".result-package").innerText,
"546879213579461324"
);
},
},
...stepUtils.validateBarcodeOperation(),
],
});
registry.category("web_tour.tours").add("test_gs1_reserved_delivery", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "11011019" });
helper.assertLineIsHighlighted(line, false);
helper.assertLineQty(line, "0/10");
helper.assertValidateIsHighlighted(false);
},
},
// Scans 6 qty. of PRO_GTIN_8 (waiting for 10).
{
trigger: ".o_barcode_client_action",
run: "scan 0100000011011019306",
},
{
trigger: ".o_barcode_line .qty-done:contains(6)",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "11011019" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "6/10");
helper.assertValidateIsHighlighted(false);
},
},
// Scans 8 additional qty. of PRO_GTIN_8 (waiting for 10, so we have 4 extra).
{
trigger: ".o_barcode_client_action",
run: "scan 0100000011011019308",
},
{
trigger: ".o_barcode_line .qty-done:contains(10)",
run: function () {
helper.assertLinesCount(2);
const [line1, line2] = helper.getLines();
helper.assertLineIsHighlighted(line1, false);
helper.assertLineIsHighlighted(line2, true);
helper.assertLineQty(line1, "10/10");
helper.assertLineQty(line2, "4");
helper.assertValidateIsHighlighted(true);
},
},
// Validates the transfer.
...stepUtils.validateBarcodeOperation(".o_validate_page.btn-primary"),
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_conflicting_barcodes_1", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "11011019" });
helper.assertLineIsHighlighted(line, false);
helper.assertLineQty(line, "0/1");
helper.assertValidateIsHighlighted(false);
},
},
{
trigger: ".o_barcode_client_action",
run: "scan 0100000011011019", // (01)00000011011019 product barcode (11011019)
},
{
trigger: ".o_barcode_line.o_selected",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "11011019" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "1/1");
helper.assertValidateIsHighlighted(true);
},
},
...stepUtils.validateBarcodeOperation(".o_validate_page.btn-primary"),
],
});
registry.category("web_tour.tours").add("test_gs1_delivery_ambiguous_lot_number", {
steps: () => [
// Create a delivery.
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHOUT" },
// Scan the GS1 barcode (contains product + lot)
{
trigger: ".o_scan_message.o_scan_product",
run: "scan 0100000022222220152407101012345",
},
{
trigger: ".o_barcode_line .qty-done:contains(1)",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "22222220" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "1 Units");
helper.assertLineTrackingNumber(line, "12345");
},
},
// Cancel the transfer and do the same but with packaging barcode instead.
{ trigger: ".o_barcode_client_action", run: "scan OCDCANC" },
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHIN" },
// Scan the GS1 barcode (contains product packaging + lot)
{
trigger: ".o_scan_message.o_scan_product",
run: "scan 0110000000240489152407101012345",
},
{
trigger: ".o_barcode_line .qty-done:contains(1)",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "22222220" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "1 Packaging - Product A x1");
helper.assertLineTrackingNumber(line, "12345");
},
},
...stepUtils.validateBarcodeOperation(".o_validate_page.btn-primary"),
// Scan the GS1 barcode With lot starting with 10 and contains a special character.
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHOUT" },
{
trigger: ".o_barcode_client_action",
run: "scan 02000012345678951010LOT-AAA#301",
},
{
trigger: '.o_barcode_line:contains("10LOT-AAA") .o_edit',
run: "click",
},
{
trigger: '.o_field_widget[name="lot_id"]',
run: function () {
helper.assert(document.querySelector('input[id="lot_id_0"]').value, "10LOT-AAA");
},
},
{
trigger: ".o_save",
run: "click",
},
...stepUtils.validateBarcodeOperation(".o_validate_page.btn-primary"),
],
});
registry.category("web_tour.tours").add("test_gs1_delivery_ambiguous_serial_number", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: "scan LOC-01-00-00",
},
{
trigger: ".o_barcode_client_action",
run: "scan 01057115440019521524071021304",
},
{
trigger: ".o_barcode_line .qty-done:contains(1)",
run: function () {
helper.assertLinesCount(1);
const $line = helper.getLine({ barcode: "05711544001952" });
helper.assertLineIsHighlighted($line, true);
helper.assertLineQty($line, "1/1");
},
},
// Validates the transfer.
...stepUtils.validateBarcodeOperation(".o_validate_page.btn-primary"),
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_conflicting_barcodes_2", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "000011011019" });
helper.assertLineIsHighlighted(line, false);
helper.assertLineQty(line, "0/1");
helper.assertValidateIsHighlighted(false);
},
},
{
trigger: ".o_barcode_client_action",
run: "scan 0100000011011019", // (01)00000011011019 product barcode (000011011019)
},
{
trigger: ".o_barcode_line.o_selected",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "000011011019" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "1/1");
helper.assertValidateIsHighlighted(true);
},
},
...stepUtils.validateBarcodeOperation(".o_validate_page.btn-primary"),
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_conflicting_barcodes_3", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: function () {
helper.assertLinesCount(2);
const line1 = helper.getLine({ barcode: "11011019" });
helper.assertLineIsHighlighted(line1, false);
helper.assertLineQty(line1, "0/1");
helper.assertLineProduct(line1, "PRO_GTIN_8");
const line2 = helper.getLine({ barcode: "000011011019" });
helper.assertLineIsHighlighted(line2, false);
helper.assertLineQty(line2, "0/1");
helper.assertLineProduct(line2, "PRO_GTIN_12");
helper.assertValidateIsHighlighted(false);
},
},
// Scans '0100000011011019', should get 'PRO_GTIN_8' as this is the product put in the lazy cache.
{
trigger: ".o_barcode_client_action",
run: "scan 0100000011011019",
},
{
trigger: ".o_barcode_line.o_selected",
run: function () {
helper.assertLinesCount(2);
const line1 = helper.getLine({ barcode: "11011019" });
helper.assertLineIsHighlighted(line1, true);
helper.assertLineQty(line1, "1/1");
helper.assertLineProduct(line1, "PRO_GTIN_8");
const line2 = helper.getLine({ barcode: "000011011019" });
helper.assertLineIsHighlighted(line2, false);
helper.assertLineQty(line2, "0/1");
helper.assertLineProduct(line2, "PRO_GTIN_12");
helper.assertValidateIsHighlighted(false);
},
},
// Scans a second time '0100000011011019', should create a new line for PRO_GTIN_8.
{
trigger: ".o_barcode_client_action",
run: "scan 0100000011011019",
},
{
trigger: ".o_barcode_line:nth-child(3)",
run: function () {
helper.assertLinesCount(3);
const [lineGTIN12, lineGTIN8_1, lineGTIN8_2] = helper.getLines();
helper.assertLineIsHighlighted(lineGTIN12, false);
helper.assertLineQty(lineGTIN12, "0/1");
helper.assertLineProduct(lineGTIN12, "PRO_GTIN_12");
helper.assertLineIsHighlighted(lineGTIN8_1, false);
helper.assertLineQty(lineGTIN8_1, "1/1");
helper.assertLineProduct(lineGTIN8_1, "PRO_GTIN_8");
helper.assertLineIsHighlighted(lineGTIN8_2, true);
helper.assertLineQty(lineGTIN8_2, "1");
helper.assertLineProduct(lineGTIN8_2, "PRO_GTIN_8");
helper.assertValidateIsHighlighted(false);
},
},
// Scans the PRO_GTIN_12 (non-GS1) barcode: '000011011019'.
{
trigger: ".o_barcode_client_action",
run: "scan 000011011019",
},
{
trigger: ".o_validate_page.btn-primary",
run: function () {
helper.assertLinesCount(3);
const [line1, line2] = helper.getLines({ barcode: "11011019" });
helper.assertLineIsHighlighted(line1, false);
helper.assertLineQty(line1, "1/1");
helper.assertLineProduct(line1, "PRO_GTIN_8");
helper.assertLineIsHighlighted(line2, false);
helper.assertLineQty(line2, "1");
helper.assertLineProduct(line2, "PRO_GTIN_8");
const line3 = helper.getLine({ barcode: "000011011019" });
helper.assertLineIsHighlighted(line3, true);
helper.assertLineQty(line3, "1/1");
helper.assertLineProduct(line3, "PRO_GTIN_12");
helper.assertValidateIsHighlighted(true);
},
},
...stepUtils.validateBarcodeOperation(".o_validate_page.btn-primary"),
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_conflicting_barcodes_mistaken_as_gs1", {
steps: () => [
// Creates a new receipt.
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHIN" },
// Scans 3000000015 -> Will be parsed as 15 units by the GS1 nomenclature
// but since we don't expect a quantity here (no line yet), it should also
// check if this barcode matches something else (by-passing the nomenclature.)
{ trigger: ".o_barcode_client_action", run: "scan 3000000015" },
{
trigger: ".o_barcode_line",
run: function () {
const line = helper.getLine({ barcode: "3000000015" });
helper.assertLineQty(line, "1");
},
},
// Scans 21000000000003 -> Will be parsed as a serial number by the GS1 nomenclature but since
// it's irrelevant to scan a SN here (previous scanned product is not tracked), it should also
// check if it's something else barcode (by-passing the nomenclature.)
{ trigger: ".o_barcode_client_action", run: "scan 21000000000003" },
{
trigger: ".o_barcode_line[data-barcode='21000000000003']",
run: function () {
const line = helper.getLine({ barcode: "21000000000003" });
helper.assertLineQty(line, "1");
},
},
// Scans again 3000000015, now it could genuinely be interpreted as 15 units but we have no way
// to know what's the best use. Since we've a product using this barcode, we privilege exactness
{ trigger: ".o_barcode_client_action", run: "scan 3000000015" },
{
trigger: ".o_barcode_line[data-barcode='3000000015'].o_selected .qty-done:contains(2)",
run: function () {
const line = helper.getLine({ barcode: "3000000015" });
helper.assertLineQty(line, "2");
},
},
{ trigger: ".o_barcode_client_action", run: "scan 21000000000003" },
{
trigger: ".o_barcode_line[data-barcode='21000000000003'] .qty-done:contains(2)",
run: function () {
const line = helper.getLine({ barcode: "21000000000003" });
helper.assertLineQty(line, "2");
},
},
// Scan 3000000014 which corresponds to a GS1 nomenclature and check it is applied
// as it does not correspond to an exact match
{ trigger: ".o_barcode_client_action", run: "scan 3000000014" },
{
trigger: ".o_barcode_line.o_selected .qty-done:contains('16')",
run: function () {
const line = helper.getLine({ barcode: "21000000000003" });
// The qty of the selected product should be incremented by 15.
helper.assertLineQty(line, "16");
},
},
// Scans 21-Chouette-MegaPack whom can be interpreted as a lot (AI 21, lot name:
// "-Chouette-MegaPack") but who is actually an existing package.
{ trigger: ".o_barcode_client_action", run: "scan 21-Chouette-MegaPack" },
{
trigger: ".o_barcode_line[data-barcode='21000000000003'] div[name='package']",
run: function () {
const line = helper.getLine({ barcode: "21000000000003" });
helper.assertLineQty(line, "16");
helper.assert(
line.querySelector(".result-package").innerText,
"21-Chouette-MegaPack"
);
},
},
// Scans again 21-Chouette-MegaPack, now that we have a selected line for a tracked product it could genuinely be
// interpreted as a lot name "-Chouette-MegaPack" but since we have an exact match on the pack we privilege exactness
{ trigger: ".o_barcode_client_action", run: "scan productserial1" },
{ trigger: ".o_barcode_client_action", run: "scan 21000000000004" },
{
trigger: ".o_barcode_line[data-barcode='productserial1'] .o_line_lot_name:contains(000000000004)",
run: "scan 21-Chouette-MegaPack",
},
{
trigger: ".o_barcode_line[data-barcode='productserial1'].o_selected div[name=package]",
run: function () {
const line = helper.getLine({ barcode: "productserial1" });
helper.assertLineQty(line, "1");
helper.assertLineTrackingNumber(line, "000000000004");
helper.assert(line.querySelector(".result-package").innerText, "21-Chouette-MegaPack");
},
},
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_lot_serial", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: function () {
helper.assertLinesCount(1);
helper.assertLineIsHighlighted(0, false);
helper.assertLineQty(0, "0/40");
},
},
// The following scanned barcode should be decomposed like that:
// - (01)00000076543210 > product barcode (76543210)
// - (30)00000008 > quantity (8)
...stepUtils.inputManuallyBarcode("((01)00000076543210(30)00000008)"),
{
trigger: ".o_barcode_line.o_selected",
run: function () {
helper.assertLinesCount(1);
helper.assertLineIsHighlighted(0, true);
helper.assertLineQty(0, "8/40");
},
},
// Scans the lot: as the line has already done quantity but no lot,
// it should apply the lot without increase the quantity.
{
trigger: ".o_barcode_client_action",
run: "scan 10b1-b001",
},
{
trigger: '.o_barcode_line:contains("b1-b001")',
run: function () {
helper.assertLinesCount(1);
helper.assertLineTrackingNumber(0, "b1-b001");
helper.assertLineQty(0, "8/40");
},
},
// Scan the product, lot and quantity all at once:
// - (01)00000076543210 > product barcode (76543210)
// - (10)b1-b002 > lot (b1-b002)
// - (30)00000004 > quantity (4)
{
trigger: ".o_barcode_client_action",
run: "scan 010000007654321010b1-b002\x1D3000000004",
},
{
trigger: ".o_barcode_line.o_selected .btn.o_toggle_sublines .fa-angle-down",
run: "click",
},
{
trigger: '.o_barcode_line:contains("b1-b002")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(2);
const parentLine = helper.getLine({ barcode: "76543210" });
const [line1, line2] = helper.getSublines();
helper.assertLinesTrackingNumbers([line1, line2], ["b1-b001", "b1-b002"]);
helper.assertLineQty(parentLine, "12/40");
helper.assertLineQty(line1, "8");
helper.assertLineQty(line2, "4");
helper.assertLineIsHighlighted(line1, false);
helper.assertLineIsHighlighted(line2, true);
},
},
{
trigger: ".o_sublines .o_barcode_line:nth-child(2).o_selected",
run: "scan 010000007654321010b1-b002\x1D3000000004",
},
{
trigger: '.o_sublines .o_barcode_line.o_selected .qty-done:contains("8")',
run: function () {
helper.assertSublinesCount(2);
const [line1, line2] = helper.getSublines();
helper.assertLinesTrackingNumbers([line1, line2], ["b1-b001", "b1-b002"]);
helper.assertLineQty(line1, "8");
helper.assertLineQty(line2, "8");
helper.assertLineIsHighlighted(line1, false);
helper.assertLineIsHighlighted(line2, true);
},
},
// Scans a non-GS1 lot barcode to be sure it's compatible.
{
trigger: ".o_barcode_client_action",
run: "scan b1-b003",
},
{
trigger: '.o_barcode_line:contains("b1-b003")',
run: function () {
helper.assertSublinesCount(3);
const sublines = helper.getSublines();
helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]);
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "1");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], true);
},
},
// Scan two more time the previous barcode...
{
trigger: ".o_barcode_client_action",
run: "scan b1-b003",
},
{
trigger: ".o_barcode_client_action",
run: "scan b1-b003",
},
{
trigger: '.o_barcode_line.o_selected .qty-done:contains("3")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(3);
const sublines = helper.getSublines();
helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]);
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "3");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], true);
},
},
// ... then scan a GS1 barcode to add 5 more qty., without lot reference,
// to be sure the qty. will go on the last selected line.
{
trigger: ".o_barcode_client_action",
run: "scan 3000000005",
},
{
trigger: '.o_sublines .o_barcode_line.o_selected:contains("8")',
run: function () {
helper.assertSublinesCount(3);
const sublines = helper.getSublines();
helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]);
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "8");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], true);
},
},
// Adds a line with the "Add Product" button, then scans the lot/qty.
{
trigger: ".o_add_line",
run: "click",
},
{
trigger: ".o_field_widget[name=product_id] input",
run: "edit B1",
},
{
trigger: ".ui-menu-item > a:contains('Battle Droid')",
run: "click",
},
{
trigger: "[name=qty_done] input",
run: "edit 0",
},
{
trigger: ".o_save",
run: "click",
},
{
trigger: ".o_barcode_line:nth-child(4)",
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(4);
const sublines = helper.getSublines({ selected: false });
helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]);
const line4 = helper.getSubline({ selected: true });
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "8");
helper.assertLineQty(line4, "0");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], false);
helper.assertLineIsHighlighted(line4, true);
},
},
// The following scanned barcode should be decomposed like that:
// - (30)00000004 > quantity (4)
// - (10)b1-b004 > lot (b1-b004)
// - (01)00000076543210 > product barcode (76543210)
{
trigger: ".o_barcode_client_action",
run: "scan 3000000004\x1D10b1-b004\x1D0100000076543210",
},
{
trigger: '.o_sublines .o_barcode_line:contains("b1-b004") .qty-done:contains("4")',
run: function () {
helper.assertSublinesCount(4);
const sublines = helper.getSublines();
helper.assertLinesTrackingNumbers(sublines, [
"b1-b001",
"b1-b002",
"b1-b003",
"b1-b004",
]);
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "8");
helper.assertLineQty(sublines[3], "4");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], false);
helper.assertLineIsHighlighted(sublines[3], true);
},
},
// Scans only a lot => should create a new line with 1 qty.
{
trigger: ".o_barcode_client_action",
run: "scan 10b1-b005",
},
{
trigger: '.o_sublines .o_barcode_line:contains("b1-b005") .qty-done:contains("1")',
run: function () {
helper.assertLinesCount(1);
helper.assertSublinesCount(5);
const sublines = helper.getSublines();
helper.assertLinesTrackingNumbers(sublines, [
"b1-b001",
"b1-b002",
"b1-b003",
"b1-b004",
"b1-b005",
]);
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "8");
helper.assertLineQty(sublines[3], "4");
helper.assertLineQty(sublines[4], "1");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], false);
helper.assertLineIsHighlighted(sublines[3], false);
helper.assertLineIsHighlighted(sublines[4], true);
},
},
// Now scans the quantity.
{
trigger: ".o_barcode_client_action",
run: "scan 3000007",
},
{
trigger: '.o_sublines .o_barcode_line:contains("b1-b005") .qty-done:contains("8")',
run: function () {
helper.assertSublinesCount(5);
const sublines = helper.getSublines();
helper.assertLinesTrackingNumbers(sublines, [
"b1-b001",
"b1-b002",
"b1-b003",
"b1-b004",
"b1-b005",
]);
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "8");
helper.assertLineQty(sublines[3], "4");
helper.assertLineQty(sublines[4], "8");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], false);
helper.assertLineIsHighlighted(sublines[3], false);
helper.assertLineIsHighlighted(sublines[4], true);
},
},
// Scans a lot already in the view with additional qty. => Should select the
// existing line for this lot and update its quantity done.
{
trigger: ".o_barcode_client_action",
run: "scan 10b1-b004\x1D3000000004",
},
{
trigger: '.o_sublines .o_barcode_line.o_selected:contains("b1-b004")',
run: function () {
helper.assertSublinesCount(5);
const sublines = helper.getSublines();
helper.assertLinesTrackingNumbers(sublines, [
"b1-b001",
"b1-b002",
"b1-b003",
"b1-b004",
"b1-b005",
]);
helper.assertLineQty(sublines[0], "8");
helper.assertLineQty(sublines[1], "8");
helper.assertLineQty(sublines[2], "8");
helper.assertLineQty(sublines[3], "8");
helper.assertLineQty(sublines[4], "8");
helper.assertLineIsHighlighted(sublines[0], false);
helper.assertLineIsHighlighted(sublines[1], false);
helper.assertLineIsHighlighted(sublines[2], false);
helper.assertLineIsHighlighted(sublines[3], true);
helper.assertLineIsHighlighted(sublines[4], false);
},
},
...stepUtils.validateBarcodeOperation(".o_validate_page"),
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_multiple_extra_items", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: "scan 0112345678900005", // Wanted product
},
{
trigger: ".o_barcode_line[data-barcode='12345678900005'] .qty-done:contains('1')",
run: "scan 0112345678900012", // Extra product 1
},
{
trigger:
".modal-content .o_barcode_extra_product_dialog div.row[data-barcode='12345678900012'] span.col-3:contains('1')",
run: "scan 01123456789000123010", // Extra product 1 (10 qty)
},
{
trigger:
".modal-content .o_barcode_extra_product_dialog div.row[data-barcode='12345678900012'] span.col-3:contains('11')",
run: "scan 011234567890002921001", // Extra product 2 (Serial 001)
},
{
trigger:
".modal-content .o_barcode_extra_product_dialog div.row[data-barcode='12345678900029'] span.col-3:contains('1')",
run: "scan 011234567890002921002", // Extra product 2 (Serial 002)
},
{
trigger:
".modal-content .o_barcode_extra_product_dialog div.row[data-barcode='12345678900029'] span.col-3:contains('2')",
run: "scan 011234567890003610L001#305", // Extra product 3 (Lot L001, Qty 5)
},
{
trigger:
".modal-content .o_barcode_extra_product_dialog div.row[data-barcode='12345678900036'] span.col-3:contains('5')",
run: "scan 011234567890003610L001#305", // Extra product 3 (Lot L001, Qty 5) scanned again, should increase the quantity but not the number of lines
},
{
trigger:
".modal-content .o_barcode_extra_product_dialog div.row[data-barcode='12345678900036'] span.col-3:contains('10')",
run: "scan 011234567890002921002", // Serial already in list & awaiting confirmation -> Skipped, notification should be shown
},
...stepUtils.checkNotificationMessage(
"The scanned serial number 002 is already awaiting confirmation."
),
{
content: "Remove Extra Product 1 from selected products",
trigger:
".modal-content .o_barcode_extra_product_dialog div.row[data-barcode='12345678900012'] input[type='checkbox']",
run: "uncheck",
},
{
trigger: ".modal-dialog button.btn-primary",
run: "click",
},
{
content: "Open the sublines of the serial product to see all the tracked items",
trigger: "button.o_toggle_sublines",
run: "click",
},
{
trigger: "body:not(:has(.modal)) .o_barcode_client_action",
run: function () {
helper.assertLinesCount(3);
helper.assertSublinesCount(2);
helper.assertLineQty(0, "1/2 Units");
helper.assertLineQty(1, "2 Units");
helper.assertLineTrackingNumber(2, "001");
helper.assertLineTrackingNumber(3, "002");
helper.assertLineQty(4, "10 Units");
helper.assertLineTrackingNumber(4, "L001");
},
},
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_quantity_with_uom", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: function () {
helper.assertLinesCount(0);
},
},
// Scans 5 kg for the "Product by Units" => Even if the product uses Units as UoM, since
// there is no way to know which UoM is compatible, we use the scanned weight as the qty.
{
trigger: ".o_barcode_client_action",
run: "scan 01000000152643293100000005",
},
{
trigger: ".o_barcode_line",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "15264329" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "5 kg");
},
},
// Scans 4 units for the "Product by Units".
{
trigger: ".o_barcode_client_action",
run: "scan 01000000152643293700000004",
},
{
trigger: ".o_barcode_line .qty-done:contains(4)",
run: function () {
helper.assertLinesCount(2);
const line = helper.getLines({ barcode: "15264329" })[1];
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "4 Units");
},
},
// Scans 5 kg for the "Product by Units" => Update qty from 9 to 14 Units.
{
trigger: ".o_barcode_client_action",
run: "scan 01000000152643293100000005",
},
{
trigger: ".o_barcode_line .qty-done:contains(10)",
run: function () {
helper.assertLinesCount(2);
const line = helper.getLines({ barcode: "15264329" })[0];
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "10 kg");
},
},
// Scans 5 kg for the "Product by kg".
{
trigger: ".o_barcode_client_action",
run: "scan 01000000152648793100000005",
},
{
trigger: '.o_barcode_line:contains("Product by kg")',
run: function () {
helper.assertLinesCount(3);
const line = helper.getLine({ barcode: "15264879" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "5 kg");
},
},
// Scans 6 units for the "Product by kg" => Update qty from 5 to 11 kg
{
trigger: ".o_barcode_client_action",
run: "scan 01000000152648793700000006",
},
{
trigger: ".o_barcode_line.o_selected .qty-done:contains(6)",
run: function () {
helper.assertLinesCount(4);
const line = helper.getLines({ barcode: "15264879" })[1];
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "6 Units");
},
},
// Scans 1.25 kg for the "Product by g" => kg need to be converted to g.
{
trigger: ".o_barcode_client_action",
run: "scan 01000000152648933102000125",
},
{
trigger: '.o_barcode_line:contains("Product by g")',
run: function () {
helper.assertLinesCount(5);
const line = helper.getLine({ barcode: "15264893" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "1.25 kg");
},
},
// Clicks on the edit button to trigger a save.
{
trigger: ".o_barcode_line:nth-child(5) .o_edit",
run: "click",
},
{
trigger: "[name=qty_done] input",
run: function () {
helper.assertFormQuantity("4");
},
},
...stepUtils.discardBarcodeForm(),
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_scan_not_gs1_multi_barcode", {
steps: () => [
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHIN" },
// Scan a barcode containing 1 product tracked by SN followed by 8 serial numbers.
{
trigger: ".o_barcode_client_action",
run: "scan productserial1,sn1,sn2,sn3,sn4,sn5,sn6,sn7,sn8",
},
{ trigger: ".o_barcode_line .qty-done:contains(8)" },
{ trigger: "button.o_toggle_sublines", run: "click" },
{ trigger: ".o_sublines .o_barcode_line:nth-child(8)" },
...stepUtils.validateBarcodeOperation(),
],
});
registry.category("web_tour.tours").add("test_gs1_receipt_packaging", {
steps: () => [
{
trigger: ".o_barcode_client_action",
run: function () {
helper.assertLinesCount(0);
},
},
// Scans a packaging without any quantity
{
trigger: ".o_barcode_client_action",
run: "scan 0100000000002226",
},
{
trigger: ".o_barcode_line",
run: function () {
helper.assertLinesCount(1);
const line = helper.getLine({ barcode: "1113" });
helper.assertLineIsHighlighted(line, true);
helper.assertLineQty(line, "1 Dozens");
},
},
// Scans 4 packaging
{
trigger: ".o_barcode_client_action",
run: "scan 01000000000022263700000004",
},
{
trigger: '.o_barcode_line [name=quantity]:contains("5")',
run: function () {
helper.assertLinesCount(1);
helper.assertLineIsHighlighted(0, true);
helper.assertLineQty(0, "5 Dozens");
},
},
// Clicks on the edit button to trigger a save.
{
trigger: ".o_barcode_line:first-child .o_edit",
run: "click",
},
{
trigger: '[name="qty_done"] input',
run: function () {
helper.assertFormQuantity("5");
},
},
...stepUtils.discardBarcodeForm(),
],
});
registry.category("web_tour.tours").add("test_gs1_tracked_packaging", {
steps: () => [
// Create a receipt and check non-existing lot is correctly scanned alongside the packaging.
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHIN" },
{ trigger: ".o_barcode_client_action", run: "scan 020000001265325610lot-001" },
{
trigger: ".o_barcode_line",
run: () => {
helper.assertLinesCount(1);
helper.assertLineQty(0, "1 Dozens", "Scanned packaging has quantity of 1");
helper.assertLineProduct(0, "productlot1");
helper.assertLineTrackingNumber(0, "lot-001");
},
},
{ trigger: ".o_validate_page", run: "click" },
// Create a delivery and check existing lot is correctly found alongside the packaging.
{ trigger: ".o_stock_barcode_main_menu", run: "scan WHOUT" },
{ trigger: ".o_barcode_client_action", run: "scan 020000001265325610lot-001" },
{
trigger: ".o_barcode_line",
run: () => {
helper.assertLinesCount(1);
helper.assertLineQty(0, "1 Dozens", "Scanned packaging has quantity of 1");
helper.assertLineProduct(0, "productlot1");
helper.assertLineTrackingNumber(0, "lot-001");
},
},
{ trigger: ".o_validate_page", run: "click" },
{ trigger: ".o_notification_bar.bg-success" },
],
});
registry.category("web_tour.tours").add("test_gs1_multi_company_setup", {
steps: () => [
{
trigger: ".o_switch_company_menu > button",
run: "click",
},
{
trigger:
".dropdown-menu .dropdown-item[data-company-id] span:contains('Lovely Company')",
run: "click",
expectUnloadPage: true,
},
{
trigger: ".o_switch_company_menu .oe_topbar_name:contains('Lovely Company')",
},
{
trigger: "[data-menu-xmlid='stock_barcode.stock_barcode_menu'] > .o_app_icon",
run: "click",
},
{
trigger: ".o_stock_barcode_main_menu",
run: "scan 0136939282410106",
},
{
content: "Check that the existing quant was found",
trigger: ".o_list_view .o_data_row:contains('Lovel/Stock')",
},
{
trigger: ".o_back_button",
run: "click",
},
{
trigger: ".o_stock_barcode_main_menu",
run: "scan 4133033710074365",
},
{
trigger: ".o_barcode_client_action",
run: "scan 0136939282410106",
},
{
trigger: ".o_barcode_line:contains(product1)",
},
],
});