Daily updates from Odoo
Navigate
Branch
Friday, November 18, 2022
28 changes
New functionality added to Odoo
This update adds Moroccan payroll support, including local salary rules, contract types, contribution registers, work entry types, and demo payroll data. It helps companies operating in Morocco manage payroll calculations in Odoo according to local requirements.
Original PR description
taskID 2930634
Enhancements to existing features
The settings screens for Peru EDI and VoIP no longer show an unnecessary enterprise upgrade label. This avoids confusing enterprise users with a prompt that does not apply to them, since these features are already part of the enterprise offering.
Original PR description
In **l1on_pe_edit** and **voip** module, along with the fields l10n_pe_edi_test_env and module_voip in settings the upgrade to enterprise widget(upgrade_boolean ) is added and it doesn't have any effect as the both the modules is part of the enterprise repository and show only for the enterprise users.
Rental orders now show rental status labels only when the sales order actually includes rentable products. This avoids misleading statuses such as “Returned” appearing on regular sales orders, helping staff interpret orders more accurately.
Original PR description
Before this commit in the rental app rental flags appeared even in the case no rentable product is present in the SO. In particular the tag "Returned" appeared when the SO contained only not rental products. After this commit flags about rent status will appear only if there are rental products in the SO. Task - 2916253
Project users now see clearer conflict warnings that explain which people have overlapping tasks and how many overlaps each person has. Timesheets and planning analysis also gains cost, revenue, margin, billable, non-billable, and initially planned hour measures, helping teams better monitor project profitability and workload planning.
Original PR description
Before these changes: **tasks in conflict warning:** - Warning text is wrong, we display 'this user has {planning_overlap} tasks at the same time' while many users are concerned and planning_overlap…
Before these changes:
**tasks in conflict warning:**
- Warning text is wrong, we display 'this user has {planning_overlap} tasks at the same time' while many users are concerned and planning_overlap is the total count of theses users tasks
- planning_overlap is an integer for tasks and tasks_report.
After these changes:
**tasks in conflict warning:**
- planning_overlap is changed to Char for tasks containing message with this format 'User A has 1 other task at the same time. User B has 2 other tasks at the same time.'
- planning_overlap is still an ineteger for tasks_report to display the total count of tasks in conflicts
**New measures added to reporting > timesheets & planning analysis**
- planned costs: nb of planned hours * the timesheet cost set on the employee
- effective costs: nb of effective hours * the timesheet cost set on the employee
- planned revenues: nb of planned hours * the unit price per hour (or day if the encoding uom is in days) of the SOL linked to the shift
- effective revenues: nb of effective hours * the unit price per hour (or day if the encoding uom is in days) of the SOL linked to the timesheet entry
- planned margin: planned revenues - planned costs
- effective margin: effective revenues - effective costs
- planned billable hours: nb of planned hours linked to an SOL
- effective billable hours: nb of effective hours linked to an SOL
- planned non billable hours: nb of planned hours not linked to an SOL
- effective non billable hours: nb of effective hours not linked to an SOL
- initially planned hours: planned_hours field of the project.task linked to the timesheet entry / planning slot
Task-2849291
Related Prs:
- community: https://github.com/odoo/odoo/pull/91174
- upgrade: https://github.com/odoo/upgrade/pull/3523This change removes upgrade prompts from settings that only exist in Enterprise modules. It avoids showing irrelevant messages to users who are already using Enterprise-only features, making the settings experience clearer.
Original PR description
In a Community database, in Settings, when checking a config exclusive to Enterprise, the Upgrade Boolean field is used to display a popup suggesting the user to upgrade to Enterprise. The presence of this field does not make sense for modules that are Enterprise-only, such as VoIP. This commit deletes occurrences of the Upgrade Boolean field in Enterprise modules, as they are not relevant there. Original PR: https://github.com/odoo/enterprise/pull/33525
The spreadsheet features in Documents and Enterprise spreadsheets were updated to work with the latest spreadsheet engine. This helps keep spreadsheet lists, pivots, filters, and menu actions aligned with the current platform behavior and reduces future compatibility issues.
Original PR description
Adapts code to o-spreadsheet latest version See community PR odoo/odoo#105997
The Monthly Recurring Revenue log now opens only in the list view, since the form view did not provide additional useful details. This reduces screen complexity and makes it easier for users to review subscription revenue changes efficiently.
Original PR description
Remove the default form view access on MRR log. The MRR logs default form view offer no more useful information than the tree view. The goal of this PR is thus to reduce the overall complexity by removing access to this form view.
Appointments created for job applicants are now linked to the relevant appointment type for that applicant. This makes it easier for recruitment teams to organize and follow the different meetings scheduled during the hiring process.
Original PR description
Creating an appointment for an applicant now links the event to an event type associated to the applicant. With that, it's easier to track the different meetings of the applicant. task-2985067
The rental product view now includes total quantity information when opening related rentals. This gives sales and rental teams a clearer at-a-glance picture of rented volumes without needing extra checks.
Original PR description
task: 3059056
After completing a signature, visitors who are not signed in now see updated messaging and a button encouraging them to try Odoo Sign. This helps increase awareness and adoption of the Sign app at a natural moment in the signing flow.
Original PR description
New text and button help make Sign more viral. task-2836009
Resolved issues and error corrections
Updated command descriptions in the appointment and knowledge editors to remove unnecessary periods. This keeps wording consistent in the user interface and related translation files.
Original PR description
Remove dot (period) in powerbox commands descriptions, update corresponding msgid's in .pot files. task-2901665 https://github.com/odoo/odoo/pull/106032
Subscriptions that are confirmed but have not started yet now appear in a dedicated Pending stage. This helps teams distinguish future subscriptions from active ones and ensures they move out of Pending when the first invoice is due.
Original PR description
Add a new stage called 'pending' to sale_susbcription which will encompass the subscription which have been confirmed but haven't started yet. The SO will be moved in this stage if they would have been in progress but have a start date in the future and are removed when they are going to be invoiced for the first time. task-id 2939966
Code cleanup and technical improvements
This update renames an internal VoIP sound component from “SoundEffect” to “Audio” for clearer wording. It does not change how users make or receive calls, but it helps keep the code easier to maintain for future VoIP improvements.
Original PR description
Community: https://github.com/odoo/odoo/pull/99634
This update removes default quality email aliases that could conflict with real mail setups and improves the help text shown when certain lists are empty. It reduces configuration risk and keeps user guidance clearer across expense extraction, knowledge, quality, and signing workflows.
Original PR description
PURPOSE Cleanup alias definitions and usage to have as few invalid or dummy data as possible. Cleanup empty list helpers override. SPECIFCIATIONS hr_expense_extract: fix empty help message construct…
PURPOSE
Cleanup alias definitions and usage to have as few invalid or dummy
data as possible. Cleanup empty list helpers override.
SPECIFCIATIONS
hr_expense_extract: fix empty help message construct
* correctly adding a default message if no help is already given;
* use right tools to check content of html content (is_html_empty);
* correctly translate help message;
* correctly call super() in order to let sub modules add their custom content
notably MailThread (alias) and HrExpense (specific alias);
* trying to make code simpler to follow;
quality: avoid defining alias by default
'quality' module holds default alias to create alerts. Issue with default
aliases is that they can be wrong. Indeed it depends on mail server
configuration (e.g. not always owning all possible emails of a domain when
using its own address like gmail). This may also conflicts with existing
email addresses or already-defined aliases without being really configurable.
mail, various: cleanup empty list help message overrides
Purpose is to cleanup code: stop using help parameter name (use help_message as
help is a keyword), try to call super(), ...
LINKS
See community PR for more details.
Task-2710804 (Mail: Clean MailThread Posting API)
Prepares Task-36879 (Mail: Support MultiCompany Aliases)Miscellaneous changes
Some reports had an incorrect context field and returned 'account.financial.html.report' as model instead of 'account.report', and 'id' instead of the key 'report_id'. This led to a keyError in AccountReport.execute_action.. opw-3071031 Forward-Port-Of: odoo/enterprise#34123
Original PR description
Some reports had an incorrect context field and returned 'account.financial.html.report' as model instead of 'account.report', and 'id' instead of the key 'report_id'. This led to a keyError in AccountReport.execute_action.. opw-3071031 Forward-Port-Of: odoo/enterprise#34123
In Mexico, the "Daylight Savings Time" is gone. This has created unwanted results in Odoo's code. https://www.unotv.com/nacional/aprueba-senado-la-desaparicion-del-horario-de-verano/ "En los estados del noroeste del país como Baja California Sur, Nayarit, Sonora y Sinaloa se regirán con el horario del pacífico y la diferencia será de menos una hora con respecto a zona centro." It has been reported that, since Nov 4th, customers whose Company is in Baja California Sur, Nayarit, Sonora, or
Original PR description
In Mexico, the "Daylight Savings Time" is gone. This has created unwanted results in Odoo's code. https://www.unotv.com/nacional/aprueba-senado-la-desaparicion-del-horario-de-verano/ "En los estados del noroeste del país como Baja California Sur, Nayarit, Sonora y Sinaloa se regirán con el horario del pacífico y la diferencia será de menos una hora con respecto a zona centro." It has been reported that, since Nov 4th, customers whose Company is in Baja California Sur, Nayarit, Sonora, or Sinaloa have a difference of one hour between the time in the Odoo Document and the time in the SAT. They cannot sign invoices until one hour after. Chihuahua is now part of Central Timezone. This change indirectly affected Baja California Sur, Sinaloa, and Nayarit, modifying the timezone one hour earlier. This fix proposed by @lao-odoo moves BCS, SIN and NAY to ´America/Mazatlán' opw-3060095 Forward-Port-Of: odoo/enterprise#34092
latam 923 / adhoc 56731 --- When error realted to a expired certificate the user receive a traceback error beause this one was not properly manage. With this changes will recieve the proper error message without any traceback. ### Before this change  Complete traceback error ``` Error: Odoo Server Error Traceback (most recent call last): File "/home
Original PR description
latam 923 / adhoc 56731 --- When error realted to a expired certificate the user receive a traceback error beause this one was not properly manage. With this changes will recieve the proper error…
latam 923 / adhoc 56731
---
When error realted to a expired certificate the user receive a traceback error beause this one was not properly manage. With this changes will recieve the proper error message without any traceback.
### Before this change

