Skip to content

Sales Extensions

Custom sales order enhancements for window treatment business operations.

Module Overview

Module Technical Name Version Description
Product Dimensions bi_product_dimension 15.0.1.0.0 Core dimension-based pricing (Width x Height)
Product Configurator jdx_product_configurator 15.0.4.0.0 Blinds, Shutters, Outdoor configuration wizards
Sale Order Photos jdx_sale_order_photos 15.0.1.0.0 S3 photo gallery on sale orders
Copy Sale/Purchase Lines bi_copy_sale_purchase_line 15.0.1.0.0 Duplicate order lines quickly
Customer Payment Method customer_payment_method 15.0.1.0.0 Payment selection and auto-invoicing

Product Configurator (jdx_product_configurator)

The core module for window treatment sales, providing dynamic configuration wizards for three product categories.

Product Categories

Category Wizard Vendor Type Key Features
Blinds/Shades Blinds Config Wizard blinds Fabric, color, motorization
Shutters Shutter Config Wizard shutter Panel layout, louver size, frame type
Outdoor Screens Outdoor Config Wizard outdoor Wind rating, motor, track system

Implementation Status

Version Feature Status
V3 Blinds/Shutters/Outdoor Wizards ✅ Complete
V3 Batch Entry & SO Line Creation ✅ Complete
V3 Vendor-specific PO Reports ✅ Complete
V4 Phase 1 Window Shapes (Arch, Rake, Fan) ✅ Complete
V4 Phase 2 Enhanced Cutouts (Half-circle, Rectangular) ✅ Complete
V4 Phase 3 Multi-page PO Reports ⚠️ Partial (cutout diagrams pending)
V4 Phase 4 AI Draft Generation (OpenAI, Claude, Gemini) ✅ Complete

System Architecture

┌─────────────────────────────────────────────────────────────────────────┐
│                              SALE ORDER                                  │
│                         (Source of Truth)                                │
│                                                                         │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐         │
│  │ Blinds Wizard   │  │ Shutter Wizard  │  │ Outdoor Wizard  │         │
│  │ ┌─────────────┐ │  │ ┌─────────────┐ │  │ ┌─────────────┐ │         │
│  │ │ Common      │ │  │ │ Common      │ │  │ │ Common      │ │         │
│  │ │ Settings    │ │  │ │ Settings    │ │  │ │ Settings    │ │         │
│  │ ├─────────────┤ │  │ ├─────────────┤ │  │ ├─────────────┤ │         │
│  │ │ Window 1    │ │  │ │ Window 1    │ │  │ │ Unit 1      │ │         │
│  │ │ Window 2    │ │  │ │ Window 2    │ │  │ │ Unit 2      │ │         │
│  │ │ Window 3    │ │  │ │ ...         │ │  │ │ ...         │ │         │
│  │ └─────────────┘ │  │ └─────────────┘ │  │ └─────────────┘ │         │
│  └────────┬────────┘  └────────┬────────┘  └────────┬────────┘         │
│           └────────────────────┼────────────────────┘                   │
│                                ▼                                        │
│                       SALE ORDER LINES                                  │
└─────────────────────────────────────────────────────────────────────────┘
                    SO Confirmed ───┼─── Auto-Generate POs
         ┌──────────────────────────┼──────────────────────────┐
         ▼                          ▼                          ▼
┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│ PO: Blinds      │      │ PO: Shutter     │      │ PO: Outdoor     │
│ Vendor          │      │ Vendor          │      │ Vendor          │
├─────────────────┤      ├─────────────────┤      ├─────────────────┤
│ • Fabric codes  │      │ • Panel layout  │      │ • Drop specs    │
│ • Color codes   │      │ • Frame type    │      │ • Motor specs   │
│ • Motor specs   │      │ • Louver size   │      │ • Wind rating   │
│ • Dimensions mm │      │ • Hinge diagram │      │ • Track type    │
└─────────────────┘      └─────────────────┘      └─────────────────┘

Blinds/Shades Configuration

Common Settings (Wizard Header)

Settings that apply to all windows in a batch:

Field Type Required Description
product_id Many2one Yes Product (Zebra LF, Zebra BO, Roller, etc.)
fabric_id Many2one Yes Fabric selection
color_id Many2one Yes Supply color
head_rail_color Selection No White / Black / Custom
valance_type Selection No Open / Standard / Compact 25
high_top Selection No High top option (+pricing)
fabric_on_head Boolean No Fabric wrap on head rail (+$20)
fabric_on_bottom Boolean No Fabric wrap on bottom (+$20)

