Daily updates from Odoo
Navigate
Branch
Friday, August 4, 2023
24 changes
Enhancements to existing features
The project budget panel now shows a clear helper message when there are no budget records to display. This makes the empty state easier to understand and improves the experience for users checking project budgets.
Original PR description
In this commit, we show a helper message in case there are no records to show under the budget section in the project's right-side panel. This change was made in order to provide a better user experience for users who are viewing the budget section and there are no records to show. task-3293012
The Documents kanban cards have been visually refined so key elements line up consistently across different document types. Creation dates were removed from the cards, reducing clutter and making document lists easier to scan.
Original PR description
In the documents kanban view: - remove the creation date - realign the avatar and activity buttons between single vs multi page cards - align all tags together (signed, requested and url documents are pushing the tags lower) Task-3387400
Validated timesheets will no longer be reassigned to a new sales order line when project pricing is updated. This protects already-approved work from unintended billing changes while still applying the new pricing setup to timesheets that have not yet been validated.
Original PR description
before this commit, In project if company invoice by timesheet and they want to set new sol with new prices then that sol is set for all the timesheets even if they are validated. prevent sol from being updated for validated timesheets and sol will only apply on timesheets which not validated. task-3410282
Resolved issues and error corrections
This update corrects how the bicycle benefit field is handled between Belgian payroll and salary contract modules. It helps prevent upgrade problems for companies using Belgian HR payroll features, ensuring contract-related data stays in the right place.
Original PR description
In the PR odoo/enterprise#41397 the has_bicycle was moved from employee to contract. But the modularity was not respected. It was removed in l10n_be_hr_payroll and added in l10n_be_hr_contract_salary. It this commit, we fix that.
Code cleanup and technical improvements
This update standardizes how user-facing text is prepared for translation across several Odoo Enterprise apps. It should not change day-to-day functionality, but it helps keep translations consistent and simplifies future maintenance.
Original PR description
In a previous commit 8bfa76a842625, _lt() returns _t(). So, in this commit, all usages of _lt() are replaced by _t(). core._lt() and core._t() are also replace by _t(). task-3292454
The date range picker used for online rentals has been moved out of the general web framework and into the rental website area where it is actually used. This keeps the core web assets leaner while preserving the existing rental booking experience, since the component was already loaded only when needed.
Original PR description
The daterangepicker being now only used in website_sale_renting and its dependent modules, it has been moved out of `web`. PS: this lib was already lazyloaded in website_sale_renting
This update removes outdated mock server utilities from internal automated tests and aligns enterprise tests with the newer shared testing approach. It does not change customer-facing features, but helps keep future development and quality checks easier to maintain.
Miscellaneous changes
Fixed that the settings for a Peruvian company are visible although the company country is different to Peru. Forward-Port-Of: odoo/enterprise#45189 Forward-Port-Of: odoo/enterprise#45100
Original PR description
Fixed that the settings for a Peruvian company are visible although the company country is different to Peru. Forward-Port-Of: odoo/enterprise#45189 Forward-Port-Of: odoo/enterprise#45100
Fix displayed lines in bank reconciliation widget that we broke in commit https://github.com/odoo/enterprise/commit/5d6cb27f5098d960b4aa80b536e39366befb5b9e. task-id: 3452105 Forward-Port-Of: odoo/enterprise#45253 Forward-Port-Of: odoo/enterprise#45169
Original PR description
Fix displayed lines in bank reconciliation widget that we broke in commit https://github.com/odoo/enterprise/commit/5d6cb27f5098d960b4aa80b536e39366befb5b9e. task-id: 3452105 Forward-Port-Of: odoo/enterprise#45253 Forward-Port-Of: odoo/enterprise#45169
Add a step to ensure that the Partner form view is fully loaded before clicking on the Knowledge button in the chatter to search for articles. That button is also present in the chatter of Knowledge article and if the Partner Form view loading takes more than 100ms (a tour step), the tour could use that button in the wrong Form view. task-3442646 Forward-Port-Of: odoo/enterprise#45196 Forward-Port-Of: odoo/enterprise#44673
Original PR description
Add a step to ensure that the Partner form view is fully loaded before clicking on the Knowledge button in the chatter to search for articles. That button is also present in the chatter of Knowledge article and if the Partner Form view loading takes more than 100ms (a tour step), the tour could use that button in the wrong Form view. task-3442646 Forward-Port-Of: odoo/enterprise#45196 Forward-Port-Of: odoo/enterprise#44673
Fixed the issue where the o-spreadsheet-Icon.LIST in odoo was mistakenly overriding the list icon in o-spreadsheet. Renamed the icon to o-spreadsheet-Icon.ODOO_LIST to segregate the list icons properly, This change eliminates any unintended conflicts with the icon. Task-[3446833](https://www.odoo.com/web#id=3446833&menu_id=4720&cids=2&action=4043&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#44936
Original PR description
Fixed the issue where the o-spreadsheet-Icon.LIST in odoo was mistakenly overriding the list icon in o-spreadsheet. Renamed the icon to o-spreadsheet-Icon.ODOO_LIST to segregate the list icons properly, This change eliminates any unintended conflicts with the icon. Task-[3446833](https://www.odoo.com/web#id=3446833&menu_id=4720&cids=2&action=4043&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#44936
Purpose: ------- When reloading the page when the no content helper is shown in the main knowledge view, an error is shown before that the page is reloaded. This happens because the quick create article is renamed in `beforeLeave` and therefore tries to be created. This commit prevents the automated renaming of the quick create article, as the article form view is not handled in create mode (articles should be created using the `article_create` method). Task-3439418 Forward-Port-Of:
Original PR description
Purpose: ------- When reloading the page when the no content helper is shown in the main knowledge view, an error is shown before that the page is reloaded. This happens because the quick create article is renamed in `beforeLeave` and therefore tries to be created. This commit prevents the automated renaming of the quick create article, as the article form view is not handled in create mode (articles should be created using the `article_create` method). Task-3439418 Forward-Port-Of: odoo/enterprise#44604
Prior this commit, dropdown menu items were bolder than regular menu items `.fw-normal` (400) was needed to override the `.btn`'s font-weight (500) Before ("Apps" menu item is bold/dropdown):  After ("Apps" is normal):  part of ta
Original PR description
Prior this commit, dropdown menu items were bolder than regular menu items
`.fw-normal` (400) was needed to override the `.btn`'s font-weight (500)
Before ("Apps" menu item is bold/dropdown):

After ("Apps" is normal):

part of task-3326263
Forward-Port-Of: odoo/enterprise#43623Steps to reproduce: 1) Have Company A and Company B 2) Create a Partner A specific to Company A 3) Open the "Aged Receivable" report 4) filter the partners with Partner A 5) Switch to Company B Issue: The filters set up in Company A is maintained in Company B -> an error access is raised Solution: Fix the initialization of the option, so that unaccessible partners are removed from the filter. OPW 3308907 Forward-Port-Of: odoo/enterprise#45158
Original PR description
Steps to reproduce: 1) Have Company A and Company B 2) Create a Partner A specific to Company A 3) Open the "Aged Receivable" report 4) filter the partners with Partner A 5) Switch to Company B Issue: The filters set up in Company A is maintained in Company B -> an error access is raised Solution: Fix the initialization of the option, so that unaccessible partners are removed from the filter. OPW 3308907 Forward-Port-Of: odoo/enterprise#45158
When the user delete a project in the `Project` module that is present in the data file of `Field Service - Sale`. While installing or upgrading the `Field Service - Sale` module, the user gets an error as the project referenced from the 'Project' module has been deleted. Steps to reproduce : 1. Install the `Field Service` module. 2. Open the project app. 3. Delete all the tasks of the `Field Service` project and then delete the `Field Service` project. 4. Install or upgrade modules that
Original PR description
When the user delete a project in the `Project` module that is present in the data file of `Field Service - Sale`. While installing or upgrading the `Field Service - Sale` module, the user gets an…
When the user delete a project in the `Project` module that is present in the data file of `Field Service - Sale`. While installing or upgrading the `Field Service - Sale` module, the user gets an error as the project referenced from the 'Project' module has been deleted.
Steps to reproduce :
1. Install the `Field Service` module.
2. Open the project app.
3. Delete all the tasks of the `Field Service` project and then delete the `Field Service` project.
4. Install or upgrade modules that are using that project like `Field Service - Sale`, `Helpdesk FSM`, etc.
Traceback will be generated.
```
KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f93d94743a0>, 'industry_fsm.fsm_project')
File "odoo/tools/cache.py", line 91, in lookup
r = d[key]
File "<decorator-gen-3>", line 2, in __getitem__
File "odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "odoo/tools/lru.py", line 34, in __getitem__
a = self.d[obj]
ValueError: External ID not found in the system: industry_fsm.fsm_project
File "odoo/tools/convert.py", line 550, in _tag_root
f(rec)
File "odoo/tools/convert.py", line 420, in _tag_record
f_val = self.id_get(f_ref, raise_if_not_found=nodeattr2bool(rec, 'forcecreate', True))
File "odoo/tools/convert.py", line 533, in id_get
res = self.model_id_get(id_str, raise_if_not_found)
File "odoo/tools/convert.py", line 539, in model_id_get
return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found)
File "odoo/addons/base/models/ir_model.py", line 1982, in _xmlid_to_res_model_res_id
return self._xmlid_lookup(xmlid)[1:3]
File "<decorator-gen-40>", line 2, in _xmlid_lookup
File "odoo/tools/cache.py", line 96, in lookup
value = d[key] = self.method(*args, **kwargs)
File "odoo/addons/base/models/ir_model.py", line 1975, in _xmlid_lookup
raise ValueError('External ID not found in the system: %s' % xmlid)
ParseError: while parsing /home/odoo/src/enterprise/saas-16.2/industry_fsm_sale/data/industry_fsm_data.xml:5, somewhere inside
<record id="field_service_product" model="product.product">
<field name="name">Field Service</field>
<field name="project_id" ref="industry_fsm.fsm_project"/>
<field name="service_tracking">task_global_project</field>
<field name="type">service</field>
<field name="list_price">100</field>
<field name="uom_id" ref="uom.pr...
File "odoo/http.py", line 2119, in __call__
response = request._serve_db()
File "odoo/http.py", line 1702, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1729, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1926, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 719, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 32, in call_button
action = self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 24, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 461, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "odoo/api.py", line 448, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "odoo/addons/base/models/res_config.py", line 614, in execute
installation_status = self._install_modules(to_install)
File "odoo/addons/base/models/res_config.py", line 32, in _install_modules
result = to_install_modules.button_immediate_install()
File "home/odoo/src/custom/trial/saas_trial/models/module.py", line 80, in button_immediate_install
return super(IrModuleModule, self).button_immediate_install()
File "<decorator-gen-73>", line 2, in button_immediate_install
File "odoo/addons/base/models/ir_module.py", line 76, in check_and_log
return method(self, *args, **kwargs)
File "odoo/addons/base/models/ir_module.py", line 472, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "home/odoo/src/custom/trial/saas_trial/models/module.py", line 52, in _button_immediate_function
res = super(IrModuleModule, self)._button_immediate_function(function)
File "odoo/addons/base/models/ir_module.py", line 596, in _button_immediate_function
registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "<decorator-gen-14>", line 2, in new
File "odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "odoo/modules/registry.py", line 90, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "odoo/modules/loading.py", line 481, in load_modules
processed_modules += load_marked_modules(env, graph,
File "odoo/modules/loading.py", line 365, in load_marked_modules
loaded, processed = load_module_graph(
File "odoo/modules/loading.py", line 226, in load_module_graph
load_data(env, idref, mode, kind='data', package=package)
File "odoo/modules/loading.py", line 71, in load_data
tools.convert_file(env, package.name, filename, idref, mode, noupdate, kind)
File "odoo/tools/convert.py", line 613, in convert_file
convert_xml_import(env, module, fp, idref, mode, noupdate)
File "odoo/tools/convert.py", line 679, in convert_xml_import
obj.parse(doc.getroot())
File "odoo/tools/convert.py", line 599, in parse
self._tag_root(de)
File "odoo/tools/convert.py", line 550, in _tag_root
f(rec)
File "odoo/tools/convert.py", line 563, in _tag_root
raise ParseError('while parsing %s:%s, somewhere inside\n%s' % (
```
This commit will fix the above issue by updating the record that might be deleted by the user.
sentry - 4087533601
Forward-Port-Of: odoo/enterprise#45140
Forward-Port-Of: odoo/enterprise#44332The sync SO-PO or INV-BILL does not work with company's child To reproduce the issue: 1. Have two companies C1, C2 2. On C1 side, Settings: - Inter-Company Transactions: Synchronize Sales and Purchase Order 3. Switch to C2 4. Create a partner P: - Individual - Company name: C1 5. Create and confirm a SO: - Customer: P 6. Switch to C1 7. Open purchase orders Error: There is not any PO for the confirmed SO Same issue will occur with invoices/bills. OPW-3319118 F
Original PR description
The sync SO-PO or INV-BILL does not work with company's child To reproduce the issue: 1. Have two companies C1, C2 2. On C1 side, Settings: - Inter-Company Transactions: Synchronize Sales and Purchase Order 3. Switch to C2 4. Create a partner P: - Individual - Company name: C1 5. Create and confirm a SO: - Customer: P 6. Switch to C1 7. Open purchase orders Error: There is not any PO for the confirmed SO Same issue will occur with invoices/bills. OPW-3319118 Forward-Port-Of: odoo/enterprise#44879 Forward-Port-Of: odoo/enterprise#44536
Before, the order of the returned partners depended on the order of the results given by the database, which wasn't enforced in any way. This caused the tests of the report ran on runbot to fail occasionally. Forward-Port-Of: odoo/enterprise#45043
Original PR description
Before, the order of the returned partners depended on the order of the results given by the database, which wasn't enforced in any way. This caused the tests of the report ran on runbot to fail occasionally. Forward-Port-Of: odoo/enterprise#45043
There were some words spelled wrong and others missing Steps to reproduce the issue : 1-install indian accounting and indian - GSTR india eFiling 2-switch to IN company 3-go to setting and search for gst 4-add a username opw-3430554 Forward-Port-Of: odoo/enterprise#44886 Forward-Port-Of: odoo/enterprise#44373
Original PR description
There were some words spelled wrong and others missing Steps to reproduce the issue : 1-install indian accounting and indian - GSTR india eFiling 2-switch to IN company 3-go to setting and search for gst 4-add a username opw-3430554 Forward-Port-Of: odoo/enterprise#44886 Forward-Port-Of: odoo/enterprise#44373
To reproduce: - Create an asset - Compute the board - On an entry, change the expense account - The depreciation is now 0 instead of the value The depreciation should not be 0 as the asset is still depreciated. We now compute the amount based on the amount of the right type instead of just a single account. A lot of the tests have changed because they were putting the wrong account type for the account fields of the assets, and so, testing things that should not be done (and blocke
Original PR description
To reproduce: - Create an asset - Compute the board - On an entry, change the expense account - The depreciation is now 0 instead of the value The depreciation should not be 0 as the asset is still depreciated. We now compute the amount based on the amount of the right type instead of just a single account. A lot of the tests have changed because they were putting the wrong account type for the account fields of the assets, and so, testing things that should not be done (and blocked from the interface). task-3377189 Forward-Port-Of: odoo/enterprise#45006 Forward-Port-Of: odoo/enterprise#43749
When setting a value to the tax unit filter, a js error occured. This was due to the fact a parameter was missing, and the options were hence saved as 'undefined' in the session storage ; which the loading of the report tried to read as a json value. Forward-Port-Of: odoo/enterprise#45127
Original PR description
When setting a value to the tax unit filter, a js error occured. This was due to the fact a parameter was missing, and the options were hence saved as 'undefined' in the session storage ; which the loading of the report tried to read as a json value. Forward-Port-Of: odoo/enterprise#45127
There is a dedicated endpoint for every EDI, it should be used instead of refering directly to the IAP services server. Forward-Port-Of: odoo/enterprise#45083
Original PR description
There is a dedicated endpoint for every EDI, it should be used instead of refering directly to the IAP services server. Forward-Port-Of: odoo/enterprise#45083
When cash basis is activated on an accounting report, and we audit a cell, we want to filter the journal items displayed in accordance with cash basis. Steps to reproduce the issue: - Create 2 invoices, on same account (for example 400000 Product Sales) - Register a payment for only one of them. - Open the Profit and Loss - In the options, tick the Cash Basis Method - Audit the Account line 400000 => Both invoice amounts appear in the Journal Items audited. Expected behavior:
Original PR description
When cash basis is activated on an accounting report, and we audit a cell, we want to filter the journal items displayed in accordance with cash basis. Steps to reproduce the issue: - Create 2 invoices, on same account (for example 400000 Product Sales) - Register a payment for only one of them. - Open the Profit and Loss - In the options, tick the Cash Basis Method - Audit the Account line 400000 => Both invoice amounts appear in the Journal Items audited. Expected behavior: Only the journal items receiving a payment should appear task : 3196856 Forward-Port-Of: odoo/enterprise#38436
When the user changes the Helpdesk Team visibility from 'Invited portal users and all internal users (public)' to any other visibility and installs the website_helpdesk module, they will face the ValidationError like `The visibility of the team needs to be set as Invited portal users and all internal users in order to use the website form.` and abort the installation process. Steps to produce: - Install the `helpdesk` module (without demo data). - Helpdesk > Configuration > Teams. - Open t
Original PR description
When the user changes the Helpdesk Team visibility from 'Invited portal users and all internal users (public)' to any other visibility and installs the website_helpdesk module, they will face the…
When the user changes the Helpdesk Team visibility from 'Invited portal users and all internal users (public)' to any other visibility and installs the website_helpdesk module, they will face the ValidationError like `The visibility of the team needs to be set as Invited portal users and all internal users in order to use the website form.` and abort the installation process.
Steps to produce:
- Install the `helpdesk` module (without demo data).
- Helpdesk > Configuration > Teams.
- Open the 'Customer Care' team and change the visibility to 'All internal users (company)'.
- Apps > Website Helpdesk > Activate.
- ValidationError and stop installation.
When the `post_init_hook` method calls while installing, the team should be searched by the visibility as 'Invited portal users and all internal users'.
Traceback:
```
ValidationError: Die Sichtbarkeit des Teams muss auf „Eingeladene Portalbenutzer und alle internen Benutzer" eingestellt sein, um das Website-Formular verwenden zu können.
File "odoo/modules/registry.py", line 90, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "odoo/modules/loading.py", line 482, in load_modules
processed_modules += load_marked_modules(env, graph,
File "odoo/modules/loading.py", line 366, in load_marked_modules
loaded, processed = load_module_graph(
File "odoo/modules/loading.py", line 245, in load_module_graph
getattr(py_module, post_init)(env)
File "home/odoo/src/enterprise/saas-16.3/website_helpdesk/__init__.py", line 15, in _configure_teams
team.use_website_helpdesk_form = True
File "odoo/fields.py", line 1320, in __set__
records.write({self.name: write_value})
File "home/odoo/src/enterprise/saas-16.3/website_helpdesk/models/helpdesk.py", line 55, in write
res = super(HelpdeskTeam, self).write(vals)
File "home/odoo/src/enterprise/saas-16.3/helpdesk_sale_timesheet/models/helpdesk_team.py", line 17, in write
result = super(HelpdeskTeam, self).write(vals)
File "home/odoo/src/enterprise/saas-16.3/helpdesk_sale/models/helpdesk_team.py", line 17, in write
result = super().write(vals)
File "home/odoo/src/enterprise/saas-16.3/helpdesk_timesheet/models/helpdesk_team.py", line 64, in write
result = super(HelpdeskTeam, self).write(vals)
File "home/odoo/src/enterprise/saas-16.3/helpdesk/models/helpdesk_team.py", line 359, in write
result = super(HelpdeskTeam, self).write(vals)
File "addons/mail/models/mail_alias_mixin.py", line 69, in write
super(AliasMixin, self).write(record_vals)
File "addons/mail/models/mail_thread.py", line 312, in write
result = super(MailThread, self).write(values)
File "addons/website/models/mixins.py", line 220, in write
return super(WebsitePublishedMixin, self).write(values)
File "odoo/models.py", line 4036, in write
real_recs._validate_fields(vals, inverse_fields)
File "odoo/models.py", line 1411, in _validate_fields
check(self)
File "home/odoo/src/enterprise/saas-16.3/helpdesk/models/helpdesk_team.py", line 138, in _check_website_privacy
raise ValidationError(_('The visibility of the team needs to be set as "Invited portal users and all internal users" in order to use the website form.'))
```
Sentry-4344760774
Forward-Port-Of: odoo/enterprise#44931Thailand localization report requirements: - 2 excel report files for sale/purchase audit journal - 2 csv report files for tax report related to PND3 and PND53 2879718, 2895669 Forward-Port-Of: odoo/enterprise#45112 Forward-Port-Of: odoo/enterprise#31801
Original PR description
Thailand localization report requirements: - 2 excel report files for sale/purchase audit journal - 2 csv report files for tax report related to PND3 and PND53 2879718, 2895669 Forward-Port-Of: odoo/enterprise#45112 Forward-Port-Of: odoo/enterprise#31801