Complete traceback error
```
Error:
Odoo Server Error
Traceback (most recent call last):
File "/home/odoo/src/enterprise/l10n_ar_edi/models/res_config_settings.py", line 52, in l10n_ar_connection_test
self.company_id._l10n_ar_get_connection(webservice)
File "/home/odoo/src/enterprise/l10n_ar_edi/models/res_company.py", line 129, in _l10n_ar_get_connection
token_data = connection._l10n_ar_get_token_data(self, afip_ws)
File "/home/odoo/src/enterprise/l10n_ar_edi/models/l10n_ar_afipws_connection.py", line 169, in _l10n_ar_get_token_data
private_key, certificate = company.sudo()._get_key_and_certificate()
File "/home/odoo/src/enterprise/l10n_ar_edi/models/res_company.py", line 157, in _get_key_and_certificate
self._l10n_ar_is_afip_crt_expire()
File "/home/odoo/src/enterprise/l10n_ar_edi/models/res_company.py", line 104, in _l10n_ar_is_afip_crt_expire
raise UserError(_('The AFIP certificate is expired, please renew in order to continue'))
odoo.exceptions.UserError: ('El certificado AFIP esta expirado, por favor renovarlo para continuar', '')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/odoo/src/odoo/odoo/http.py", line 624, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/odoo/src/odoo/odoo/http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/home/odoo/src/odoo/odoo/tools/pycompat.py", line 14, in reraise
raise value
File "/home/odoo/src/odoo/odoo/http.py", line 669, in dispatch
result = self._call_function(**self.params)
File "/home/odoo/src/odoo/odoo/http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/odoo/src/odoo/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/home/odoo/src/odoo/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/home/odoo/src/odoo/odoo/http.py", line 915, in __call__
return self.method(*args, **kw)
File "/home/odoo/src/odoo/odoo/http.py", line 515, in response_wrap
response = f(*args, **kw)
File "/home/odoo/src/odoo/addons/web/controllers/main.py", line 1346, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/home/odoo/src/odoo/addons/web/controllers/main.py", line 1334, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/src/odoo/odoo/api.py", line 390, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/home/odoo/src/odoo/odoo/api.py", line 377, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/odoo/src/enterprise/l10n_ar_edi/models/res_config_settings.py", line 57, in l10n_ar_connection_test
else '\n'.join(re.search('.*' + webservice + ': (.*)\n\n', error.name).groups())
AttributeError: 'NoneType' object has no attribute 'groups'
```
### After this change