Per-Window Fields (Wizard Lines)

Unique settings per window:

Field Type Required Description
room_name Char Yes Room/Location name
width Integer Yes Width in mm
height Integer Yes Height in mm
mount_type Selection Yes Inside / Outside
motorized Boolean No Has motor
string_side Selection Yes L / R / Cordless

Why Per-Window for Mount/Motor/String?

Field Reason
Mount Some windows fit inside frame, others need outside mount
Motor Customer may only want certain windows motorized (cost)
String Left/Right varies by window position, Cordless for child safety

Dimension Flow

Salesman enters:    width = 893 mm,  height = 1197 mm
Customer Quote:     customer_width = 900 mm  (ceil to 10mm)
                    customer_height = 1200 mm
Purchase Order:     purchase_width = 893 mm  (raw for vendor)
                    purchase_height = 1197 mm
PO Report (inches): width_inch = 35.16"  (÷ 25.4)
                    height_inch = 47.13"

Shutters Configuration

Material & Grade

Field Type Options Description
shutter_material Selection polycore, lexwood PolyCORE® or LexWOOD®
shutter_grade Selection standard, premium, advantage, plus, preferred Material grade
material_origin Selection domestic, imported PolyCORE: Made in USA or Imported

Window Shape Types

Code Name Extra Dimensions
standard Standard Rectangle Width × Height only
arch Arch (AR) Width(A), Middle(B), Left(C), Right(D)
rake Rake (RK) Width(A), Height(B), Left(C), Right(D)
half_arch_left ½ Arch Left Width(A), Middle(B), Left(C), Right(D)
half_arch_right ½ Arch Right Width(A), Middle(B), Left(C), Right(D)
half_circle_fan ½ Circle Fan Top Width(A), Height(B)
eyebrow_fan Eyebrow Fan Top Width(A), Height(B), Left(C), Right(D)
ARCH (AR)                    RAKE (RK)
    ┌───────┐                    /│
   /         \                  / │
  │           │                /  │
  │     B     │               /   │D
 C│           │D             / B  │
  │           │             /     │
  └───────────┘            └──────┘
       A                       A

1/2 ARCH-LEFT              1/2 ARCH-RIGHT
  ┌────┐                         ┌────┐
 /     │                         │     \
│  B   │D                       C│   B  │
└──────┘                         └──────┘
    A                               A

1/2 CIRCLE FAN TOP         EYEBROW FAN TOP
       ╭───────╮                 ╭─────╮
      ╱    B    ╲              C╱   B   ╲D
     └───────────┘              └─────────┘
           A                         A

Configuration Options

Field Type Options Description
louver_size Selection 2.5", 3.5", 4.5" Louver blade size
tilt_type Selection tilt_rod, hidden_tilt Control mechanism
frame_type Char L-frame, Z-frame, Deco Frame configuration
hinging Selection L, R, LR, RL Hinge side
panel_count Integer 1-8 Number of panels
has_divider_rail Boolean Y/N Horizontal divider rail
divider_position Float mm Position from bottom

Shutter Colors

PolyCORE Colors:

Code Color
BRI Bright White
DUL Dull White
OFF Off White
PRL Pearl
ULT Ultra White

Cut Out Options (Door Handles)

For shutters with door handle cutouts:

Field Type Description
has_cutout Boolean Has cut out
cutout_type Selection half_circle, rectangular, custom
cutout_side Selection left, right
cutout_position_c Float Position from bottom (inches)
cutout_radius_e Selection 4¼", 5¼", 6¼" (half circle)
cutout_height_c Float Cut out height (rectangular)
cutout_width_e Float Cut out width (rectangular)
cutout_recessed_plate Float Recessed plate dimension
HALF CIRCLE CUT OUT              RECTANGULAR CUT OUT
┌─────────────────────────┐      ┌─────────────────────────┐
│      ╭───────╮          │      │     ┌───────────┐       │
│     ╱    E    ╲         │      │     │     E     │← C    │
│    (  radius   )        │      │     │  (width)  │       │
│     ╲         ╱         │      │     └───────────┘       │
│      ╰───┬───╯          │      │          │ D            │
│          │ C            │      │          ↓              │
│          ↓              │      │     ┌────┴────┐         │
│     ┌────┴────┐         │      │     │    F    │         │
│     │    D    │         │      │     └─────────┘         │
└─────────────────────────┘      └─────────────────────────┘

Cutout Pricing:

Type PolyCORE LexWOOD
Standard $150 $120
Custom +$50 surcharge +$50 surcharge

