Skip to content

Product Customization (Portal Inventory & Product Categorization)

Last Updated: March 2026 Target Audience: Warehouse Staff, Inventory Managers, Sales Staff, System Administrators

Overview

The Product Customization module (sr_product_customization) extends portal inventory management and product categorization at Scott Recycling. It provides dynamic survey questions tied to product categories, a portal-based barcode scanning interface for inventory verification, customer-specific sales lists with weight-based and quantity-based pricing, inventory line lifecycle management (unreserved through processed), XLSX manifest generation, and multi-company inventory transfers. Warehouse staff use the portal interface to verify inventory groups by scanning barcodes. Sales staff use sales lists to assign pricing and move items through the pending-to-sold pipeline. Managers use the backend to configure category questions, manage transfer locations, and generate manifests.


The module adds menus under the existing SR Management menu structure:

Menu Path What It Shows
Inventory > Sales Lists All customer sales lists with product pricing
Inventory > Transfer WIP Fixed-location inventory groups for transfer staging
Inventory > Portal Inventory Standard portal inventory groups (excludes fixed locations)
Configuration > Customer Setup > Product Category Category questions, question lines, and question options
Configuration > Locations > Staging Locations Locations flagged as staging destinations

The portal (customer-facing website) adds two cards to the portal home page:

Portal Card What It Does
Add Individual Inventory Submit a single item via category-specific survey questions
Scan Weighted Inventory Browse inventory groups and scan barcodes to verify items

Product Category Survey System

The survey system attaches dynamic questions to product categories. When a user submits an individual item through the portal, they answer the questions configured for the selected category. Answers are stored as survey records and can be reviewed in the backend.

How It Works

  1. An administrator configures questions on a product category (e.g., "Manufacturer", "Model Number", "Screen Size")
  2. A portal user navigates to Add Individual Inventory
  3. They select a Product Category from the dropdown
  4. The system loads the category's configured questions as a dynamic form
  5. The user answers each question and submits
  6. A Survey record is created in the backend with all answers stored as survey lines
  7. The category's Participations count increments

Question Types

Type What the User Sees How the Answer Is Stored
Text Free-form text input field answer_text on the survey line
Select Dropdown with predefined options answer_selection linking to a question.option.line
Boolean (Yes / No) Dropdown with Yes / No choices answer_boolean on the survey line
Model (Fetch from database) Dropdown populated from an Odoo model (e.g., res.manufacturer) answer_ref as a polymorphic reference (model,id)

Category Question Line Fields

Field What It Means Example
Question Link to the question record (the question text) "Manufacturer Serial Number"
Category The product category this question belongs to "Laptops"
Question Type How the question is rendered: text, select, boolean, or model select
Is Mandatory Whether the portal user must answer before submitting Yes
Sequence Display order within the category (lower = first) 10
Options For select-type questions, the list of available choices "New", "Used", "Damaged"
Model For model-type questions, which Odoo model to pull records from res.manufacturer
Display Type Section header or note (for visual grouping, not actual questions) "Section"

Default Questions

The module ships with five default questions that are loaded into every product category via a one-time cron job:

Default Question Type
Our Serial Number Text
Manufacturer Serial Number Text
Manufacturer Model (fetches from res.manufacturer)
Model Line Text
Model Number Text

These are grouped under a "Default Questions" section header in each category. Category-specific questions can be added after the defaults.

Configuring Questions on a Category

  1. Navigate to Inventory > Configuration > Products > Product Categories
  2. Open a product category
  3. Click the Questions tab at the bottom of the form
  4. Click Add a line to add a regular question, or Add a section / Add a note for visual grouping
  5. Select a Question from the dropdown (or create a new one)
  6. Set the Question Type (text, select, boolean, model)
  7. If the type is Select, open the line's form view and add Options in the Options tab
  8. If the type is Model, select the Odoo model to pull records from
  9. Check Is Mandatory if the question must be answered
  10. Drag the handle icon to reorder questions
  11. Save the category