Forward-Port-Of: odoo/enterprise#33224To reproduce (V16): 1. Install payroll 2. Go to Payroll > Contracts > Contracts 3. Create 2 contracts, with no employee set on it, make sure they are both in a different state (one new and one running for example) 4. Go to payroll dashboard => JS error, which hide a Python traceback: ```py ... File "/home/odoo/Odoo/code/version/16.0/enterprise/hr_payroll/models/hr_payslip.py", line 1116, in <listcomp> group['employee_id'][0] for group in employee_contract_groups if group['sta
Original PR description
To reproduce (V16):
1. Install payroll
2. Go to Payroll > Contracts > Contracts
3. Create 2 contracts, with no employee set on it, make sure they are both in a different state (one new and one running for example)
4. Go to payroll dashboard => JS error, which hide a Python traceback:
```py
...
File "/home/odoo/Odoo/code/version/16.0/enterprise/hr_payroll/models/hr_payslip.py", line 1116, in <listcomp>
group['employee_id'][0] for group in employee_contract_groups if group['state'] == 2]
TypeError: 'bool' object is not subscriptable
```
Issue reason:
As the contract does not have any employee associated to it,
it fails to retrieve its value.
After this commit:
Contract without employee associated are excluded from
the search domain.
So contracts searched does always have an employee set on it
OPW-3069633
Forward-Port-Of: odoo/enterprise#34060This PR fix a bug where the sql query for _get_invoiced in subscription SO's would return invoice (Account move) you did not have access to. This PR add a check in the sql query to ensure that you have access to the invoice it returns. Forward-Port-Of: odoo/enterprise#33966 Forward-Port-Of: odoo/enterprise#33709
Original PR description
This PR fix a bug where the sql query for _get_invoiced in subscription SO's would return invoice (Account move) you did not have access to. This PR add a check in the sql query to ensure that you have access to the invoice it returns. Forward-Port-Of: odoo/enterprise#33966 Forward-Port-Of: odoo/enterprise#33709
1.Fix the issue when employees are required on WO, the analytic accounting entries are not correctly posted 2. Fix the issue when employee is needed on the WO, the real duration is not correctly computed Forward-Port-Of: odoo/enterprise#33399
Original PR description
1.Fix the issue when employees are required on WO, the analytic accounting entries are not correctly posted 2. Fix the issue when employee is needed on the WO, the real duration is not correctly computed Forward-Port-Of: odoo/enterprise#33399
Since the whitespace is removed by the compiler, we have to put the small tags on the same line separated by a white space. Usually a padding is sufficient but not always. Task-3047477 Forward-Port-Of: odoo/enterprise#33903
Original PR description
Since the whitespace is removed by the compiler, we have to put the small tags on the same line separated by a white space. Usually a padding is sufficient but not always. Task-3047477 Forward-Port-Of: odoo/enterprise#33903
The breadcrumbs of the manual reconciliation widget was broken before this PR. It was displayed "unnamed" which is not clear for the user. This PR correct that by putting "Reconciliation" instead of "unnamed" which is the behaviour of the flow Accounting -> Reconciliation. The problem is that the name is not store in the database so the breadcrumbs become "unnamed". To deal with that, I've added the name to the function that update the control panel and breadcrumbs and the init function. I
Original PR description
The breadcrumbs of the manual reconciliation widget was broken before this PR. It was displayed "unnamed" which is not clear for the user. This PR correct that by putting "Reconciliation" instead of "unnamed" which is the behaviour of the flow Accounting -> Reconciliation. The problem is that the name is not store in the database so the breadcrumbs become "unnamed". To deal with that, I've added the name to the function that update the control panel and breadcrumbs and the init function. I've also written a getTitle function that will be used to update the "controlPanelProps.title". Forward-Port-Of: odoo/enterprise#33842
before this commit super was called in the middel of the write function, making it impossible to properly override the function. The only methods to everride the function would be rewriting it completely and tempering with the MRO or calling the parent-class of RentalOrderLine dyrectly, which are methods that should be avoided. after this commit, the portion after the super call is isolated into a seperate function, making it possible to override the portion before and after super seperately.
Original PR description
before this commit super was called in the middel of the write function, making it impossible to properly override the function. The only methods to everride the function would be rewriting it completely and tempering with the MRO or calling the parent-class of RentalOrderLine dyrectly, which are methods that should be avoided. after this commit, the portion after the super call is isolated into a seperate function, making it possible to override the portion before and after super seperately. Forward-Port-Of: odoo/enterprise#33837
Clicking on AML label in bank recon label should expand the line to display extra data in the cell. Width this PR, it truncate the label and displays the whole label and extra data when the user clicks on it. Forward-Port-Of: odoo/enterprise#33524
Original PR description
Clicking on AML label in bank recon label should expand the line to display extra data in the cell. Width this PR, it truncate the label and displays the whole label and extra data when the user clicks on it. Forward-Port-Of: odoo/enterprise#33524
Steps: - Open studio on lots/serial form view - traceback Because studioIsVisible key is added to the props by studio but not defined in Buttonn and Notebook opw-3039648 Forward-Port-Of: odoo/enterprise#33566
Original PR description
Steps: - Open studio on lots/serial form view - traceback Because studioIsVisible key is added to the props by studio but not defined in Buttonn and Notebook opw-3039648 Forward-Port-Of: odoo/enterprise#33566
Private functions cannot be used for report file exports. Because of this, XAF generation was not possible anymore. Forward-Port-Of: odoo/enterprise#34070
Original PR description
Private functions cannot be used for report file exports. Because of this, XAF generation was not possible anymore. Forward-Port-Of: odoo/enterprise#34070
currently some of the enterprise modules is having LGPL license, updating the LGPL license to OEEL-1 license Forward-Port-Of: odoo/enterprise#33830
Original PR description
currently some of the enterprise modules is having LGPL license, updating the LGPL license to OEEL-1 license Forward-Port-Of: odoo/enterprise#33830
And trigger refresh of client's onboarding panel (see below). In two situations, we didn't handle well the case where an opened onboarding step is deleted after it was opened but before it was validated: * 2nd onboarding step (link): The returned value of `AppointmentOnboardingLink.search_or_create_onboarding_invite` should include the (valid) invite url created. * 3rd onboarding step (provider config): Using `raise_if_not_found=False` is not sufficient, we also mustn't use the re
Original PR description
And trigger refresh of client's onboarding panel (see below). In two situations, we didn't handle well the case where an opened onboarding step is deleted after it was opened but before it was validated: * 2nd onboarding step (link): The returned value of `AppointmentOnboardingLink.search_or_create_onboarding_invite` should include the (valid) invite url created. * 3rd onboarding step (provider config): Using `raise_if_not_found=False` is not sufficient, we also mustn't use the result if it evaluates to None. This also revealed the importance of returning wasFirstValidation True in these cases in order to force a refresh of the onboarding panel. Task-3046707 Forward-Port-Of: odoo/enterprise#33355