Fan Top Specific

Field Options Description
fan_bottom_type with_frame, with_base Bottom configuration

Outdoor Screens Configuration

Location & Dimensions

Field Type Description
location_name Char Patio, Lanai, Pool Area
width Float Opening width (max 20-22 ft)
height Float Opening height (max 13-16 ft)
drop_length Float Fabric drop length
mount_type Selection Inside / Outside / Ceiling
mount_surface Selection Wood / Concrete / Stucco / Aluminum

Screen Fabric Types

Code Type Best For
solar Solar Screen UV protection, heat reduction
insect Insect Screen Bug protection, max airflow
privacy Privacy Screen Daytime privacy
blackout Blackout Screen Total light blocking
clear_vinyl Clear Vinyl Weather protection

Openness Factor

Openness UV Block View Best Use
1% 99% block Minimal Maximum privacy
3% 97% block Limited High privacy
5% 95% block Moderate Balance
10% 90% block Good Popular choice
14% 86% block Excellent Maximum view

Operation & Motor

Field Type Options
operation_type Selection manual_crank, manual_gear, motorized, solar_motor, battery_motor
motor_brand Selection Somfy (5yr), Helios (3yr), XQ5 (5yr)
motor_side Selection Left / Right
power_source Selection Hardwired / Solar / Battery
remote_channels Selection 1 / 5 / 15 channel

Wind Protection

Field Type Description
has_wind_sensor Boolean Auto-retract in high winds
wind_sensor_level Selection 1-5 (3mph to 32mph trigger)
wind_rating Selection Standard (25mph), High (50mph), Extreme (130mph)

Side Track System

Code Type Wind Resistance
cable Cable Guide Low
channel Side Channel Medium
zipper Zipper Track High
magnetic MagnaTrack Very High

Housing & Bottom Bar

Housing Styles:

Code Style Description
open_roll Open Roll No housing, exposed roller
small_cassette Small Cassette Compact enclosed
large_cassette Large Cassette Full enclosed
square_fascia Square Fascia Architectural square
round_fascia Round Fascia Rounded profile

Bottom Bar Types:

Code Type Description
heat_sealed Heat Sealed Pocket Slim fabric pocket
fabric_wrapped Fabric Wrapped Heavier wrap
aluminum_trim Aluminum Trim Exposed aluminum
weighted Weighted Bar Extra heavy for wind
locking Locking Bar Locks into bottom track

Warranty Considerations

Component Standard Saltwater (<3 miles)
Motor (Somfy/XQ5) 5 years 5 years
Motor (Helios) 3 years 3 years
Housing/Tracks 10 years 1 year
Fabric 10 years 10 years

Multi-Page PO Reports

Purchase Order reports generate vendor-specific pages based on line content:

┌─────────────────────────────────────────────────────────────┐
│  PURCHASE ORDER REPORT                                       │
├─────────────────────────────────────────────────────────────┤
│  PAGE 1: Standard Order Form                                 │
│  - Standard shutter/blinds lines                             │
│  - Checkboxes: Material, Louver, Tilt, Color                │
├─────────────────────────────────────────────────────────────┤
│  PAGE 2: Special Shapes Form (if any)                        │
│  - Arch/Rake/Fan lines with B, C, D dimensions              │
│  - Shape diagrams                                            │
├─────────────────────────────────────────────────────────────┤
│  PAGE 3: Cut Out Form (if any cutout lines)                 │
│  - Per-line cutout details with A-F measurements            │
│  - Half circle / Rectangular diagrams                        │
├─────────────────────────────────────────────────────────────┤
│  PAGE 4+: Technical Drafts (if generated)                   │
│  - AI-generated CAD-style blueprints                        │
└─────────────────────────────────────────────────────────────┘

Inch Conversion (Vendor Reports)

Dimensions convert from mm to inches with quarter-inch rounding down:

# Round down to nearest quarter inch
rounded_inch = int(value_mm / 25.4 * 4) / 4.0

# Examples:
# 890mm → 35.04" → 35.00"
# 1600mm → 62.99" → 62.75"
# 1800mm → 70.87" → 70.75"

AI Draft Generation (Phase 4)

OpenAI integration for CAD-style shutter drafts.

Two-Step Process

  1. Step A - Spec Builder (GPT): Normalize specs, compute panel widths, generate prompt
  2. Step B - Image Render (gpt-image): Generate CAD-style PNG blueprint

Draft Fields (sale.order.line)

