Warehouse & Logistics Department
Roles covered: Warehouse Operator · Stock Manager · Logistics Supervisor · Warehouse Manager
Primary modules: Warehouse (Goods Receipt · Goods Issue · Delivery Notes · Packing Lists · Internal Transfers · Physical Inventory · Loss & Adjustments · Returns · Reports)
Who this guide is for
| Role | What they do in CRMConnect |
|---|---|
| Warehouse Operator | Receives goods, logs lot/serial, prepares orders for delivery |
| Picker / Packer | Picks items from shelves, packs, measures, prepares AWB |
| Stock Manager | Monitors balances, makes internal transfers, processes adjustments |
| Warehouse Manager | Approves documents, configures workflows, supervises physical inventory |
Warehouse operations map
INBOUND OUTBOUND
─────── ────────
Goods Receipt Note (GRN) Goods Issue Note
← from Purchase Order Delivery Note
← manual → Packing List → Innoship AWB
← client return Purchase Return (to vendor)
INTERNAL MOVEMENTS CORRECTIONS
────────────────── ───────────
Internal Transfer Physical Inventory (Stock Take)
from Warehouse A → Warehouse B Loss & Adjustments
MONITORING
──────────
Warehouse History (transaction log)
Stock reports (value, movements, expiry)
Minimum stock alert
Recommended daily routine
Warehouse Operator — Morning
1. Receipt orders expected today/admin/purchase/purchase_order?delivery_status=0 — undelivered POs with today's deadline
Prepare the receiving area, check if vendor has announced the delivery.
2. Delivery notes to process/admin/warehouse/manage_delivery — filter approval = 0 (draft/pending)
Deliveries prepared by the sales team awaiting picking and packing.
3. Packing lists to complete/admin/warehouse/manage_packing_list — unapproved packing lists
Weighed and dimensioned parcels awaiting AWB.
Warehouse Operator — During the day
Goods arrive → Scan barcode → Open Receipt Note
→ Fill in quantities, lot, expiry → Send for approval
Sales order ready → Open Delivery Note
→ Pick from shelf → Fill in picked quantities
→ Create Packing List → Weigh + measure parcel
→ Generate AWB → Hand to courier
Warehouse Manager — Daily
- Pending approvals — receipt notes, delivery notes, adjustments, transfers
- Stock below minimum — products needing urgent replenishment
- Blocked deliveries — delivery notes with insufficient stock (
flag_export_warehouse = 0) - New returns — return requests from clients or for vendors
Commodities — catalogue management
Where: /admin/warehouse/commodity_list
Structure of a warehouse product
| Field | Notes |
|---|---|
commodity_code |
Internal code (own SKU) |
commodity_barcode |
Barcode for scanning |
commodity_name |
Full name |
unit_id |
Primary unit of measure |
purchase_price |
Purchase price (basis for stock valuation) |
warehouse_id |
Default warehouse for the product |
guarantee |
Warranty in months (automatically calculates warranty expiry on receipt) |
without_checking_warehouse |
Flag: if 1, system allows delivery even without stock |
Operational flags:
| Flag | Meaning |
|---|---|
can_be_sold |
Appears in invoices and proposals |
can_be_purchased |
Appears in purchase orders |
can_be_manufacturing |
Can be a component or finished product in production |
can_be_inventory |
Tracked in stock (if 0 = service, not stocked) |
Product organisation
Hierarchy: Group → Sub-group → Product → Variant (attribute)
| Level | Where configured | Examples |
|---|---|---|
| Product type | ware_commodity_type |
Raw material, Goods, Finished product |
| Group | items_groups |
Electronics, Textiles, Consumables |
| Sub-group | wh_sub_group |
Phones, T-shirts, Office paper |
| Attributes | Colour, Size, Model, Serial | Red/M/iPhone 15 |
Minimum and maximum stock per product
Where: From product record → inventory_number_min / inventory_number_max fields
| Field | Meaning |
|---|---|
inventory_number_min |
Alert threshold — when stock falls below this value, system flags it |
inventory_number_max |
Target level on replenishment (how much you order to get back to max) |
Important: Minimum stock is informational — it doesn't automatically trigger orders. The procurement agent must check the below-minimum stock report and create RFQs manually.
Goods Receipt Note (GRN)
Where: /admin/warehouse/manage_purchase
Complete receipt flow
1. Goods physically arrive in warehouse
↓
2. Operator opens Receipt Note (auto-created from PO or manual)
↓
3. Fill in line by line:
- Quantity received (can be < PO quantity → partial receipt)
- Lot number (if product is lot-tracked)
- Manufacturing date + Expiry date (for perishables)
- Serial number (for serialised products)
- Unit purchase price
↓
4. Send for approval (if approval flow is configured)
↓
5. Manager approves → stock increases automatically in inventory_manage
Transaction recorded: goods_transaction_detail.status = 1 (Receipt)
Key fields on receipt line
| Field | Notes |
|---|---|
commodity_code |
Scan barcode or select from catalogue |
quantities |
Quantity actually received |
unit_price |
Price from vendor invoice (basis for stock valuation) |
lot_number |
Batch/lot number — essential for FIFO and traceability |
date_manufacture |
Manufacturing date — mandatory for perishables |
expiry_date |
Expiry date — appears in expiry report |
serial_number |
Individual serial or multiple separated by comma |
warehouse_id |
Specific warehouse (if you have multiple) |
note |
Quality observations (e.g. "5 units damaged packaging") |
Partial receipt
If vendor delivers less than the order:
- Fill in actual quantities received (less than the PO)
- PO remains open (
delivery_status ≠ Completed) - Create a second receipt note when the remainder is delivered
- System sums quantities from both notes
Goods Issue Note
Where: /admin/warehouse/goods_issue_note
When to use it
Goods Issue Note = internal stock outflow without going to an external client:
- Production: raw materials consumed on a Manufacturing Order
- Internal use: office consumables, departmental own use
- CAPEX/OPEX: asset purchases or operational expenditure
Key fields
| Field | Notes |
|---|---|
warehouse_id |
Source warehouse |
project |
Project to which the consumption is allocated |
type |
CAPEX (investment) or OPEX (operational expense) |
department |
Department consuming the materials |
requester |
Who requested the materials |
description |
Reason for consumption |
Delivery Note
Where: /admin/warehouse/manage_delivery
Creation
| Method | When |
|---|---|
| Automatic from client invoice | If auto_create_goods_delivery = 1 in settings |
| Manual | Add button from Warehouse module |
| From OmniSales | On confirming an e-commerce channel order |
Stock check on creation
When adding lines to the delivery note, the system automatically checks inventory_manage.inventory_number:
- Sufficient stock → line added normally
- Insufficient stock →
flag_export_warehouse = 0→ delivery note cannot be approved
The note stays in approval = 0 until stock is replenished. Procurement creates RFQ → PO → Receipt → stock increases → return to delivery note and approve.
Delivery types
type_of_delivery |
Use |
|---|---|
total |
All items in delivery note delivered simultaneously |
partial |
Deliver some now; a second delivery note for the rest |
Packing List — Packing and shipment preparation
Where: /admin/warehouse/manage_packing_list
Packing flow
Delivery Note approved
↓
Picker collects items from shelf
↓
Create Packing List from Delivery Note:
- Select quantities to pack per item
- Fill in: length (cm), width (cm), height (cm), weight (kg)
- Delivery address (pulled from order, editable)
- Client notes (e.g. "fragile", "do not tip")
↓
Send for approval (if configured)
Manager approves → status → wh_ready_to_deliver
↓
Generate Innoship AWB
↓
Print AWB and label → affix to parcel
↓
Hand to courier → status → wh_in_transit
↓
Delivery confirmed → status → wh_delivered
Mandatory fields for AWB generation
| Field | Notes |
|---|---|
weight |
Parcel weight in kg — mandatory for courier |
lenght |
Length in cm |
width |
Width in cm |
height |
Height in cm |
| Complete delivery address | Street, city, county, postcode, country |
Without all dimensions filled in, the Innoship AWB generation button does not become active.
Packing statuses
| Status | Description |
|---|---|
wh_ready_to_deliver |
Created, awaiting AWB |
wh_in_transit |
AWB generated, handed to courier |
wh_delivered |
Confirmed delivered by courier/Innoship |
Internal Transfer
Where: /admin/warehouse/manage_internal_delivery
When to use it
- Moving stock from central warehouse → work location
- Relocation from WIP (Work In Progress) zone → finished goods zone
- Rebalancing stock between two physical locations
Key fields
| Field | Notes |
|---|---|
internal_delivery_code |
Document code (prefix ID) |
from_stock_name |
Source warehouse ID |
to_stock_name |
Destination warehouse ID |
available_quantity |
Available stock in source — automatically checked |
quantities |
Quantity to transfer |
On approval:
- Source warehouse:
inventory_number -= quantity(transaction code 4) - Destination warehouse:
inventory_number += quantity(transaction code 4)
Physical Inventory (Stock Take)
Where: /admin/warehouse/physical_inventory
Complete process
1. PLANNING
Manager sets inventory date
Assigns stock managers per zone/category
Temporarily stops stock movements (recommended)
2. COUNTING
Each stock manager opens inventory session
Per item: scan barcode → enter physically counted quantity
System automatically shows: book stock vs. physical stock → difference
3. REVIEW DIFFERENCES
Manager views difference report:
- Surplus (+ positive): more physically than in system
- Deficit (- negative): less physically than in system
Per line: `reason` field — explain cause (theft, damage, entry error, etc.)
4. APPROVAL
Manager approves the inventory session
System automatically creates adjustments for each difference
Stock corrected to physically counted quantities
5. FINAL REPORT
Excel export with: item, book stock, physical stock, difference, reason
Inventory session fields
| Field | Notes |
|---|---|
stock_take_code |
Session document code |
warehouse_id |
Inventoried warehouse |
date_stock_take |
Physical count date |
staff_id |
Involved stock manager(s) |
quantity_stock_take |
Quantity counted on shelf |
quantity_accounting_book |
Book stock in system at time of inventory |
quantity_change |
Difference = physical − book |
reason |
Explanation of difference |
Multiple stock managers simultaneously
The system allows assigning multiple staff to the same inventory session — each can be responsible for an area or product category. Counts are aggregated in the same session.
Loss & Adjustments
Where: /admin/warehouse/loss_adjustment
Adjustment types
type |
When to use |
|---|---|
loss |
Goods destroyed, stolen, expired, damaged |
adjustment |
Correction of an entry error (wrong quantity on receipt) |
gain |
Goods found in excess of book stock (previously unexplained surplus) |
return |
Client-returned goods re-entered into stock |
correction |
Readjustment after reconciliation with vendor |
Key fields
| Field | Notes |
|---|---|
type |
Adjustment type |
reason |
Detailed reason (free text — important for audit) |
warehouses |
Affected warehouse |
current_number |
Stock before adjustment |
updates_number |
Stock after adjustment |
lot_number / expiry_date |
If adjusting a specific lot |
status |
0=pending, 1=approved, -1=rejected |
Lot and Serial Number Tracking
Lot tracking (for batch products)
Activated when: you fill in lot_number at receipt
| Moment | What is recorded |
|---|---|
| Receipt | lot_number, date_manufacture, expiry_date on receipt note line |
| Delivery | System selects oldest lot (FIFO) |
| Adjustment | Affected lot is specified |
Automatic FIFO: when generating a delivery note, the system chooses ORDER BY id ASC on goods_receipt_detail records — first lot in, first lot out.
Serial Number tracking (for serialised products)
Activated from settings: wh_products_by_serial = 1
| Moment | What happens |
|---|---|
| Receipt | Operator enters serial(s) — individual or multiple separated by comma |
| On approval | Each serial → row in wh_inventory_serial_numbers with is_used = "no" |
| Delivery | Operator scans/selects specific serial; is_used → "yes" |
| Return | Serial becomes available again (is_used → "no") |
Complete traceability: for any serial you can see: when it came in, when it went out, to which client.
Returns
Return from client (Delivery Return)
Where: /admin/warehouse/manage_order_return_receipt
Client returns goods:
- Create return request with reference to original order
- Specify returned items and quantities + reason (
return_reason) - Manager approves the return
- On approval → stock increases (return receipt note auto-generated)
- Return fee (
fee_return_order) can be applied if configured on vendor
Return window: wh_return_request_within_x_day days from delivery (default: 30). Out-of-window returns require special approval.
Return to vendor (Purchase Return)
Where: /admin/warehouse/manage_order_return_delivery
Defective or non-conforming goods returned to vendor:
- Create return delivery note referencing the PO and original receipt note
- Specify returned items + quantities
- Stock decreases on approval (return delivery note)
- Track vendor credit through the Debit Note
Warehouse reports
Where: /admin/warehouse/manage_report
| Report | What it shows | Export |
|---|---|---|
| Current stock | Balance per product per warehouse, value (qty × purchase price) | Excel / PDF |
| Stock card | All transactions of a product: inflows, outflows, daily balance | |
| Movements by period | Inflows + outflows + adjustments filtered by date, warehouse, type | Excel |
| Expired products | Items with past or approaching expiry_date |
Excel / PDF |
| Inventory — differences | Results of physical inventory session | Excel |
| Loss & Adjustments | All adjustments by type, reason, period | |
| Stock valuation | Stock × purchase price per product, warehouse total | Excel |
| Receipt notes | All inflows for period, filtered by vendor | PDF / Excel |
| Delivery notes | All outflows for period, filtered by client | PDF / Excel |
Essential daily report: Inventory History
Where: /admin/warehouse/warehouse_history
Complete log of all stock transactions:
- Every inflow and outflow with timestamp, source document, operator
- Balance before and after each movement (
old_quantity) - Filterable by: product, warehouse, transaction type, period
- The single source of truth for reconciliations and audits
Warehouse configuration
Where: /admin/warehouse/setting and /admin/warehouse/warehouse_mange
Critical settings
| Option | Value | Effect |
|---|---|---|
auto_create_goods_received |
1 |
Receipt note auto-created on PO approval |
auto_create_goods_delivery |
1 |
Delivery note auto-created on client invoice generation |
goods_delivery_required_po |
1 |
PO mandatory on delivery notes |
goods_receipt_required_po |
1 |
PO mandatory on receipt notes |
cancelled_invoice_reverse_inventory |
1 |
Invoice cancellation reverses stock automatically |
warehouse_show_lot_number_column |
1 |
Show Lot Number column in documents |
warehouse_show_expiry_date_column |
1 |
Show Expiry Date column |
wh_products_by_serial |
1 |
Enable serial number tracking |
Approval flow configuration
Where: wh_approval_setting — accessible from Warehouse settings
| Document type | Code | Who approves |
|---|---|---|
| Receipt Note | 1 | Warehouse manager / chief stock manager |
| Delivery Note | 2 | Warehouse manager / logistics |
| Loss & Adjustments | 3 | Warehouse manager + CFO (for large values) |
| Internal Transfer | 4 | Warehouse manager |
| Packing List | 5 | Shipping supervisor |
| Return | 6 | Warehouse manager |
Integration with other departments
| Department | How you interact |
|---|---|
| Sales | Delivery notes are created from their invoices; confirm availability for large orders before confirmation |
| Procurement | Create receipt notes from their POs; report quantity/quality discrepancies |
| Production | Material consumption (Goods Issue) on Manufacturing Orders; receive finished products into stock |
| Finance | Purchase prices from receipt notes are the basis for stock valuation in accounting |
Common permissions
Ask the administrator at /admin/roles:
| Permission | Required for |
|---|---|
| Warehouse → View / Create | General access to warehouse modules |
| Goods Receipt → Approve | Approve receipt notes (managers) |
| Goods Delivery → Approve | Approve delivery notes |
| Loss Adjustment → Approve | Approve stock adjustments |
| Physical Inventory → Create | Initiate inventory sessions |
| Warehouse Reports → View | Report access |
Quick reference
Workflows: Warehouse Inbound → Outbound · OmniSales Fulfillment · Purchase to Pay · Manufacturing Order · Full Commercial Cycle
Modules: Warehouses · Warehouse Settings · Commodities · Goods Receipt Note · Goods Issue Note · Delivery Notes · Packing Lists · Internal Transfers · Physical Inventory · Loss & Adjustments · Purchase Returns · Delivery Returns · Inventory History · Warehouse Reports
Warehouse History is the fastest investigation tool for any stock discrepancy — filter by commodity and date range to see the exact chain of movements, who created each document, and when. A 2-minute filter beats an hour of manual document tracing.
Physical inventory counts are most accurate as rolling cycle counts per warehouse zone rather than a single annual full shutdown. Discrepancies are caught within weeks and remain traceable; annual errors accumulate for 12 months before anyone knows.