Use sections to group related questions

Add section headers (e.g., "Device Info", "Condition Assessment") to organize long question lists. Sections appear as bold dividers in the portal form and make it easier for warehouse staff to navigate.

Viewing Survey Participations

Each product category shows a Participations stat button in the button box. Click it to see all submitted surveys for that category. Each survey record includes the category, submission date, and all answer lines. Survey records also support the chatter (mail thread) for internal notes and activity scheduling.


Portal Inventory Extensions

The module extends the portal.inventory model (defined in sr_management) with additional fields for verification tracking, customer assignment, transfer locations, and manifest generation.

Portal Inventory Fields

Field What It Means Example
Verification Status Computed from line-level verification: Not Verified, In-Progress, or Verified "In-Progress"
Customer The customer associated with this inventory group "ABC Electronics"
Transfer Location The destination location for transfer operations (read-only, set by system) "Bay 3 - Staging"
New Location A staging location to batch-set on all non-terminal lines "Staging Area B"
Is Fixed Location Whether this group represents a permanent transfer location slot Yes
Lines Count Computed count of inventory lines in the group 47
Report File / File Name Binary field holding the generated XLSX manifest manifest_ABC_INV-2026-001.xlsx

Verification Status Logic

The verification status is computed automatically from the verification state of the group's individual lines:

Condition Resulting Status
No lines in the group Not Verified
All lines verified Verified
Some lines verified, some not In-Progress
Zero lines verified (but lines exist) Not Verified

In the tree view, verification status displays as a colored badge: red for Not Verified, blue for In-Progress, green for Verified.

Fixed Location Inventory Groups

Fixed location groups are special inventory groups that represent permanent transfer destinations (e.g., a processing bay or a shipping dock). They are:

  • Created automatically by a daily cron job (manage_fixed_locations) that scans for stock locations flagged as transfer locations
  • Named with a sequence prefix XFR/YYYY/MM/DD/## (resets daily)
  • Filtered into a separate Transfer WIP menu item
  • Excluded from the standard Portal Inventory list

When an inventory line is transferred to a location that has a fixed-location group, the line is automatically linked to that group.


Portal Inventory Lines

The module extends portal.inventory.line (defined in sr_management) with sales pricing, verification history, barcode scan logs, and processing metadata.

Inventory Line Extended Fields

Field What It Means Example
Sales List Price Computed price based on the matching sales list (weight x price or qty x price) $450.00
Unit Price The per-unit or per-pound price from the sales list $0.35/lb
Currency Inherited from the line's company USD
Matching Sales Lists Computed: all sales lists that include this line's product (only for unreserved lines) "ABC Electronics, XYZ Corp"
Default Sales List Search-only field for filtering inventory lines by a specific sales list (used in search bar)
Verification History Full history of verify/unverify actions with timestamps and users 3 verification records
Verified Count Number of times the line has been verified 2
Is Currently Verified Whether the most recent verification record is "verified" Yes
Last Verified By User who created the most recent verification record "John Smith"
Scan Logs Barcode scan log entries linked to this line Transfer scan records
Processed On Timestamp when the line was marked as processed 2026-03-01 14:30:00
Processed By User who marked the line as processed "Jane Doe"

Inventory Line Lifecycle

Inventory lines move through a defined status workflow. Each transition has specific requirements and triggers:

unreserved --> pending --> sold --> shipped
                                     |
unreserved --> pending --> sold --> transfer --> processed
                 |
                 v
              unreserved (un-pen)

cancel --> unreserved (mark as unreserved)
Status What It Means How Lines Get Here
Unreserved Line is available and not assigned to any customer Initial state after portal submission; or reversed from pending/cancel
Pending Line is reserved for a customer via a sales list "Mark as Pending" action with a sales list filter applied
Sold Line has been sold and a QB Invoice Number is assigned "Mark as Sold" action from pending status
Shipped Line has been shipped to the customer "Mark as Shipped" action from sold status
Transfer Line has been moved to a transfer/processing location Transfer action sets location and links to fixed-location group
Processed Line has been physically processed at the transfer location "Mark as Processed" from the portal scanning interface (requires verification)
Cancel Line was cancelled (Set elsewhere in the system)