Field Type Description
draft_spec_json Text Normalized spec JSON
draft_warnings Text Validation warnings
draft_revision Integer Version number (v1, v2...)
draft_image_attachment_id Many2one PNG attachment
draft_status Selection none/draft/sent/approved/production

Draft Status Workflow

NONE → DRAFT → SENT → APPROVED → PRODUCTION
 │       │       │        │
 └───────┴───────┴────────┘ (regenerate loops back to DRAFT)

Product Dimensions (Core Module)

See Product Dimensions for complete documentation.

The bi_product_dimension module provides the foundation:

  • Dimension-based pricing (m2 calculation)
  • Premium add-on cost calculation
  • Configurable order sequence prefixes
  • 1 SO = 1 PO enforcement
  • PO line split for individual tracking

Customer Payment Method

Field Value
Technical Name customer_payment_method
Version 15.0.1.0.0
Dependencies sale, account

Payment Options

Option Description
Cash Pay with cash
Check Pay by check
Wire Transfer Bank wire transfer
Zelle Zelle payment
Credit Card Credit card payment
Online Payment Online payment gateway

Portal Flow

flowchart TD
    A[Customer Opens Portal] --> B[Reviews Quotation]
    B --> C[Clicks Accept & Sign]
    C --> D[Payment Method Modal]
    D --> E[Selects Payment Method]
    E --> F[Signs Quotation]
    F --> G[Order Confirmed]
    G --> H[50% Deposit Invoice Created]

Auto-Invoice Logic

When customer signs via portal: 1. Validates signature present 2. Creates 50% deposit invoice 3. Invoice kept in draft for adjustment


Copy Sale/Purchase Lines

Field Value
Technical Name bi_copy_sale_purchase_line
Version 15.0.1.0.0

Features

  • Copy Button on each sale order line
  • Duplicates line with same product/settings
  • Resets dimension fields:
  • item_location_id → empty
  • width → 0
  • height → 0

JDX Sale Order Photos

Field Value
Technical Name jdx_sale_order_photos
Version 15.0.1.0.0
Python Dependencies boto3

Features

  • Photo Count Smart Button
  • Photo Gallery View with S3 pre-signed URLs
  • Shared S3 Credentials with jdx_service_signature

S3 Configuration

System Parameter Description
jdx_service_signature.s3_access_key AWS Access Key ID
jdx_service_signature.s3_secret_key AWS Secret Access Key
jdx_service_signature.s3_bucket S3 bucket name
jdx_service_signature.s3_region AWS region

Complete Sales Workflow

AUSTINJDX SALES FLOW

1. QUOTATION
   ├── Open Configuration Wizard (Blinds/Shutters/Outdoor)
   ├── Enter common settings (product, fabric, color)
   ├── Add multiple windows with dimensions
   ├── System calculates: m2, net_price, additional costs
   └── Send quotation to customer (portal)

2. CUSTOMER PORTAL
   ├── Review quotation
   ├── Select payment method (popup modal)
   └── Sign & Accept

3. ORDER CONFIRMATION
   ├── Validate signature
   ├── Calculate additional costs (premium options)
   ├── Auto-create 50% deposit invoice
   └── Generate purchase orders (per vendor)

4. PURCHASE ORDER
   ├── Confirm PO to vendor
   ├── Print vendor-specific PDF form
   ├── Receive products (validate receipt)
   └── Products now in stock

5. DELIVERY
   ├── Prepare shipment
   ├── Validate delivery
   └── Auto-create FSM Order (Install type)

6. FIELD SERVICE
   ├── Schedule installation
   ├── Customer signature on completion
   ├── Load warranty template
   └── Send completion report

7. FINAL INVOICE
   └── Invoice remaining 50% balance

Installation

# Install all sales extensions
docker compose exec odoo odoo \
  -i bi_product_dimension,jdx_product_configurator,customer_payment_method,bi_copy_sale_purchase_line,jdx_sale_order_photos \
  --stop-after-init -d odoo

# Install boto3 if not present (for photos)
docker compose exec odoo pip install boto3

Troubleshooting

Wizard Not Opening

  1. Verify product has category_type set (blinds/shutter/outdoor)
  2. Check module is installed and upgraded
  3. Verify user has sales permissions

PO Not Auto-Generated

  1. Check product has MTO + Buy routes enabled
  2. Verify vendor is set on product
  3. Check procurement rules exist

Photos Not Displaying

  1. Verify S3 credentials configured
  2. Check boto3 installed
  3. Verify bucket permissions allow GetObject

50% Invoice Not Created

  1. Verify customer signed via portal
  2. Check order was confirmed after signing
  3. Review Odoo logs for errors