Commit Graph
15 Commits
Author SHA1 Message Date
Samuel Degueldre 990b10aece [REF] point_of_sale, *: convert legacy modules to ES odoo modules
*: l10n_co_pos, l10n_fr_pos_cert, l10n_gcc_pos, l10n_in_pos,
l10n_sa_pos, pos_adyen, pos_discount, pos_epson_printer,
pos_epson_printer_restaurant, pos_hr, pos_loyalty, pos_mercury,
pos_restaurant, pos_restaurant_adyen, pos_restaurant_stripe, pos_sale,
pos_sale_product_configurator, pos_six, pos_stripe

We are about to refactor most of the Javasript code base of the point of
sale and related modules. In doing so, we will move a lot of files and
modernize the entire code-base. In order to avoid diffcult rebases,
their conversion to odoo-modules is done as a first step to avoid
getting lots of conflicts on files that were unindented, which marks the
entire file as being in conflict. Conflicts will occur during forward
ports but they will be easier to manage as the changes will be much
smaller in scope, and the author will have the context of the change
that causes the conflict in mind when dealing with it.

closes odoo/odoo#107621

Related: odoo/enterprise#34910
Signed-off-by: Trinh Jacky (trj) <trj@odoo.com>
2022-12-14 11:41:52 +01:00
lejeune quentin 0055e3cda0 [FIX] pos_six: Fix the use_strict in the timapi.js library
In V16.0 it is currently no longer possible to use the POS
if the pos_six module is installed
This bug is a combination of 3 factors

1. the new assets: a single file contains all the JS files, concatenated.

2. one of these files contains the instruction "use strict",
which stiffens the code of the function in which this is mentioned,
and which prevents certain syntactic approximations
(like calling a variable without seeing it declared, this case)

3. We added Sha1, in its file of course, but not in its own function,
the use strict then applies to the entire asset file

This reverts commit e08858e5ed02fe74160dabd6a91e1de88640956f.

closes odoo/odoo#105582

X-original-commit: 2426c26a0fbbb2d5e50203922cb64f9001ac73e0
Signed-off-by: Quentin Lejeune (qle) <qle@odoo.com>
2022-11-13 21:54:40 +01:00
lejeune quentin 2ea245d11e [FIX] pos_six: Declare variable into minified timapi.js
In the new version of Odoo you have to declare the
variables in the minified files

closes odoo/odoo#103789

X-original-commit: e08858e5ed02fe74160dabd6a91e1de88640956f
Signed-off-by: Quentin Lejeune (qle) <qle@odoo.com>
2022-10-25 11:07:08 +02:00
Adrien Widart 62f329d72f [FIX] pos_six: use same web socket
When a user cancels a six payment method, he won't be able to select
another six payment method

To reproduce the issue:
(Use demo data. Install l10n_be so your company is in EUR)
1. Create two Payment Methods PM01, PM02 that use the same payment
terminal (a Six one)
2. Add the methods to the POS
3. Start a POS session
4. Select a product and go to payment page
5. Select PM01, send it then remove the line
6. Select PM02, send