Status Transition Rules

From To Requirements
Unreserved Pending Must filter inventory list by a sales list first; sets pended_for_id to the sales list's customer
Pending Sold QB Invoice Number required (prompted via wizard if not already set)
Pending Unreserved "Un-Pen" action; clears customer, date, QB number, and inventory group link
Sold Shipped Sets shipped_on timestamp
Transfer Processed Line must be currently verified; sets processed_on and processed_by_id
Cancel Unreserved "Mark as Unreserved" action; clears all assignment fields

Lines must be filtered by a single sales list before marking as pending

The system requires an active sales list filter in the domain before the "Mark as Pending" action will work. If you select lines without filtering by a sales list first, you will see a validation error: "Please filter this list by sales list before sending to pending." Use the Filter By Customer button or the Sales List search field to apply the filter.

Only one sales list at a time

If the active domain contains multiple sales list filters, the system will block the action with: "You have selected multiple Sales Lists. You can only proceed with one Sales List at a time."


Sales Lists

Sales lists define customer-specific product pricing. Each customer has at most one sales list (enforced by a uniqueness constraint). Sales list lines link a product to a price and a sale type (by weight or by quantity).

Sales List Fields

Field What It Means Example
Customer The customer this pricing applies to (one list per customer) "ABC Electronics"
Company Multi-company assignment "Scott Recycling LLC"
Product Lines The products and their pricing See line fields below

Sales List Line Fields

Field What It Means Example
Product The product template this price applies to "Mixed Copper Wire"
Sale Type Whether pricing is per pound (weight) or per unit (qty) "By Weight"
Price The per-unit or per-pound price 0.85

How Sales List Pricing Works

When a user clicks Update Price on the inventory lines list (with a sales list filter active), the system calculates the price for each unreserved line:

  • By Weight: sales_list_price = price * total_net_weight
  • By Quantity: sales_list_price = price * quantity

The Unit Price field stores the raw per-unit price from the sales list line.

Creating a Sales List

  1. Navigate to Inventory > Sales Lists
  2. Click New
  3. Select the Customer (each customer can only have one sales list)
  4. Select the Company if in a multi-company environment
  5. In the Products tab, click Add a line
  6. Select a Product, choose the Sale Type (By Weight or By Quantity), and enter the Price
  7. Repeat for each product
  8. Save

No duplicate customers

The system prevents creating a second sales list for a customer that already has one. Edit the existing list instead.

No duplicate products within a list

A constraint prevents adding the same product twice on a single sales list. Each product can appear at most once per list.

Adding Multiple Products at Once

For bulk setup, use the Add Multiple Products wizard:

  1. Open an existing sales list
  2. Click Add Multiple Products in the header
  3. Select multiple Products using the tag widget
  4. Choose a Sale Type (By Weight or By Quantity)
  5. Enter a Price (this price applies to all selected products)
  6. Click Add

The wizard creates individual sales list lines for each selected product with the same sale type and price. You can edit individual prices afterward in the Products tab.


Inventory Groups and Manifest Generation

Inventory groups (portal.inventory) collect related inventory lines together -- typically all items for a single customer and QB Invoice Number. Groups can be created manually or generated automatically when lines are marked as pending/sold with a QB Invoice Number.

Automatic Group Generation

When inventory lines are marked as pending or sold with a QB Invoice Number:

  1. The system checks if an inventory group already exists with the same QB Invoice Number and customer
  2. If found, the lines are linked to the existing group (merge behavior)
  3. If not found, a new group is created with the current user, submission date, customer, and QB Invoice Number
  4. If multiple groups are found with the same QB Invoice Number and customer, the system raises an error requiring manual resolution

Generating an XLSX Manifest

