Open core: don’t reinvent the wheel — build your fenestration software on ours.

Skip to main content

If your company runs Odoo 19 for purchasing, stock, manufacturing and
accounting, OpenJanela can pass your customers, quotes and orders to it automatically. You keep
working in OpenJanela as you do today; Odoo receives what it needs as it happens.

Installing OpenJanela next to Odoo

This chapter is for the person who sets up the servers (your IT contact or OpenJanela support).
There is one OpenJanela; it runs on your own server, beside Odoo, and talks to Odoo over the
network. Nothing is installed inside Odoo: when an administrator presses Connect, OpenJanela
sets Odoo up through Odoo’s API. The steps are in order: 1 choose the layout, 2 get Odoo running,
3 make the two programs able to reach each other, 4 prepare OpenJanela, 5 connect.

Start here: which situation are you in?

OpenJanela works with Odoo 19 — Community or Enterprise, on your own server or
hosted by Odoo. Whatever you have today, the destination is the same five steps below; what
changes is where you start and which steps you skip:

Your situation today Where you start
No Odoo, and we do not want one Odoo is optional. Install OpenJanela
with the normal procedure and stop there: leave the Odoo tab empty and every OpenJanela screen
stays exactly as it is. Nothing else in this chapter applies to you.
No Odoo yet; we want both Do all five steps in order. Odoo 19
Community (free of charge) is enough; Enterprise is not required.
Odoo Community on our own server First check the version (in Odoo:
Settings, or ask your Odoo contact) — it must be 19. Then skip step 2
(Odoo is already running) and do steps 1, 3, 4 and 5. Because Odoo already holds your
products and customers, read Initial sync (below) before starting the sync: its dry
run shows, without writing anything, how your existing Odoo data and OpenJanela’s data
will be matched.
Odoo Enterprise on our own server Exactly the same as the Community
row above (check the version, skip step 2). Enterprise additionally lets OpenJanela pass the
Ordered status to Odoo (with the Pro edition of OpenJanela or better).
Odoo Online — we sign in at odoo.com OpenJanela runs on
your own server, reachable from the internet over HTTPS (step 1); Odoo cannot
host it. Skip step 2; in step 5 use the address, database name and API key from your Odoo.
The Odoo Online plan must allow the external API: the Custom plan does; the free
one-app plan and the Standard plan do not. If Connect reports that the server actions
could not be created, contact OpenJanela support.
Odoo.sh The same as Odoo Online: OpenJanela on your own
internet-reachable HTTPS server; skip step 2 and use the address, database name and API key
Odoo gives you.
An older Odoo (17, 18 or earlier) Not supported — OpenJanela
talks to Odoo’s version-19 API. Upgrade Odoo to 19 first (a normal Odoo upgrade), then
follow the Community row above.

Several companies? Plan on one Odoo database per company, each with its own
OpenJanela company. A single Odoo database shared by several companies is not supported yet;
ask OpenJanela support before planning that. And whatever the situation, expect the OpenJanela
desktop to change shape once connected: purchasing, receiving, inventory and shipping move to
Odoo and their OpenJanela screens are hidden (see Screens hidden when connected to
Odoo
, below).

Selling through dealers: the dealer container

OpenJanela can also serve a dealer network: dealers sign in to OpenJanela with
their own login, order the series you gave them, at the price you gave them, and see only
their own orders. This is the dealer container, and it is an OpenJanela-side
arrangement — nothing about it is installed in Odoo, whatever kind of Odoo you
have. It is built like this:

  • One OpenJanela server (one installation: WildFly, MySQL, the OpenJanela
    applications) holds two OpenJanela companies: the company that owns the master
    series catalogue, and your dealer container company, where the dealers live. Both
    must sit on the same server: the container reads the series list directly from the
    other company’s database, which only works within one installation.
  • The link between the two companies is set once, by OpenJanela support, in the
    container company’s preferences (the dealer container preference names the
    series-owning company).
  • Inside the container company an administrator creates each dealer as a partner of a
    dealer type, ticks Use Dealer Container, gives the dealer its login
    (Create user dealer), picks the series it may order (the list comes live
    from the series-owning company) and sets each series’ cost and price markup, and
    uploads the dealer’s logo.
  • Dealers need no Odoo of their own. Their login reaches OpenJanela only.

And in each Odoo situation? The dealer container itself is the same in every row
of the table above — Community or Enterprise, on your server or hosted by Odoo, or no
Odoo at all — because nothing about it touches Odoo. What the row decides is only how
your OpenJanela company (the one that also hosts the container, or sits beside it on
the same server) is installed next to your Odoo:

Your Odoo The dealer container
No Odoo Works on its own. Install OpenJanela once, with the two companies
on it; nothing in this chapter beyond the normal OpenJanela installation applies.
Fresh install of both (Community is enough) Install Odoo (step 2) and
OpenJanela as in the five steps; add the second, series-owning company and the container
preference on the same OpenJanela server.
Odoo Community or Enterprise on your own server Same five steps (skip
step 2). Community and Enterprise make no difference to the container; the only
Enterprise extra is the one already listed above (passing the Ordered
status).
Odoo Online or Odoo.sh OpenJanela — with both companies on it
— runs on your own internet-reachable HTTPS server; the container works the
same. Only your own company’s OpenJanela-to-Odoo pairing follows the Online/Odoo.sh
row above.

Orders from dealers and Odoo. A quote or order saved in the container company
follows the same Odoo rules as any other order of that company: if it is connected to Odoo,
the quotation is pushed to that company’s Odoo, its customer must exist there,
and purchasing happens in Odoo. One Odoo database per connected company, as above. Dealer
logins and series assignment are not Odoo users or Odoo products; Odoo never sees them.

Do not confuse the dealer container with simply having dealers as customers
(dealer prices and a dealer calendar on a customer) — that is the Dealers
section below.

Step 1. Choose where each program runs

Your Odoo Where OpenJanela runs
Odoo on your own server or a cloud server (recommended) On the same server, or a
second server next to it.
Odoo.sh or Odoo Online (hosted by Odoo) On your own server; Odoo cannot host
OpenJanela. OpenJanela must be reachable from the internet over HTTPS.

OpenJanela needs WildFly (the application server), MySQL and its OpenJanela databases.
Odoo needs Python and PostgreSQL (or, as below, Docker). The two do not conflict on one server.
For both together we recommend at least 8 CPU cores, 32 GB of memory and an SSD; with less
than 32 GB, give OpenJanela its own server. OpenJanela itself is installed with the normal OpenJanela
installation procedure from OpenJanela support; this chapter does not repeat it. Make sure the
OpenJanela web pages and the openjanela-rest-easy service are served on the address you will
give as the public URL (step 4).

Odoo Online
On Odoo Online, one thing is still unconfirmed: whether Odoo allows the server actions that
OpenJanela creates through the API. If Connect reports that the actions could not be created,
contact OpenJanela support.

Step 2. Install Odoo (self-hosted, with Docker)

Skip this step if you already have Odoo 19, or use Odoo.sh or Odoo Online. The simplest way to run
Odoo yourself is Docker. The commands below are for Ubuntu or Debian; replace the words in
<angle brackets> with your own values and choose your own passwords.

  1. Install Docker Engine and the compose plugin from Docker’s official package
    repository (follow Docker’s page “Install Docker Engine on Ubuntu” or “on
    Debian” — add the repository, then install
    docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin).
    Then allow your user to use Docker and log out and in again:

    sudo usermod -aG docker <your-user>
  2. Create the compose file. Make a folder (for example odoo19) and, in it, a file named
    compose.yaml:

    services:
    db:
    image: postgres:16
    environment:
    POSTGRES_USER: odoo
    POSTGRES_PASSWORD: <database-password>
    POSTGRES_DB: postgres
    volumes:
    - pg:/var/lib/postgresql/data
    odoo:
    image: odoo:19
    depends_on: [db]
    ports: ["8069:8069", "8072:8072"]
    environment:
    HOST: db
    USER: odoo
    PASSWORD: <database-password>
    extra_hosts: ["host.docker.internal:host-gateway"]
    volumes:
    - odoo-data:/var/lib/odoo
    volumes:
    pg:
    odoo-data:

    Port 8069 is the Odoo web site and 8072 its live-update channel. Keep the file private: it holds
    the database password.

  3. Start it: docker compose up -d (run in that folder).
  4. Create the Odoo database. In a browser open http://<server>:8069. Choose a
    master password (keep it safe), a database name, and the administrator’s login.
    Use as login an e-mail address that also exists as a user in OpenJanela: that is how
    OpenJanela recognises who is working when you start it from Odoo.
  5. Apps. Install Sales, Inventory, Manufacturing and Purchase
    (Connect installs any that are missing, but it can take a few minutes).
  6. Create the API key. Make (or choose) an Odoo administrator user for OpenJanela,
    open its preferences (Settings → Users, open the user, tab Account Security, or
    My Profile when signed in as that user), choose New API Key, name it
    “OpenJanela” and copy the key at once — Odoo shows it only once. Keep it
    like a password.

Backups. Back up the Odoo database regularly, for example
docker compose exec db pg_dump -U odoo <database-name> > odoo-backup.sql, and
keep copies off the server. Back up OpenJanela’s MySQL separately; the two are matched by the
document numbers OpenJanela stores.