Error: Nothing happens (the terminal doesn't receive the instructions).
After several seconds, an error message is displayed "Transaction was
not processed correctly: apiConnectionLostTerminal"

When starting the POS, because there are two payments methods, both are
instanced, each one with its own instance of `PaymentSix`. However, in
the above case, both payment methods use the same terminal. Therefore,
when sending the transaction with the second method (step 6), the API
creates a second WebSocket (for the second instance of `PaymentSix`)
between the POS and the terminal while such a `WebSocket` already exists
(first instance of `PaymentSix`)

OPW-2679181

closes odoo/odoo#85791

X-original-commit: 2912e0d116ceece51bb1274633cbd22e09735232
Signed-off-by: Masereel Pierre <pim@odoo.com>
Signed-off-by: Adrien Widart <awt@odoo.com>
2022-03-04 10:08:42 +00:00
Joseph CaburnayandJacky 8fb53c53c3 [REF] point_of_sale,*pos*: remove Backbone.js, single loading request
This commit accomplishes multiple objectives:

1. Loading of model data for the POS UI is now done in single
request (with some exemptions).
2. Backbone.js is removed and is replaced by reactivity.js
authored by the js framework team.
3. Better organization of assets in the `__manifest__.py`

Data Loading
------------

One request per model -- that's always been how the data is loaded
in POS UI. Now, we move the aggregation of data to the backend which
simplified the data loading. In the frontend, data loading is
initiated in `load_server_data` which makes the single rpc call
to the `load_pos_data` defined in `pos.session` model.

There remains some rpc calls during loading but the number is
greatly reduced.

This change result to faster loading of the POS UI. However,
there is no more progress bar during the loading.

Notable entry points:

- .js: `PosGlobalState.load_server_data`
- .py: `pos.session.load_pos_data`

It is possible to make customizations in the loading, but is done in
several steps:

1. Override `_pos_ui_models_to_load` to include the new model to load.
2. Define `_loader_params_<model_name>` to define the `search_params` and
optional `context`.
3. Define `_get_pos_ui_<model_name>` to return the data that will be
included in the full `loaded_data`. Perform the organization in this method
whenever necessary.
4. Override `_pos_data_process` for further post processing. The final
form of `loaded_data` in this method will be sent to the frontend.

Removal of Backbone.js
----------------------

POS is no longer dependent from `Backbone.js`, but it's replaced by a
new dependency -- `reactivity.js`. It's invented by the js framework
team which will be available in owl v2.

The consequences of this change are the following:

1. The old `PosModel` is renamed to `PosGlobalState`.
2. The name of the other models are kept (except Paymentline which
is renamed to Payment).
3. The name `PosModel` is now used as the base model of the data models.
This is symmetric to our use of `PosComponent`.
4. The instance of `PosGlobalState` is made reactive in `Chrome` (the
root component). As a result, whatever mutation made in that instance,
`Chrome` will rerender. But rendering is batched so multiple mutations
in a single sychronous function call will only result to a single
render call.
5. `PosModel`s can be extended in the `Registries` the same way as we
extend the `PosComponent`s.
```js
// E.g.
Registries.Component.extend(Chrome, PosResChrome);
Registries.Model.extend(Order, PosResOrder);
```

Reorganization of assets declaration
------------------------------------

This is a simple change that replaced the explicit enumeration
of loaded .js and .xml files. Also, we now have regions in the
manifest separating:

1. Augmentations of dependencies
2. Assets for `point_of_sale.index`
3. Assets for the qunit test (soon will be improved)

Other notable changes
---------------------

- Automatic call to `Order.save_to_db` is batched.
- Instances of `devices.DeviceProxy` (`proxy`), `devices.JobQueue`
(`proxy_queue`) and `BarcodeReader` (`barcode_reader`) are moved
to `point_of_sale.env`. Together with `posbus` and `posMutex`
(previously `flush_mutex`).
- `ActivePrograms` is now passed a props.
- `cashier` is no longer saved to `localStorage`.
- `pos_cache` is overhauled.
- `cache` is taken out from `PosDB` to prevent infinite rendering
loop whenever `cache` is mutated. It's now called `CACHE` in
the `db.js` file.
- reactive version of `posmodel` is exposed globally when in debug mode.
This means that calling when calling a mutator, the UI will react.
- Added control buttons in the `ProductScreen` is sorted during `Chrome`
setup. As a result, we don't need to worry on the loading order of the
control buttons components.
- Model can be simply instantiated using `BaseModel.create(obj)`. This
takes into account the extensions.
- `pos_coupon`: rewards are now updated whenever set_order is called.
- Component unit tests were removed. It wasn't useful and it just blocks
the development. We'll be introducing better unit testing later.

closes odoo/odoo#82461

Related: odoo/enterprise#23344
Signed-off-by: Masereel Pierre <pim@odoo.com>
Co-authored-by: Jacky (trj) <trj@odoo.com>
2022-01-27 21:50:25 +00:00
Jorge Pinna PuissantandSamuel Degueldre 9a76719893 [FIX] *: undeclared variables and restricted globals
closes odoo/odoo#69988

Related: odoo/enterprise#17991
Signed-off-by: Géry Debongnie (ged) <ged@openerp.com>
Co-authored-by: Samuel Degueldre <sad@odoo.com>
2021-05-04 13:32:49 +00:00
Jorge Pinna PuissantandSamuel Degueldre f43a0814ae [IMP]*: configuration of ESLint for specific files
This commit will add the needed ESLint configurations on the JS files.
These configurations are added if the JS file uses a different
environment (serviceworker, node, etc) or if it uses a specific global
(google, ace, etc).

Co-authored-by: Samuel Degueldre <sad@odoo.com>
2021-05-04 13:32:49 +00:00
Antoine Prieels b17d943d98 [FIX] pos_six: Prepare for the certification
- The balance operation is performed automatically at the end of the
day but it doesn't print any receipt. We add the possibility to perform
the balance manually to get a receipt showing all the transactions of
the day.

- By default, DCC is set to true, but it requires a different
implementation. As we don't support it, Six asked us to changed the
variable to False, to make it clearer in case of debugging.

closes odoo/odoo#58360

X-original-commit: bc5ea7e3d3b694bbe88b14c10cd5cc80ca617e48
Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
Signed-off-by: Antoine Prieëls <aprieels@users.noreply.github.com>
2020-09-23 14:28:45 +00:00
Antoine Prieels 74d8c9649b [FIX] pos_six: 0.01€ difference in Six transactions
Some payments were 0.01€ lower on the payment terminal compared to the
amount showing in the POS.

closes odoo/odoo#57547

X-original-commit: 3fd0822f42c1a9dbe5b786a3a767da969431ddaa
Signed-off-by: Quentin Lejeune (qle) <qle@odoo.com>
Signed-off-by: Antoine Prieëls <aprieels@users.noreply.github.com>
2020-09-11 13:57:11 +00:00
Antoine Prieels 703178f09b [FIX] pos_six: Wrong amount sent to terminal
The Six TIM API considers all round amounts to be in minor units while
decimal amounts are considered actual amounts.

In #df01c71, we changed all payments to minor units, but we still had
problems with floating point precision.

E.g. Starting a payment of 4.60€ was converted to 460 in minor units
but due to floating point precision, the actual amount sent to TIM
was 460.00000000005. The terminal then started a payment of 460€
instead of 4.60€.

closes odoo/odoo#56495

X-original-commit: 00cc3ce75dd2efa60ad93b6ad6535020fa517781
Signed-off-by: Quentin Lejeune (qle) <qle@odoo.com>
Signed-off-by: Antoine Prieëls <aprieels@users.noreply.github.com>
2020-08-25 10:35:14 +00:00
Antoine Prieels e8dfbbd1c4 [FIX] pos_six: timapi.wasm file not loaded correctly
The timapi.wasm file was not loaded correctly in debug != assets
because the library tried to fetch /web/content/XXX-XXX/timapi.wasm,
which returned the full JS bundle.

We set the full path of the file in the library:
'/pos_six/static/lib/six_tim/timapi.wasm'

closes odoo/odoo#53739

X-original-commit: b21859a1550df08ac96719c16eb380cc71d81cee
Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
Signed-off-by: Antoine Prieëls <aprieels@users.noreply.github.com>
2020-06-26 13:09:51 +00:00
Antoine Prieels 3a2d698480 [IMP] pos_six: Upgrade TIM JavaScript SDK
Upgrade the TIM JavaScript SDK to the latest version (4.6.0).
The version Six gave us initially (3.8.1) didn't return any error
message. We now have some (ugly) error messages that could at least
help the cashier understand where the problem comes from (e.g.
"timCommunicationFailure", "cardholderStop", etc.).

closes odoo/odoo#52181

Taskid: 2267818
Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
2020-05-29 14:05:38 +00:00
Antoine Prieels 98d1c55090 [FIX] pos_six: Manual cancel and minor units
This commit fixes two bugs with pos_six:

- When the cashier manually clicked on "Cancel" or switched order,
the payment was correctly canceled, but the POS still showed the
error popup saying that the transaction was not processed
correctly.

- The TIM API manages differently rounds amounts and amounts with
decimals. Sending an amount of 1 was considered as 0.01€, while an
amount of 1.01 was considered as 1.01€. To fix this, we always sent
the amount in minor units.

closes odoo/odoo#52102

X-original-commit: a5125b92c11bd9dbf1b536e1eb1b467be446718f
Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
2020-05-28 13:59:30 +00:00
Joseph Caburnay 4a46215cb2 [REF] pos_six: migration to OWL framework 2020-05-12 12:48:58 +00:00
Antoine Prieels 12fd8c37fd [ADD] pos_six: Six payment terminals with TIM
Deprecate MPD integration for Six payment terminals and replace it
with TIM because:
- MPD broadcasts connection messages to the network so having
  multiple terminals and MPD servers in the same network results
  in connection issues
- TIM has a JS SDK so it doesn't require an IoT Box.
- MPD supports only Yomani and Yoximo terminals while TIM also
  supports Ingenico.

closes odoo/odoo#46789

Taskid: 2188566
Related: odoo/upgrade#903
Related: odoo/enterprise#8994
Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
2020-03-23 09:29:52 +00:00