The manifest is an Excel spreadsheet summarizing all inventory lines in a group, organized by product.

  1. Open a portal inventory group
  2. Click Generate Manifest in the header
  3. The system generates an XLSX file and triggers a download

The manifest includes:

Section Contents
Header Customer name, QB Invoice Number, generation timestamp
Column Headers Serial Number, Product, Quantity, Gross Weight (lbs), Tare Weight (lbs), Net Weight (lbs), QB Invoice Number
Product Groups Lines grouped by product with per-product subtotals
Grand Totals Overall quantity, gross weight, tare weight, and net weight across all products

Generate manifests before shipping

Always generate and review the manifest before marking items as shipped. The manifest serves as the packing list and weight verification document for the customer.


Staging and Transfer Locations

The module adds a Staging Location concept to stock locations, used to set intermediate locations on inventory lines before transfer.

Stock Location Extension

Field What It Means Example
Is Staging Location Flags this location as available for the "New Location" dropdown on inventory groups Yes

Staging locations are managed under Configuration > Locations > Staging Locations.

Setting a Staged Location on a Group

  1. Open a portal inventory group
  2. Select a New Location from the staging location dropdown
  3. Click Set Staged
  4. A confirmation dialog appears: "Are you sure you want to set the stage location in below lines?"
  5. Confirm to update the location on all non-terminal lines (lines not in transfer, processed, or shipped status)

Transferring Individual Lines

From the portal scanning interface (Add Commodity), individual lines can be transferred to a transfer location:

  1. Click the Transfer button on an inventory line
  2. A popup displays available transfer locations (filtered by company)
  3. Select the destination location
  4. Click Transfer
  5. The line's location updates, a barcode scan log is created, and the line is linked to the fixed-location inventory group for that destination

Barcode Scanning Portal

The portal provides a browser-based barcode scanning interface for verifying inventory groups. This is designed for warehouse floor use with handheld barcode scanners or mobile device cameras.

Inventory Groups List (Portal)

URL: /inventory_groups/list

The portal inventory groups page shows all draft inventory groups that have lines. Each group displays as a collapsible accordion panel showing:

  • Group name and transfer location (for fixed locations)
  • QB Invoice Number and customer name
  • Line count badge
  • Verification status badge (Not Verified = red, In Progress = yellow, Verified = green)

Expanding a group shows a table of all lines with serial number, product, line status, and last verified by. A Verify Inventory button links to the scanning page.

The page supports:

  • Search by group name or QB Invoice Number
  • Pagination (10 groups per page)

Scan Verification Page

URL: /scan/weighted_inventory?inventory_id=<id>

The scanning page has a two-panel layout:

Left Panel -- Scan Box:

  • QB Invoice Number and customer name displayed
  • Barcode input field (auto-focused for immediate scanning)
  • Scan button (triggers manual scan or opens camera scanner)
  • Status messages (success/error alerts)
  • Progress bar showing verified count vs. total count

Right Panel -- Inventory Items:

  • Searchable table of all lines in the group
  • Columns: Serial Number, Verification Status, Line Status, Last Verified By, Mark as Processed
  • Verified lines are highlighted green; unverified lines are highlighted red
  • Mark as Processed button on each line (only visible for non-processed lines)

Scanning Workflow

  1. Open an inventory group from the portal list
  2. Click Verify Inventory
  3. Scan a barcode (or type a serial number and press Enter/click Scan)
  4. The system sends the serial to the /portal/scan_verify endpoint
  5. If the serial matches a line in the group, a verification record is created and the line highlights green
  6. If the serial does not match, an error message appears: "This item is not part of this group"
  7. The progress bar and counter update in real-time
  8. Continue scanning until all lines are verified

Camera Scanning

If no barcode value is entered and the user clicks Scan, the system opens a camera-based barcode scanner using the ZXing library:

  • Supports CODE_128, CODE_39, EAN_13, EAN_8, UPC_A, UPC_E, and ITF formats
  • Uses the device's rear-facing camera (facingMode: "environment")
  • Scanned value auto-populates the barcode input field
  • Modal closes automatically after a successful scan

