How Can We Help?
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).
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.
- 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> - 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. - Start it:
docker compose up -d(run in that folder). - 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. - Apps. Install Sales, Inventory, Manufacturing and Purchase
(Connect installs any that are missing, but it can take a few minutes). - 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.
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:
- URL of Odoo, and its database name.
- API key from step 2, and a label.
- OpenJanela public URL (for Odoo) from step 3.
- Integration user (the OpenJanela user from step 4).
- 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. - 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.
- 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. - 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. - 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. - 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.)
- 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). - 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
- 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. - Pick the series, design family, design and size in the product selector, then build the
unit in the configurator. - 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. - 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 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.
- 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). - Create the link in Odoo. An Odoo administrator creates a technical user with an API
key. Nothing is installed in Odoo. - 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. - 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. - 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. - Users. Every Odoo salesperson who will build units gets an OpenJanela user with the
same e-mail address. - 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.