Wednesday, May 26, 2021
12 changes · master
New functionality added to Odoo
A new bridge module lets businesses run email and SMS marketing campaigns directly on sale subscriptions. Campaigns are limited by default to active subscriptions, helping teams target current customers more accurately.
Enhancements to existing features
The Helpdesk mail plugin can now display its add-in text in the user's preferred language, including Outlook-specific labels. This improves the experience for international users by making helpdesk tools easier to understand and use in their local language.
Original PR description
Add translation support so that the addons could be displayed in the user's language. This is done by overriding the _prepare_translations method of the main controller in order to add helpdesk specific translations. Task-2480075 COM-PR: odoo/odoo#69118 PLUGIN-PR: odoo/mail-client-extensions#6
Resolved issues and error corrections
This update fixes several issues in Documents spreadsheets, including formula handling, chart display, clipboard behavior, and undo/redo consistency. These changes make spreadsheets more reliable for everyday business workflows and reduce confusion from incorrect errors, missing options, or display glitches.
Original PR description
forward port multiple fixes: [FIX] core: show error explicit message from compiler on cell … [FIX] compiler: add missing tests for function arguments compilation [FIX] Compiler: Reject invalid…
Features or functions removed from Odoo
The unused Belgian sales Intrastat module has been removed because its functionality is no longer needed after a previous change. This reduces maintenance overhead without affecting current business workflows.
Original PR description
Since commit https://github.com/odoo/enterprise/commit/4a9dd59290d196b52df453f111092f4a0c5b722d, "l10n_be_sale_intrastat" module is useless. Task: 2481340
Miscellaneous changes
account_intrastat: MemoryError on install when lots of move lines Installing account_intrastat on a database with a lot of account.move.line could lead to a MemoryError, in addition to take a lot of time (for no reason) when the ORM was computing the fields intrastat_product_origin_country_id We have facing the issue on upgrade request # 14613 (https://upgrade.odoo.com/web#id=14613&action=150&model=upgrade.request&view_type=form&cids=1&menu_id=107) ```python Traceback (most recent call la
Original PR description
account_intrastat: MemoryError on install when lots of move lines Installing account_intrastat on a database with a lot of account.move.line could lead to a MemoryError, in addition to take a lot of…
account_intrastat: MemoryError on install when lots of move lines
Installing account_intrastat on a database with a lot of account.move.line
could lead to a MemoryError, in addition to take a lot of time (for no reason)
when the ORM was computing the fields
intrastat_product_origin_country_id
We have facing the issue on upgrade request # 14613 (https://upgrade.odoo.com/web#id=14613&action=150&model=upgrade.request&view_type=form&cids=1&menu_id=107)
```python
Traceback (most recent call last):
File "/home/odoo/src/odoo/14.0/odoo/service/server.py", line 1198, in preload_registries
registry = Registry.new(dbname, update_module=update_module)
File "/home/odoo/src/odoo/14.0/odoo/modules/registry.py", line 89, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/home/odoo/src/odoo/14.0/odoo/modules/loading.py", line 451, in load_modules
force, status, report, loaded_modules, update_module, models_to_check)
File "/home/odoo/src/odoo/14.0/odoo/modules/loading.py", line 348, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "/home/odoo/src/odoo/14.0/odoo/modules/loading.py", line 198, in load_module_graph
registry.init_models(cr, model_names, {'module': package.name}, new_install)
File "/home/odoo/src/odoo/14.0/odoo/modules/registry.py", line 420, in init_models
env['base'].flush()
File "/home/odoo/src/odoo/14.0/odoo/models.py", line 5436, in flush
self.recompute()
File "/home/odoo/src/odoo/14.0/odoo/models.py", line 5895, in recompute
process(field)
File "/home/odoo/src/odoo/14.0/odoo/models.py", line 5879, in process
field.recompute(recs)
File "/home/odoo/src/odoo/14.0/odoo/fields.py", line 1153, in recompute
self.compute_value(recs)
File "/home/odoo/src/odoo/14.0/odoo/fields.py", line 1175, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/14.0/odoo/models.py", line 4061, in _compute_field_value
getattr(self, field.compute)()
File "/home/odoo/src/enterprise/14.0/account_intrastat/models/account_move.py", line 43, in _compute_origin_country
line.intrastat_product_origin_country_id = line.product_id.product_tmpl_id.intrastat_origin_country_id
File "/home/odoo/src/odoo/14.0/odoo/fields.py", line 2483, in __get__
return super().__get__(records, owner)
File "/home/odoo/src/odoo/14.0/odoo/fields.py", line 996, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/14.0/odoo/models.py", line 3069, in _fetch_field
self._read(fnames)
File "/home/odoo/src/odoo/14.0/odoo/models.py", line 3157, in _read
self.env.cache.update(fetched, field, values)
File "/home/odoo/src/odoo/14.0/odoo/api.py", line 808, in update
field_cache.update(zip(records._ids, values))
MemoryError
```
Forward-Port-Of: odoo/enterprise#18512Studio users can now choose whether new records can be created directly from avatar-style multi-select fields. This helps businesses prevent unintended data creation while keeping creation available where it is useful.
Original PR description
PURPOSE Allow to disable/enable creation from many2many_tags_avatar and many2many_avatar_user. SPEC Add disable creation options on many2many_tags_avatar and many2many_avatar_user widget. TASK 2451204
VoIP now avoids showing a misleading error when a user hangs up before a call is fully connected. It also recognizes an additional busy status, helping call feedback better match what actually happened.
Original PR description
- No longer display an error when the user hangs up on their own before the session is established. This error was confusing enough that some people reported it as a bug. - Add '600 Busy Everywhere' to recognized status codes.
Contacts linked to signature requests can no longer be deleted, even if the request is archived. This prevents signed documents from losing signature information and helps preserve document integrity for audit and record-keeping purposes.
Original PR description
Prevent any contact linked to a sign request(archived or not) to be deleted Before this commit: when deleting a contact (res.partner) that had signed some documents, the signature will disappear from the document (sign.Document). taskid: 2520279
forward port multiple fixes:
[FIX] core: show error explicit message from compiler on cell …
[FIX] compiler: add missing tests for function arguments compilation
[FIX] Compiler: Reject invalid argument types on functions …
[FIX] functions: accept only ranges on criteria_range args …
[FIX] assistants: completely hide composer assitants when empty …
[FIX] Formula: dates and datestrings should be processed as numbers …
[FIX] evaluation: evaluate empty styled cells as empty …
[FIX] Charts: Re-create chart on type change …
[FIX] Charts: fix Pie charts display …
includes the following changes and fixes in o-spreadsheet
[FIX] overlay: reset resizer preview
[FIX] range: remove ranges only from deleted sheets
[REF] menus: re-organize menu items
[FIX] clipboard: handle merge
[IMP] clipboard: insert/delete cells
[FIX] clipboard: keep clipboard options when pasting interactively
[IMP] history: include undone/redone commands in command
[REF] history: split local and remote UNDO & REDO commands
[IMP] conditional_formatting: add isEmpty and isNotEmpty operatorsThis commit fixes 2 related issues. The first is that the implementation of IncommingIngenicoMessage._getLength was wrong if the length was multi-byte. The function returns the length itself as well as the length of the length, and in the multi-byte scenario the first byte that got read was not taken into account, resulting in the length of the length being off by 1. Because of that fields parsed after that were misinterpreted. This went unnoticed because the affected fields weren'
Original PR description
This commit fixes 2 related issues. The first is that the implementation of IncommingIngenicoMessage._getLength was wrong if the length was multi-byte. The function returns the length itself as well…
This commit fixes 2 related issues. The first is that the implementation of IncommingIngenicoMessage._getLength was wrong if the length was multi-byte. The function returns the length itself as well as the length of the length, and in the multi-byte scenario the first byte that got read was not taken into account, resulting in the length of the length being off by 1. Because of that fields parsed after that were misinterpreted. This went unnoticed because the affected fields weren't used. The second issue is that ticket data returned by the terminal after a transaction was not being supplied to the POS. This happened because the field Group_TicketData was defined as a GRP in the code instead of a TBL like in the TLV specification. TBL's were also not implemented. Because of Group_TicketData being interpreted as a GRP field and the terminal returning multiple table records, subsequent table records (which were empty) would overwrite previous ones. This meant that while the first record indeed contained the ticket data, it got overwritten afterwards and nothing was returned to the POS. The fix implements Group_TicketData as a TBL field and adds support for TBL's in general. opw-2440971 Forward-Port-Of: odoo/enterprise#18420 Forward-Port-Of: odoo/enterprise#18288
In the Barcode App, when the user creates a new picking with the "Create" button, an action will be returned if the active model is `stock.picking.type` in the context. But as the context is lost when the user refreshes the browser, no action is returned but it will try to do an action anyway, so it will get a traceback. How to reproduce: - Open Barcode; - Go to "Operations" and select an operation type; - Refresh (F5) then click on "Create" button -> Traceback. With this fix, it wi
Original PR description
In the Barcode App, when the user creates a new picking with the "Create" button, an action will be returned if the active model is `stock.picking.type` in the context. But as the context is lost when the user refreshes the browser, no action is returned but it will try to do an action anyway, so it will get a traceback. How to reproduce: - Open Barcode; - Go to "Operations" and select an operation type; - Refresh (F5) then click on "Create" button -> Traceback. With this fix, it will open the form view to create a new picking, which isn't a perfect solution but still better than a traceback. Forward-Port-Of: odoo/enterprise#18381 Forward-Port-Of: odoo/enterprise#18371
Followup after e1306066026649acd388b49d7429337d87cf819a Hide EXCH entries also when printing/exporting opw-2276550 Forward-Port-Of: odoo/enterprise#18377 Forward-Port-Of: odoo/enterprise#18273
Original PR description
Followup after e1306066026649acd388b49d7429337d87cf819a Hide EXCH entries also when printing/exporting opw-2276550 Forward-Port-Of: odoo/enterprise#18377 Forward-Port-Of: odoo/enterprise#18273
**[FIX] quality_control: product QP inconsistency** > - Before this commit, the Quality Points without a specific product was taken for the product template QP count, but not for the product variant QP count. Now, they will be taken for both's count. > > - The QP product's stat button displayed the list of QP for this product (or its variants if it's a product template) with the help of a default filter. The issue was the QP without a product wasn't displayed, except if the user removes the d
Original PR description
**[FIX] quality_control: product QP inconsistency** > - Before this commit, the Quality Points without a specific product was taken for the product template QP count, but not for the product variant…
**[FIX] quality_control: product QP inconsistency** > - Before this commit, the Quality Points without a specific product was taken for the product template QP count, but not for the product variant QP count. Now, they will be taken for both's count. > > - The QP product's stat button displayed the list of QP for this product (or its variants if it's a product template) with the help of a default filter. The issue was the QP without a product wasn't displayed, except if the user removes the default filter (but in this case, all QP will be displayed), but they are took to compute the product's QP count and as they haven't a specific product, these QP concern all products, and so should be displayed. > As we can't do a default filter for both a specific product and for no product, this commit replaces the default filter with a domain. > > - The stat button's icon for the Quality Points was different in the product template (fa-check) and the product variant (fa-list) form view. Now it's fa-list for the both views. **[FIX] mrp_workorder: close WO with remaining QP** >Before this commit, it was possible to close a Work Order without pass its Quality Checks with the help of the "Start"/"Done" buttons. > As these QC can only be proccessed through the WO tablet view, it wasn't possible anymore to mark as done the WO's Manufacturing Order. > >To avoid that, Odoo will no raises an UserError if the user tries to mark as done a WO with remaining Quality Checks. task-2496604 Forward-Port-Of: odoo/enterprise#17445