Camera scanning requires HTTPS

Browser camera access requires a secure (HTTPS) connection. Camera scanning will not work on HTTP. If you see a camera error, verify you are accessing the portal over HTTPS.

Processing Lines from the Portal

Lines in Transfer status can be marked as processed directly from the scanning page:

  1. Click the Process button (cube icon) on a transfer-status line
  2. The system verifies the line is in Transfer status and is currently verified
  3. If both conditions are met, the line moves to Processed status with a timestamp and user record
  4. A success notification appears

If the line is not in Transfer status or is not verified, a warning message explains what is needed.


Wizards

The module includes six wizards for batch operations on inventory lines.

Select Customer Inventory Wizard

Purpose: Filter unreserved inventory by a sales list and mark matching lines as pending.

Field What It Means
Sales List Select the customer's sales list to filter by
Inventory Lines Auto-populated with unreserved lines matching the sales list's products
QB Invoice Number Optional invoice reference to assign during pending

Steps:

  1. From the inventory lines list, click Filter By Customer
  2. Select a Sales List -- matching unreserved lines auto-populate
  3. Optionally enter a QB Invoice Number
  4. Click Mark as Pending
  5. Lines move to pending status and are assigned to the sales list's customer
  6. If a QB Invoice Number was entered, an inventory group is created and lines are linked

Sales List Add Products Wizard

Purpose: Bulk-add multiple products to a sales list with the same pricing.

Field What It Means
Products Multi-select tag widget for choosing products
Sale Type By Weight or By Quantity (applies to all selected products)
Price Price per unit/pound (applies to all selected products)

This wizard is accessed from the Add Multiple Products button on a sales list form.

Mark As Sold Wizard

Purpose: Multi-purpose wizard that handles marking as pending, marking as sold, and updating QB Invoice Numbers.

Field What It Means
QB Invoice Number Required when marking as sold; optional when marking as pending; editable when updating
Sales List Pre-filled from the active filter (for pending mode)
Mode Hidden field: pending, sold, or update (controls which buttons appear)

Modes:

  • Pending mode: Shows "Mark as Pending" button. Marks lines as pending and optionally generates an inventory group.
  • Sold mode: Shows "Mark as Sold" button. Marks pending lines as sold and generates an inventory group if QB Invoice Number is provided.
  • Update mode: Shows "Add / Update" button. Updates the QB Invoice Number on pending lines.

Set New Location Wizard

Purpose: Change the staging location of a single inventory line.

Field What It Means
New Location Dropdown of staging locations (locations where is_staging_location = True)

Steps:

  1. Open an inventory line (or click Update New Location on a line within a group)
  2. The wizard opens with the line pre-selected
  3. Choose a New Location
  4. Click Confirm
  5. A success notification appears and the line's location is updated

Switch Company Wizard

Purpose: Move inventory lines from one company to another in a multi-company environment.

Field What It Means
Current Company Read-only; shows the current company of the selected lines
New Company Select the destination company

Steps:

  1. Select one or more inventory lines (all must be from the same company)
  2. Use the Switch Company server action from the Actions menu
  3. The wizard shows the current company (read-only)
  4. Select the New Company
  5. Click Confirm
  6. All selected lines are reassigned to the new company

Current and new company must differ

The wizard will raise a validation error if you select the same company as both current and new. All selected lines must also belong to a single company.

Add Portal Inventory Lines Wizard

Purpose: Add existing inventory lines to a portal inventory group.

Field What It Means
Portal Inventory The target inventory group
Inventory Lines Multi-select of lines to add

Batch Server Actions

The module registers server actions that appear in the Actions dropdown when selecting inventory lines in the list view. These are restricted to System Administrators and HQ Warehouse Managers.

