DocHub
How to set up the POS from scratch and deploy to the store

Setup & Deployment

Prerequisites

Requirement Details
Docker Docker Engine + Docker Compose v2
Python 3 For import script (stdlib only, no pip packages)
Disk space ~1 GB (Odoo image + PostgreSQL + data)
Browser Any modern browser for Odoo UI
Network LAN access to the machine running Odoo

Quick Start (Development / Testing)

1. Clone the Repository

git clone https://github.com/OmelasAI/captainvans-odoo.git
cd captainvans-odoo
chmod +x start-odoo.sh stop-odoo.sh

2. Start Docker Services

./start-odoo.sh

This starts:

  • Odoo 17.0 on port 8069
  • PostgreSQL 15 on port 5435

Wait ~30 seconds for Odoo to fully initialize.

3. Create the Database

  1. Open http://localhost:8069
  2. Fill in the database creation form:
    • Master Password: choose one and remember it
    • Database Name: captainvans
    • Email: admin
    • Password: admin
    • Language: Spanish
    • Country: Honduras
  3. Click Create Database (takes 1-2 minutes)

4. Install Modules

In Odoo, go to Apps and install in this order:

  1. Accounting (search “Invoicing” or “Accounting”)
  2. Inventory (search “Inventory”)
  3. Point of Sale (search “Point of Sale”)
  4. Website (optional — search “Website”)

Then install the custom module:

  1. Enable Developer Mode: Settings > General Settings > Activate Developer Mode (bottom of page)
  2. Go to Apps > Update Apps List
  3. Search for “Honduras SAR”
  4. Install it

5. Configure Company

Settings > Companies > Captain Van’s:

Field Value
Company Name Captain Van’s
Country Honduras
Currency HNL
Address West End, Roatan, Islas de la Bahia
Phone +504-XXXX-XXXX (real number)
Email (real email)
Tax ID (VAT) Client’s 14-digit RTN

6. Import Data

Update the path in import_data.py line 18:

DATA_DIR = Path('/path/to/captainvans-odoo/data')

Then run:

python3 import_data.py

This imports 2,505 products, 1,895 customers, 36 suppliers, 15 categories, and 3 tax rates. Takes ~2-5 minutes.

7. Configure POS

Point of Sale > Configuration > Point of Sale:

  • Name the POS (e.g., “Shop”)
  • Add payment methods: Cash, Credit Card
  • Set default customer (optional)
  • Configure receipt template with business logo

8. Testing Checklist

  • [ ] Login to Odoo at http://localhost:8069
  • [ ] Dashboard loads with installed modules
  • [ ] Open Point of Sale > New Session
  • [ ] Products appear in POS interface
  • [ ] Search for a product by name
  • [ ] Scan a barcode (if scanner connected)
  • [ ] Add items to cart
  • [ ] Look up a customer
  • [ ] Process a test transaction (cash)
  • [ ] View/print receipt
  • [ ] Receipt shows correct Honduras format
  • [ ] Configure payment methods
  • [ ] Add business logo
  • [ ] Create cashier accounts with PINs
  • [ ] Set up POS product categories for navigation

Production Deployment (At the Store)

Hardware Requirements

The store already has hardware. The POS needs:

  • Touchscreen terminal — Runs a browser pointing at Odoo
  • Barcode scanner — USB HID scanner (acts as keyboard input, works directly with browser)
  • Receipt printer — Thermal printer (connected to the machine running Odoo)
  • Cash drawer (optional) — Typically connected via receipt printer kick connector

Note: Odoo Community does not include the IoT box. Hardware connects directly to the machine’s OS/browser, not through Odoo’s hardware abstraction layer.

Deployment Steps

  1. Set up the store machine with Docker and Docker Compose
  2. Clone the repository and follow the Quick Start steps above
  3. Change default passwords:
    • Odoo admin password (currently admin)
    • Database master password
    • PostgreSQL password (update in docker-compose.yml)
  4. Enter real business data:
    • Real phone number and email
    • Real RTN (14-digit tax ID from SAR)
    • Real CAI (from SAR Form SAR-927)
  5. Activate the CAI in POS > Configuration > Honduras SAR
  6. Connect hardware:
    • Plug in barcode scanner (USB HID — should work immediately)
    • Configure receipt printer in the OS, then in Odoo POS settings
  7. Create employee accounts with PINs for each cashier
  8. Run acceptance testing with the store owner
  9. Set up automatic backups:
    # Add to crontab
    0 2 * * * docker exec captainvans-odoo-db pg_dump -U odoo captainvans > /backups/captainvans_$(date +\%Y\%m\%d).sql
    

Network Configuration

For local deployment, Odoo runs on the same machine or LAN:

  • Single machine: Access at http://localhost:8069
  • LAN access: Access at http://<machine-ip>:8069 from tablets/terminals on the same network
  • No internet required for POS operation (except initial Docker pull)

Security Considerations

  • Change all default passwords before going live
  • Restrict Odoo to LAN only (don’t expose port 8069 to the internet)
  • Set up daily database backups
  • Keep Docker images updated for security patches

Useful Commands

# Start / stop
./start-odoo.sh
./stop-odoo.sh

# View Odoo logs
docker logs -f captainvans-odoo

# Database shell
docker exec -it captainvans-odoo-db psql -U odoo -d captainvans

# Backup database
docker exec captainvans-odoo-db pg_dump -U odoo captainvans > backup_$(date +%Y%m%d).sql

# Restore database
docker exec -i captainvans-odoo-db psql -U odoo -d captainvans < backup_file.sql

# Check container status
docker ps | grep captainvans

# Restart Odoo (after module changes)
docker restart captainvans-odoo

Odoo XML-RPC API

For programmatic access (used by import script):

import xmlrpc.client

URL = 'http://localhost:8069'
DB = 'captainvans'
USERNAME = 'admin'
PASSWORD = 'admin'

common = xmlrpc.client.ServerProxy(f'{URL}/xmlrpc/2/common')
uid = common.authenticate(DB, USERNAME, PASSWORD, {})
models = xmlrpc.client.ServerProxy(f'{URL}/xmlrpc/2/object')

# Example: count products
count = models.execute_kw(DB, uid, PASSWORD, 'product.template', 'search_count', [[]])