Upgrades within Odoo 19. docker compose pull and then
docker compose up -d. Make a backup first.

Step 3. Let the two programs reach each other

Two directions must work:

  • OpenJanela to Odoo: the OpenJanela server must reach the Odoo address (the URL on the
    Odoo tab).
  • Odoo to OpenJanela: Odoo must reach OpenJanela’s public URL, to tell it at
    once when a quotation is confirmed. Your browser must reach both addresses as well.
Docker: “localhost” is not the server
Inside the Odoo container, 127.0.0.1 and localhost mean the container itself, not your
server. Do not use them in the public URL. Use the server’s name (for example
https://app.mycompany.com), or the server’s own network address, or
http://host.docker.internal:8080 (works with the extra_hosts line shown above).
Publish Odoo on the server’s network address (as in the compose file above, not only on
127.0.0.1) so that browsers on other computers can open it, and open the firewall for OpenJanela’s
port (8080, or 443 with HTTPS) from the Odoo server.

If Odoo cannot reach OpenJanela, nothing breaks: OpenJanela checks Odoo for confirmations every
5 minutes, so changes made in Odoo just arrive later. Fixing the address makes them arrive at
once.

Use HTTPS. We recommend a reverse proxy (nginx or Caddy) on port 443 in front of both
programs, with two names, for example erp.mycompany.com for Odoo and app.mycompany.com
for OpenJanela. Then use these names everywhere below. With Odoo.sh or Odoo Online, OpenJanela must be
reachable from the internet by HTTPS.

Step 4. Prepare OpenJanela

  • OpenJanela and its databases are installed and working, and the web configurator and the
    openjanela-rest-easy service answer on the public address.
  • The company’s tables are InnoDB (see the note under Connecting to Odoo).
  • For the desktop and production screens, each workstation needs Oracle Java 8 with Java Web
    Start
    .
  • Create an OpenJanela user for the integration and for each salesperson who will work from
    Odoo (same e-mail as their Odoo login). An OpenJanela administrator will name the integration user in
    step 5; it works in the background and must be a normal OpenJanela login.

Step 5. Connect

As an OpenJanela administrator, open Company Preferences → Odoo, press Edit and fill in the
fields listed in the next section, Connecting to Odoo:

  1. URL of Odoo, and its database name.
  2. API key from step 2, and a label.
  3. OpenJanela public URL (for Odoo) from step 3.
  4. Integration user (the OpenJanela user from step 4).
  5. Press Connect and read the result: the custom fields, the actions
    Add OpenJanela item and Edit in OpenJanela, the Production in
    OpenJanela
    action with the OpenJanela production menu, the picture views,
    the automations, the installed apps, the Make-to-Order route and the settings, with no
    error. If it
    stops early, press Connect again; every step is safe to repeat.
  6. Test: save a quote in OpenJanela and check that a quotation appears in Odoo; then, in Odoo,
    use Add OpenJanela item on a quotation.

For Odoo.sh and Odoo Online the steps are the same, without step 2 (use the address, database and
API key Odoo gives you).

Connecting to Odoo (administrator, one time)

Open Company Preferences and go to the Odoo tab. Press Edit and fill in:

  • Label — any name you like for this connection.
  • URL — the address of your Odoo, for example https://odoo.mycompany.com.
  • Database — the name of your Odoo database.
  • API key — the key of a technical Odoo user created for OpenJanela.
  • OpenJanela public URL (for Odoo) — the address Odoo uses to open OpenJanela, for
    example https://app.mycompany.com. Needed for the Add OpenJanela item and
    Edit in OpenJanela actions (see Working from Odoo). It must start with
    http:// or https:// and contain no spaces, quotes or %; otherwise
    Connect refuses it and saves nothing.
  • Integration user — the OpenJanela user that places and confirms the orders
    coming from Odoo, in the background (see Production from Odoo).

Before you connect: InnoDB database required. Working from Odoo saves the order, its
items and the cart together, and undoes all of it if a step fails. That only works when the
company’s OpenJanela database stores these tables as InnoDB: orders,
order_items, orders_cart, order_items_cart, design_job_item_cart and
partner. On an older database still using MyISAM, a failed launch can lose the user’s
cart and a failed save can leave a half-saved quote. Ask your OpenJanela support to convert these
tables before you use Add OpenJanela item; OpenJanela-first working is not affected.

Press Connect. Only an OpenJanela administrator can connect or press
Retry failed; other users can see the status but get a “not allowed” message.
The Odoo API key should belong to an Odoo administrator. OpenJanela checks the connection and creates 23 custom fields in
Odoo (order, item, version, cost, options, size, status and so on) that it needs to keep your
documents matched, plus two picture views (the drawing on the quotation form and on the
printed quotation). It also sets Odoo up itself: it installs the apps it needs (Sales, Inventory, Manufacturing,
Purchase; an install can take a minute, and Connect may run for several minutes on a fresh Odoo; if it ends early,
press Connect again, every step is safe to repeat), switches on the Make-to-Order route and, where your Odoo offers it,
product images on quotations. Each of these steps is listed in the result message, and a step that fails
(for example because the API user is not an administrator) is shown without stopping the others. The status block under the form shows whether you are connected, how many
fields exist, and how many documents are waiting, failed or done, plus the last error if there
was one. Refresh reloads it. Retry failed puts failed documents back in the queue.

Initial sync (administrator, after Connect)

The Initial sync section of the Odoo tab matches what OpenJanela and Odoo already hold, once,
before you start working. Only an OpenJanela administrator can use it; other users get a
“not allowed” message.

  1. Dry run. Press Dry run. Nothing is written to Odoo or to OpenJanela; it can take a
    few minutes. The counts show what the sync would do. Parts: Create in Odoo (only in
    OpenJanela), Equal (will be linked), Differ (OpenJanela overwrites name, cost, unit or
    category in Odoo), Listed only (only in Odoo, never brought into OpenJanela),
    Conflict (two codes that differ only in case or blanks, or a code repeated in Odoo: not
    synced, see the list under Conflicts), Skipped (sized items made by the configurator).
    Families become categories under OpenJanela in Odoo. Customers and
    Suppliers come from Odoo: Create, Link, Update, Equal, Skip,
    and Listed only for OpenJanela partners that no Odoo contact matched (create them in Odoo if you
    need them). Units shows the units of measure without a match: they become Units in Odoo,
    so map them first. Supplier stops counts parts that have no supplier, or whose supplier is not in Odoo; a bill of
    materials would stop on them.
  2. Start sync. Enabled when the dry run found something to create, update or link. It asks
    once more with the main counts (“This writes to Odoo and OpenJanela: … Continue?”)
    and then runs on the server in the background.
  3. Progress. The Progress rows show, per kind, how many records were planned, done,
    skipped, failed and are still pending, and the last failures. They refresh every 5 seconds while the
    sync runs; you can close the window and come back later: the tab shows the latest run when it opens.
    Refresh reads it again at any time.
  4. After a stop or failures. A run stops when Odoo cannot be reached or a server restart
    interrupts it. Press Dry run again and then Start sync: what was already sent shows as
    Equal and is only linked, so nothing is created twice.

What is sent to Odoo, and when

In OpenJanela you… In Odoo you get
Save a customer Nothing is sent. Customers and suppliers are created and
edited in Odoo
and come to OpenJanela from there; the columns that only OpenJanela has are
filled in OpenJanela. A quote whose customer is not yet in Odoo is not sent: the Odoo tab shows
it as failed with Customer not in Odoo: create it in Odoo first; it will reach OpenJanela from
there.
Create the customer in Odoo, then press Retry failed.
(nothing: a customer or supplier is created in Odoo) Once the first initial
sync
has been run, a new Odoo customer or supplier is created in OpenJanela within about
five minutes, with the same defaults as the initial sync. A partner that is already in OpenJanela is
never changed this way: edits made in Odoo afterwards do not reach OpenJanela.

(Contacts and addresses: see How do I add, edit or change a
contact or an address when connected to Odoo?
) A supplier that
is only on a product’s vendor list (never bought from) is not picked up automatically; run the
initial sync to bring it in.
Create or save a part (stock record, parts screen, import, cost updates) Once
the first initial sync has been run, the part is sent to Odoo a few seconds after you save:
a new part becomes an Odoo product with its part family as the category; for a part already in
Odoo only the changed name, cost, unit or category is written (OpenJanela wins; a cost of zero
never clears Odoo’s cost). Parts created any other way are picked up within about five
minutes. Products that exist only in Odoo are not brought into OpenJanela. Sized items made by
the configurator (sealed units, glass, grids) go to Odoo with the bill of materials instead.
Save a quote An Odoo quotation with one line per unit: item number,
quantity, price, cost, options, size and the drawing. Each configured unit becomes its own
Odoo product. A part line (stock part, service, delivery, kit) uses that part’s own Odoo
product
once the first initial sync has been run; a line with no part, or a part from a
supplier’s catalogue, uses the shared product OJ-SERVICE.
Remove an item and save Its line is removed from the quotation and its product is
archived. If the Odoo order is already confirmed, Odoo does not allow removing a line, so the
line stays with quantity zero instead.
Place the order The Odoo order is confirmed and one bill of
materials
is created per unit. Components are matched by stock code; a code Odoo does not
know is created as a product from the OpenJanela part (labour parts become service
products; codes without a part record become bare products and are counted on the Odoo tab).
A component that cannot be resolved at all leaves the bill of materials incomplete: Odoo
refuses the confirm with a note until the part is fixed. Every part must also have a
supplier that exists in Odoo
(labour and service parts excepted): if one does not, nothing of
that bill of materials is written and the note lists each part, for example Parts without a
supplier in Odoo: BEAD-01 (no supplier)
. Give the part a supplier in its stock record, make
sure that supplier exists in Odoo, then save the quote again or press Retry failed. Odoo’s
make-to-order then raises the manufacturing orders, and purchase orders for the
components that have a vendor and the Buy route in Odoo.
Edit a placed order The lines and bills of materials are brought up to date. A unit
you remove keeps its line on the confirmed Odoo order, set to zero quantity.
Confirm the order The Odoo order status becomes confirmed.
Revert the order to a quote The Odoo order goes back to a quotation; its open
manufacturing orders and draft purchase requests are cancelled. OpenJanela refuses the revert
if an Odoo manufacturing order is already in progress.
Cancel or delete the order (quote, order or confirmed order) The Odoo order is
cancelled, with its open manufacturing orders and draft purchase requests.

Dealers

A dealer in OpenJanela is a customer company you sell through: it gets its own dealer
prices (a cost and price markup per series), its own delivery calendar (own holidays and
weekends in scheduling), and its customers can be tied to it. Connected to Odoo, dealers are
added in two moves: the company is created in Odoo, and the dealer part of it is
set in OpenJanela. (For dealers with their own login who order in OpenJanela
— a dealer network — see Selling through dealers: the dealer container in
the installation chapter.)

  1. Create the company in Odoo as a normal customer (its name, address, e-mail,
    phone). After the first initial sync it reaches OpenJanela within about five minutes, or
    with the next initial sync if you prefer to see it in the dry run first. Do not create it
    in OpenJanela: partners are created and edited in Odoo (see the table above).
  2. Make it a dealer in OpenJanela. An OpenJanela administrator opens the partner in
    OpenJanela and changes its type to Dealer. This type is an OpenJanela-only
    column: Odoo never sends it, later edits made in Odoo (address, e-mail, phone) never
    overwrite it, and OpenJanela never sends it back. Then fill in the rest in OpenJanela as
    for any dealer: the series markups, the delivery calendar, and the sales reps and
    customers that belong to it.

What Odoo sees. To Odoo the dealer is simply a customer. Quotations you build for it
are ordinary Odoo quotations; the dealer price is already inside the line price OpenJanela
writes (the OpenJanela net price for that dealer). The dealer relationship — markups,
calendar, its customers — lives only in OpenJanela.

What does not run while connected. OpenJanela does not raise purchase orders or
send EDI order files for dealer scheduling: purchasing has moved to Odoo (see Screens
hidden when connected to Odoo
). Everything else a dealer is used for in OpenJanela
works as before.

Glass and sealed units

Whether detailed glass goes to Odoo at all is a company preference (Send detailed
glass to Odoo
in Company Preferences, off by default). Turn it on for an Odoo company.
Connected to Odoo, OpenJanela buys nothing itself: it raises no purchase requisitions, glass
included, and refuses purchase orders and receipts (see Screens hidden when connected to
Odoo
below). With the preference off, Odoo gets no per-size purchasable glass products
either, so nobody orders the glass. With the preference on, glass works as described below.

Glass is bought, not stocked — and every piece is cut to the exact size OpenJanela
calculates from the geometry of the design. So instead of one Odoo product per glass type,
OpenJanela keeps one Odoo product per glass type and size: a sealed unit whose bill of
materials line reads Clear IG Unit, 31 x 43 in becomes an Odoo product named
Clear IG Unit 31 x 43 in, with the size in its internal reference as well. Each of these
products is a consumable that is not stocked, is purchasable, carries the
Buy and Replenish on Order (MTO) routes, and is linked to the glass supplier from
the OpenJanela bill of materials as its vendor.

When the sales order is confirmed in Odoo, make-to-order raises the manufacturing order, finds
no stock of each glass size (there never is — every piece is bought for the job) and raises
a draft purchase order to the glass supplier at the exact calculated size. Because the size
is part of the product name and reference, it travels onto the purchase order, the
supplier’s paperwork and the receipt. A later job that needs the same size reuses the same
product, so your Odoo product list grows only with sizes actually ordered. The lites and grids
that make up a sealed unit stay inside it — only the finished unit is purchased; a single
lite that is not part of a sealed unit is treated the same way, at its own size.

Screens hidden when connected to Odoo

When connected to Odoo, the desktop shows only Order Entry (for testing), Setup and
reports; everything else is done in Odoo. The left menu keeps Customer Service (with only
Customer Management and Document Management, the order entry) and Administration and Setup. The CRM items,
the Task Calendar and the Service, Sales, Marketing, A/R, Production, Shipping, Receiving,
Purchasing (including Supplier Management) and Inventory menus are gone. After login you land on
Customer Management; to start a test order, pick the customer there, then Documents,
New.

Inside order entry these are hidden too: the RFQ button, the order requisition links and
the Requisitions tab of an order, and the Shipping and Invoices buttons of the
documents list. The batch Requisitions tab (desktop and web), Revert POs and the
campaign Requisitions button are hidden as well, and finalizing a batch no longer creates or
e-mails purchase orders.

Suppliers are added and changed in Odoo and arrive in OpenJanela automatically. Parts are still
edited in OJ Setup > Parts and sent to Odoo.

The server refuses purchasing, receiving and stock actions wherever they are started, with the
message This company is connected to Odoo; do them in Odoo. If the check cannot be made the
action is refused too: try again, or ask your administrator.

Item numbers

Item numbers follow OpenJanela. Quote items are renumbered when the quote is saved, exactly as
in OpenJanela today; once an order is placed the numbers stay fixed. Odoo shows the same numbers.

If Odoo is down

Nothing fails in OpenJanela: you can keep saving, placing and reverting. Documents wait in a
queue and OpenJanela tries again with growing pauses, for up to about an hour. When Odoo is back
they are sent. If some ended as failed, press Retry failed on the Odoo tab. After the
OpenJanela server is restarted, the queue resumes at the next save or when you open the Odoo tab.

Working from Odoo

If your Odoo administrator has connected OpenJanela with a public address (the
OpenJanela public URL on the Odoo tab), two entries are added to Odoo for you: Add OpenJanela
item
on the quotation’s action menu, and Edit in OpenJanela on each
OpenJanela line. You need an OpenJanela user with the same e-mail address as your Odoo
login.

Add an item to a quotation

  1. In Odoo, open (and save) a quotation that has a customer, then choose Add OpenJanela
    item
    from its action menu. OpenJanela opens in a new tab.
  2. Pick the series, design family, design and size in the product selector, then build the
    unit in the configurator.
  3. Press Save. OpenJanela writes the line into the quotation first (a few seconds), then
    returns you to the Odoo quotation and closes its window by itself; if your browser keeps the
    window open, it shows Back to Odoo, and if Odoo is slow it says the line will show within
    a minute.
  4. The quotation already shows the line with the price, quantity and a small drawing in the
    lines grid (the product also gets the drawing as its picture). The quotation’s origin reads
    OpenJanela followed by the quote code, and the chatter notes
    “OpenJanela item #2 saved” with the quote code.

Items are numbered by OpenJanela in the order they are saved (#1, #2 …); an item added
from Odoo takes the next number of that quotation’s OpenJanela quote. The Odoo line price is
the OpenJanela net price and cannot be changed in Odoo.

The window did not close
The OpenJanela tab does not close itself in every browser. That is normal: the item is already
saved. Close the tab yourself and refresh Odoo. If the line does not appear after a minute,
refresh again; the Odoo tab in Company Preferences shows documents still waiting.

Change an item

On the quotation, select a line and choose Edit in OpenJanela. The action is offered on every
line but only works on lines created by OpenJanela. The saved item opens
directly in the configurator with the same item number. Change it and press Save; the
same Odoo line is updated (price, description, drawing) and the chatter gets one note.

Your unsaved cart

OpenJanela keeps one cart per user. When you start from Odoo, your cart becomes a copy of
that quotation’s OpenJanela quote, and an unsaved cart you already had is replaced. In that
case OpenJanela first shows “Your unsaved OpenJanela cart was replaced by this
quotation”
; press OK. Save what you are working on in OpenJanela before you
use Add OpenJanela item.

Because there is one cart, work on one Odoo quotation at a time. Starting OpenJanela
from a second quotation (or opening another order in the OpenJanela desktop) takes the cart over;
the first window then refuses to save with “Not saved: Your OpenJanela cart no longer
belongs to this quotation”
, so nothing is written into the wrong quotation. Go back to
Odoo and choose the action again on the quotation you want.

Who owns the quotation header

On a quotation you started in Odoo, Odoo owns the header: customer, customer
reference, note and expiration are never written by OpenJanela. OpenJanela only adds and
updates its own item lines. On a quotation that was created by OpenJanela, OpenJanela writes the
header until the first time you launch it from Odoo (Add or Edit); from then on Odoo owns it.

Once a quotation started in Odoo is confirmed in Odoo, OpenJanela no longer changes its
lines: a later save of its OpenJanela quote (for example from the desktop) is not sent, and the
quotation’s chatter says “OpenJanela quote … was not synced: this quotation is
confirmed in Odoo”
. Set it back to a quotation in Odoo first if it must change.

If OpenJanela refuses

Message What to do
This OpenJanela launch is not valid. Go back to Odoo and try again. / This link has
expired or was already used. / This OpenJanela launch was already used. Go back to Odoo and
choose the action again.
The link works once and only for one minute. Go back to the
quotation in Odoo and choose the action again; do not reuse an old tab or bookmark.
This OpenJanela launch is not open. / This quotation was saved from another OpenJanela
launch. Go back to Odoo and choose the action again.
Start again from Odoo with the action on
the quotation.
Not saved: Your OpenJanela cart no longer belongs to this quotation. Go back to Odoo and
choose the action again.
Another quotation (in another window) or the OpenJanela desktop
took your one cart over after you started. Nothing was saved. Close this window and choose the
action again on the quotation in Odoo. The same appears as “Not saved: This OpenJanela launch
is not open” when you started from a second quotation.
Nothing was saved. Save the item in the configurator first. Press
Save in the configurator before finishing.
This quotation is already confirmed. / This quotation can no longer be changed. If the quotation is confirmed in Odoo, set it back to a quotation in Odoo first, then choose the
action again. For “can no longer be changed” ask your administrator.
This quotation has no customer. Choose the customer in Odoo, save, and try
again.
This line was not created by OpenJanela. / This line does not belong to this
quotation.
Only OpenJanela lines can be edited with Edit in OpenJanela; choose
one of them.
The OpenJanela quote of this quotation is no longer a quote. / no longer exists. /
This OpenJanela item is no longer on the quote.
The quote was placed, cancelled or
changed in OpenJanela. Check it there; ask your administrator if it should be restored.
The OpenJanela account number of this customer belongs to another Odoo customer. Two Odoo customers point to one OpenJanela account. Ask your administrator to correct the
account number.
OpenJanela could not open this quotation. Go back to Odoo and try again. A general failure, or no OpenJanela user has your Odoo e-mail address. Try again; if it
persists ask your administrator to check your OpenJanela user.
OpenJanela could not open this line for editing. Go back to Odoo and choose
Edit in OpenJanela again; if it persists, tell your administrator. A status code may follow the
message.

Not yet available: importing existing Odoo customers and products, two-way customer and part
synchronisation, inventory in Odoo and service-product mapping come in the next releases.

Production from Odoo

When OpenJanela runs production for your Odoo orders, each side does its own half.
Odoo: quotations and confirmations, all dates (production start and end, shipping,
delivery), the purchase orders for components, and the delivery itself. OpenJanela:
the order record for the factory, batches, optimization, cut lists and labels, the shop-floor
screens and quality control — and it reports each line’s progress back to the Odoo
order as it happens.

Set-up (administrator)

One field on the Odoo tab in Company Preferences belongs to this flow: the
Integration user — the OpenJanela user that works in the background: orders
confirmed in Odoo are placed in OpenJanela by this user, and its name appears on them as
ordered and confirmed by. It must be a normal OpenJanela login.

Fill them in and press Connect again: the new pieces (the production action and menu,
the drawing column on the printed quotation) are added without touching the existing ones.

Confirm the order in Odoo

Press Confirm on the Odoo quotation as usual. Within seconds — or within
5 minutes when Odoo could not reach OpenJanela — the order is placed and
confirmed in OpenJanela
with all the checks the desktop runs. The Odoo order’s
OJ status goes placed, then confirmed, and the chatter notes
“OpenJanela status: confirmed”. Odoo’s make-to-order raises the manufacturing
orders and purchase orders as before.

If OpenJanela refuses the order, nothing is placed: the reason appears as a note on
the Odoo order (for example a customer on credit hold, a missing shipping route, or a bill of
materials that could not be completed) and the OJ status shows refused. A refusal is
never retried automatically: fix the cause in OpenJanela, then in Odoo choose
Cancel, Set to Quotation and Confirm again — the order is processed
as usual.

Dates come from Odoo

Production start and end come from the Odoo manufacturing orders, the ship date from
the outgoing delivery’s scheduled date and the delivery date from the
order’s commitment date. When any of these change in Odoo, OpenJanela follows
within seconds or 5 minutes and notes the change on the Odoo order; a change that sets the same
dates writes nothing. An order that got its dates from Odoo cannot be re-dated in
OpenJanela
: the desktop and the server answer “The dates of this order are managed
in Odoo. Change them in Odoo.”
Items and assemblies that are already in a
batch
(or already on a shipping manifest) keep their production dates — work that is
on the floor is not moved — and the Odoo note names them. Disconnecting Odoo on the Odoo
tab lifts the restriction again.

The line status on the Odoo order

Odoo line status Set when
in_production the first scan of a unit of the line at any station
glazed the completed scan at a station marked as a glazing station
ready_to_ship the QC accept / stored scan at the end of the line

A line with several units follows its least advanced unit: it is
ready_to_ship only when every unit is. Each change adds one chatter note with the
station and the time, and the order header follows its lines. Statuses beyond
ready_to_ship (in shipping, loaded, shipped, delivered) come from Odoo: OpenJanela does
not ship, and when the Odoo delivery is validated the OpenJanela order is set to
shipped — partially shipped when only some deliveries are done — with its status
history.

Production in OpenJanela

Two entries open OpenJanela production from Odoo: Production in OpenJanela in the
action menu of a confirmed order (select several orders in the list to take them together), and
Sales → Orders → OpenJanela production for the whole list. Both open
in the browser — no Java, no Web Start, nothing to install. OpenJanela signs you
in (your OpenJanela user is matched by e-mail) and opens Create Batch, pre-filtered by
the selected orders; the menu opens the Batch List instead. Create the batch, then
finalise and release it in the Batch List, as you do today.

The browser link works once and only for a few minutes: choose the action in Odoo
again instead of re-opening an old tab. If OpenJanela cannot open web production, the page asks
the administrator to set the OpenJanela public URL on the Odoo tab. Desktop users keep
the full client as before: start it from its desktop shortcut and open Production Management,
Create Batch.

The drawing on the printed quotation

Connect also adds a drawing column to the printed Odoo quotation (and sales order): each
OpenJanela line prints its drawing in a narrow column left of the line text. This works on
every Odoo edition, Community included.

Known limits

  • Orders confirmed in Odoo before the connector was connected (or more than 30 days
    ago) are not picked up; place them in OpenJanela as before.
  • The legacy Swing Create Batch screen (desktop client) cannot be pre-filtered; the web
    screens opened from Odoo always are.
  • Odoo never retries a failed notification; the 5-minute check covers anything missed, so
    an event can take up to 5 minutes when Odoo cannot reach OpenJanela.

Invoices, payments and deposits

Invoices and customer payments are made in Odoo; deposits are taken in OpenJanela and sent to
Odoo. See How do I invoice an order when OpenJanela is connected to
Odoo?
and How do I take a deposit when OpenJanela is connected to
Odoo?
The production files come in a later release.

Getting started as an Odoo company

If your company already runs Odoo and wants OpenJanela as the window and door engine behind
it, this is the path. Steps 1 to 4 take a day; step 5 is the real project.

  1. Run OpenJanela. OpenJanela is installed next to your Odoo (on the same server when
    Odoo is self-hosted, on a separate one when Odoo is hosted by Odoo), or we host it for you. It
    keeps its own database, which must use InnoDB tables (see Before you connect above).
  2. Create the link in Odoo. An Odoo administrator creates a technical user with an API
    key. Nothing is installed in Odoo.
  3. Connect. An OpenJanela administrator opens Company Preferences > Odoo,
    enters the Odoo address, database and key, and presses Connect. OpenJanela adds its
    fields to Odoo and the Add OpenJanela item entry to the quotation menu.
  4. First synchronisation. On the Odoo tab press Dry run to see what will happen,
    then Start sync (see Initial sync above). Parts go one way, from OpenJanela to Odoo;
    products that exist only in Odoo are listed, not brought in. Customers and suppliers come from
    Odoo into OpenJanela. Existing records are matched by code. After this first sync, every part you
    save in OpenJanela is sent to Odoo automatically.
  5. Set up the catalogue. Series, options, glass, rules, pricing and costing tables, and
    the configurator data on each part are set up in OpenJanela with our implementation team.
    A company already on OpenJanela has this done.
  6. Users. Every Odoo salesperson who will build units gets an OpenJanela user with the
    same e-mail address.
  7. Work. Quote in Odoo as before. On a quotation choose Add OpenJanela item, build
    the unit, press Save, and the priced line with its drawing is on the quotation. Confirm the
    order in Odoo; OpenJanela runs production.

Steps 6 and 7 are described in Working from Odoo above. OpenJanela-first working (quote in OpenJanela, Odoo keeps up) is
also available.