Action What It Does Required Line Status
Mark as Pending Opens the pending wizard with the active sales list filter Unreserved
Mark as Un-Pen Reverts pending lines to unreserved (with confirmation) Pending
Mark as Sold Opens the sold wizard for QB Invoice Number entry Pending
Mark as Shipped Sets status to shipped with timestamp Sold
Add / Update QB Invoice Number Opens the update wizard for QB number changes Pending
Mark as Unreserved Reverts cancelled lines to unreserved (with confirmation) Cancel
Switch Company Opens the company switch wizard Any (all must be same company)

Automated Scheduled Actions (Crons)

Cron Job Schedule What It Does
Load default Product category questions Manual (inactive by default) One-time script that loads the five default questions into every product category
Create and manage fixed location inventory groups Daily Scans for transfer locations and creates fixed-location inventory groups if they do not already exist

Security

Groups

The module defines a Technicians security category with two levels:

Group Description
High Level Full access to technician features
Low Level Restricted technician access

Access Control Summary

Model Internal Users System Admins
product.category.question Read, Write, Create Read, Write, Create
product.category.question.line Read, Write, Create Read, Write, Create, Delete
question.option Read, Write, Create Read, Write, Create
question.option.line Read, Write, Create Read, Write, Create
sales.list Read, Write, Create Read, Write, Create, Delete
sales.list.line Read, Write, Create Read, Write, Create, Delete
product.category.survey Read, Write, Create Read, Write, Create
product.category.survey.line Read, Write, Create Read, Write, Create
inventory.line.verification Read, Write, Create Read, Write, Create
All wizards Read, Write, Create Read, Write, Create

Key security details:

  • Only System Admins can delete question lines, sales lists, and sales list lines. Internal users can create and edit but not delete.
  • The Is Default checkbox on questions is only visible to System Admins (base.group_system).
  • Batch server actions (Mark as Pending, Sold, Shipped, etc.) are restricted to System Admins and HQ Warehouse Managers.
  • The Switch Company action is restricted to System Admins only.

Multi-Company Rules

Rule Effect
Sales Lists Company rule Users only see sales lists belonging to companies in their allowed company set (company_id in company_ids)

Common Tasks

Marking Inventory as Pending for a Customer

  1. Navigate to Inventory > Portal Inventory Lines
  2. Click Filter By Customer in the list header
  3. Select the customer's Sales List in the wizard
  4. Review the auto-populated unreserved lines matching the sales list's products
  5. Optionally enter a QB Invoice Number
  6. Click Mark as Pending
  7. Lines move to pending status with the customer assigned

Updating Sales List Prices on Inventory Lines

  1. Navigate to Inventory > Portal Inventory Lines
  2. Use the Sales List search field to filter by a specific customer's sales list
  3. Select the inventory lines you want to price
  4. Click Update Price in the list header
  5. The system calculates prices based on the sales list's sale type (weight or quantity) and updates each line

Marking Pending Inventory as Sold

  1. Filter inventory lines to show Pending status
  2. Select the lines to mark as sold
  3. Click Mark as Sold from the Actions menu
  4. If lines already have a QB Invoice Number, they are marked sold immediately
  5. If lines lack a QB Invoice Number, the wizard opens -- enter the number and click Mark as Sold
  6. An inventory group is created (or merged with an existing one) linking all sold lines

Verifying an Inventory Group via Portal Scanning

  1. Open the portal and click Scan Weighted Inventory
  2. Search for the inventory group by name or QB Invoice Number
  3. Expand the group and click Verify Inventory
  4. Scan each item's barcode with a handheld scanner (or type the serial and press Enter)
  5. Watch the progress bar update as items are verified
  6. Verified items turn green in the table
  7. Once all items show as verified, the group's status changes to Verified

Generating a Shipping Manifest

  1. Open the portal inventory group in the backend
  2. Verify the Customer and QB Invoice Number are correct
  3. Click Generate Manifest in the header
  4. An XLSX file downloads automatically
  5. Review the manifest for accuracy -- check product groupings, weights, and totals
  6. Include the printed manifest with the physical shipment

