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.
Navigation¶
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¶
- An administrator configures questions on a product category (e.g., "Manufacturer", "Model Number", "Screen Size")
- A portal user navigates to Add Individual Inventory
- They select a Product Category from the dropdown
- The system loads the category's configured questions as a dynamic form
- The user answers each question and submits
- A Survey record is created in the backend with all answers stored as survey lines
- 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¶
- Navigate to Inventory > Configuration > Products > Product Categories
- Open a product category
- Click the Questions tab at the bottom of the form
- Click Add a line to add a regular question, or Add a section / Add a note for visual grouping
- Select a Question from the dropdown (or create a new one)
- Set the Question Type (text, select, boolean, model)
- If the type is Select, open the line's form view and add Options in the Options tab
- If the type is Model, select the Odoo model to pull records from
- Check Is Mandatory if the question must be answered
- Drag the handle icon to reorder questions
- 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¶
- Navigate to Inventory > Sales Lists
- Click New
- Select the Customer (each customer can only have one sales list)
- Select the Company if in a multi-company environment
- In the Products tab, click Add a line
- Select a Product, choose the Sale Type (By Weight or By Quantity), and enter the Price
- Repeat for each product
- 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:
- Open an existing sales list
- Click Add Multiple Products in the header
- Select multiple Products using the tag widget
- Choose a Sale Type (By Weight or By Quantity)
- Enter a Price (this price applies to all selected products)
- 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:
- The system checks if an inventory group already exists with the same QB Invoice Number and customer
- If found, the lines are linked to the existing group (merge behavior)
- If not found, a new group is created with the current user, submission date, customer, and QB Invoice Number
- 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.
- Open a portal inventory group
- Click Generate Manifest in the header
- 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¶
- Open a portal inventory group
- Select a New Location from the staging location dropdown
- Click Set Staged
- A confirmation dialog appears: "Are you sure you want to set the stage location in below lines?"
- 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:
- Click the Transfer button on an inventory line
- A popup displays available transfer locations (filtered by company)
- Select the destination location
- Click Transfer
- 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¶
- Open an inventory group from the portal list
- Click Verify Inventory
- Scan a barcode (or type a serial number and press Enter/click Scan)
- The system sends the serial to the
/portal/scan_verifyendpoint - If the serial matches a line in the group, a verification record is created and the line highlights green
- If the serial does not match, an error message appears: "This item is not part of this group"
- The progress bar and counter update in real-time
- 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:
- Click the Process button (cube icon) on a transfer-status line
- The system verifies the line is in Transfer status and is currently verified
- If both conditions are met, the line moves to Processed status with a timestamp and user record
- 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:
- From the inventory lines list, click Filter By Customer
- Select a Sales List -- matching unreserved lines auto-populate
- Optionally enter a QB Invoice Number
- Click Mark as Pending
- Lines move to pending status and are assigned to the sales list's customer
- 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:
- Open an inventory line (or click Update New Location on a line within a group)
- The wizard opens with the line pre-selected
- Choose a New Location
- Click Confirm
- 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:
- Select one or more inventory lines (all must be from the same company)
- Use the Switch Company server action from the Actions menu
- The wizard shows the current company (read-only)
- Select the New Company
- Click Confirm
- 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¶
- Navigate to Inventory > Portal Inventory Lines
- Click Filter By Customer in the list header
- Select the customer's Sales List in the wizard
- Review the auto-populated unreserved lines matching the sales list's products
- Optionally enter a QB Invoice Number
- Click Mark as Pending
- Lines move to pending status with the customer assigned
Updating Sales List Prices on Inventory Lines¶
- Navigate to Inventory > Portal Inventory Lines
- Use the Sales List search field to filter by a specific customer's sales list
- Select the inventory lines you want to price
- Click Update Price in the list header
- The system calculates prices based on the sales list's sale type (weight or quantity) and updates each line
Marking Pending Inventory as Sold¶
- Filter inventory lines to show Pending status
- Select the lines to mark as sold
- Click Mark as Sold from the Actions menu
- If lines already have a QB Invoice Number, they are marked sold immediately
- If lines lack a QB Invoice Number, the wizard opens -- enter the number and click Mark as Sold
- An inventory group is created (or merged with an existing one) linking all sold lines
Verifying an Inventory Group via Portal Scanning¶
- Open the portal and click Scan Weighted Inventory
- Search for the inventory group by name or QB Invoice Number
- Expand the group and click Verify Inventory
- Scan each item's barcode with a handheld scanner (or type the serial and press Enter)
- Watch the progress bar update as items are verified
- Verified items turn green in the table
- Once all items show as verified, the group's status changes to Verified
Generating a Shipping Manifest¶
- Open the portal inventory group in the backend
- Verify the Customer and QB Invoice Number are correct
- Click Generate Manifest in the header
- An XLSX file downloads automatically
- Review the manifest for accuracy -- check product groupings, weights, and totals
- Include the printed manifest with the physical shipment
Transferring Lines to a Processing Location¶
- From the portal Add Commodity interface, click the Transfer button on an inventory line
- Select the destination Transfer Location from the dropdown
- Click Transfer
- 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¶
- Navigate to Inventory > Portal Inventory Lines
- Select the lines to switch (all must belong to the same company)
- Open the Actions menu and click Switch Company
- Verify the Current Company shown is correct
- Select the New Company
- 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.