Transferring Lines to a Processing Location

  1. From the portal Add Commodity interface, click the Transfer button on an inventory line
  2. Select the destination Transfer Location from the dropdown
  3. Click Transfer
  4. The line's location updates, a scan log is recorded, and the line is linked to the fixed-location inventory group

Switching Lines to a Different Company

  1. Navigate to Inventory > Portal Inventory Lines
  2. Select the lines to switch (all must belong to the same company)
  3. Open the Actions menu and click Switch Company
  4. Verify the Current Company shown is correct
  5. Select the New Company
  6. Click Confirm

Tips

Use the Filter By Customer button for faster pending workflows

Instead of manually applying search filters, click Filter By Customer in the inventory lines list header. This opens the wizard with auto-populated matching lines, saving multiple clicks and reducing errors from incorrect filter combinations.

Always verify before processing

The system enforces that inventory lines must be verified before they can be marked as processed. Scan every item in a transfer group before attempting to process them. Unverified lines will be blocked with a warning message.

Camera scanning works on mobile devices

The portal scanning page supports camera-based barcode scanning on phones and tablets. This is useful when a handheld scanner is unavailable. Tap the Scan button with an empty input field to activate the camera.

Check for existing inventory groups before creating duplicates

When marking lines as pending with a QB Invoice Number, the system automatically merges into existing groups that match the same QB number and customer. This prevents duplicate groups and keeps related lines together.

Use Add Multiple Products for initial sales list setup

When creating a new sales list with many products at the same price point, use the Add Multiple Products wizard to add them all at once. Then edit individual prices in the Products tab as needed.


Troubleshooting

Issue: 'Please filter this list by sales list before sending to pending'

Symptom: You select unreserved inventory lines and click Mark as Pending, but receive a validation error. Cause: The system requires an active sales list filter before pending operations. This ensures all lines are priced correctly and assigned to the right customer. Fix: 1. Click Filter By Customer in the list header to use the wizard, OR 2. Use the Sales List search field in the search bar to filter by a specific sales list 3. Then select lines and try the pending action again

Issue: 'This customer already exists in the Sales List!'

Symptom: You try to create a new sales list and get a validation error about the customer already existing. Cause: Each customer can have only one sales list. A list already exists for this customer. Fix: 1. Search for the existing sales list for this customer in Inventory > Sales Lists 2. Open it and edit the product lines as needed 3. Do not create a new list -- update the existing one

Issue: Camera scanner shows 'Camera error' message

Symptom: Clicking the Scan button opens the camera modal but displays an error instead of the camera feed. Cause: Camera access requires HTTPS. If the portal is served over HTTP, the browser blocks camera access. Fix: 1. Verify you are accessing the portal via HTTPS (check the URL bar) 2. If using HTTP, switch to the HTTPS URL 3. Ensure browser permissions allow camera access for the site 4. As a workaround, type the serial number manually or use a handheld USB barcode scanner

Issue: 'Only inventory lines in Transfer status can be processed'

Symptom: You click the Process button on the portal scanning page but receive a warning. Cause: Only lines in Transfer status can be marked as processed. The line may still be in pending, sold, or another status. Fix: 1. Check the line's current status in the Line Status column 2. The line must be in Transfer status -- ensure it was transferred to a processing location first 3. The line must also be verified -- scan it first if the Verification Status shows "Pending"

Issue: 'Multiple inventory groups found with the same QB Invoice Number'

Symptom: When marking lines as pending or sold with a QB Invoice Number, the system raises a validation error about multiple matching groups. Cause: More than one inventory group exists with the same QB Invoice Number for the same customer. This is an inconsistency that needs manual resolution. Fix: 1. Search for the QB Invoice Number in Inventory > Portal Inventory 2. Identify which group is the correct one (check line contents and dates) 3. Move misplaced lines from the incorrect group to the correct one 4. Delete or archive the duplicate group 5. Retry the pending/sold operation


Questions? Contact your supervisor or refer to the Getting Started guide.