Wednesday, September 11, 2024
28 changes · master
New functionality added to Odoo
Indian payroll users can now generate an Excel report showing employee and employer Provident Fund contributions for a selected month or period. This makes it easier for payroll teams to review, share, and reconcile PF contribution details by employee.
Original PR description
This PR adds a new PF report that details the amounts contributed by employees and employers to the PF accounts during a given month/period. It generates an xlsx file containing PF details for each employee. task-3663046
Adds a Wages Protection System report for UAE payroll so companies can prepare required salary payment files more easily. The update supports local compliance needs and includes related payroll, bank, and configuration changes.
Original PR description
… to UAE payroll task-3326388 Continuation of this [PR](https://github.com/odoo/enterprise/pull/61289) as it was closed due to the branch renaming. Comments from there have been addressed Adding UAE WPS Report [Ticket ID: 3326388](https://www.odoo.com/web#id=3326388&cids=14&menu_id=4722&action=333&active_id=4996&model=project.task&view_type=form)
Enhancements to existing features
Warehouse users now see only the transfers they selected when creating back-orders, reducing confusion during bulk processing. When quality checks are required, the system can separate those transfers and show all relevant quality prompts so validations are completed correctly.
Original PR description
Before this PR : ------------------------------------------------ - During multi-transfer validation, the back-order creation popup displayed all transfers. - If the quality app was installed, there was no filter to exclude transfers requiring quality checks. - Multi-transfer validation only displayed quality checks for one transfer and did not validate any transfers. After this PR: ------------------------------------------------ - Restructured the back-order popup to display only selected transfers in a dropdown menu. - Implemented a filter to exclude transfers requiring quality checks, visible only when the quality module is installed. - Enhanced the display and validation of all quality checks popups. Task-id : 3790406
Resolved issues and error corrections
The Appointments schedule menu is now hidden from users who do not have permission to access it. This prevents confusing access error messages when staff try to open resource or staff booking schedules they are not allowed to view.
Original PR description
**Steps to reproduce:** Log in as Demo. Go to Appointments > Schedule > Resource bookings / Staff bookings. Both menus result in an Access Rights Error. After commit https://github.com/odoo/enterprise/commit/f406f3b7ed34ac53bacdaa44ca359a2dbbd152ba, the schedule menu is also visible for those users who don't have access to it. **After this PR:** Hide the schedule menu for those users who don't have access to it. Task-4172809
Code cleanup and technical improvements
This update changes how test files are created so they work consistently across more web browsers. It reduces the risk of browser-specific test failures in Documents, Payroll, Mail, and WhatsApp-related areas without changing customer-facing features.
Original PR description
*test_l10n_be_hr_payroll_account, test_mail_enterprise, whatsapp Purpose of this commit: `createFile` used the File System API to create test files in the browser's temporary file system. However, since not all browsers support this API, it has been replaced with the new File(...) constructor, which is supported by all browsers. This change makes the tests more compatible across different browsers. community: https://github.com/odoo/odoo/pull/179600 task-4161755
Miscellaneous changes
Before this commit, in studio, the editorMenu was not updated when clicking on a different tab (views, automations etc...) After this commit, the menu is updated. Forward-Port-Of: odoo/enterprise#69809 Forward-Port-Of: odoo/enterprise#69795
Original PR description
Before this commit, in studio, the editorMenu was not updated when clicking on a different tab (views, automations etc...) After this commit, the menu is updated. Forward-Port-Of: odoo/enterprise#69809 Forward-Port-Of: odoo/enterprise#69795
Indian payroll users can now include payment advice when generating payment reports. This makes it easier to produce bank/payment documentation directly from the payroll workflow in both PDF and spreadsheet formats.
Original PR description
In this PR: - The payment report now includes an additional option called "Payment Advice" - If the payment advice is selected, you can generate the payment report in both PDF and XLSX formats using the buttons in the wizard. - Once the file is generated, the button is set as secondary otherwise, it remains primary Task - 3794859
Kanban card layouts in Timesheets, Enterprise web, and Studio were simplified to use newer standard building blocks. This makes the views easier to maintain and helps keep the user interface consistent without changing core business workflows.
Original PR description
* = [web_enterprise, web_studio] In this commit we have simplified the kanban archs for the timesheet_grid, web_enterprise and web_studio modules. The goal is to simplify them, make them easier to read and use bootstrap utility classnames. - Previously, we used `kanban-box`, but now we are using `kanban-card` instead. - Deprecated `oe_kanban_global_click` and `oe_kanban_global_click_edit`. - More use of `<field/>` tags - Removed the `oe_kanban_colorpicker` class and replaced it with the `kanban_color_picker` widget. - Changed type='edit' to type='open' to open records. since version 16, records always open in edit mode by default. - `kanban_image` from rendering context, is deprecated so we use `<field name=... widget=image/>` instead Task-3992107
Onboarding tours across several business apps are now registered in the database so they can be reliably discovered and launched. This keeps guided setup experiences working after a platform change that moved tour registration into stored configuration.
Original PR description
After the change in https://github.com/odoo/odoo/pull/177564 The onboarding tours have to be register in the database. TASK-ID: 4070659
Project and field service kanban cards were updated to use newer standard building blocks and clearer layout definitions. This makes the screens easier to maintain while preserving the same business workflows for users.
Original PR description
*industry_fsm, industry_fsm_report, industry_fsm_sale, project_enterprise, timesheet_grid In this commit we have simplified the kanban arch for the project and related module. The goal is to simplify them, make them easier to read, and use bootstrap utility classnames. - Previously, we used `kanban-box`, but now we are using `kanban-card` instead. - Deprecated `oe_kanban_global_click` and `oe_kanban_global_click_edit`. - More use of `<field/>` tags - Removed the `oe_kanban_colorpicker` class and replaced it with the `kanban_color_picker` widget. - Changed type='edit' to type='open' to open records. since version 16, records always open in edit mode by default. - `kanban_image` from rendering context, is deprecated so we use `<field name=... widget=image/>` instead - kanban_color, kanban_getcolor and kanban_getcolorname are deprecated use new attribute highlight_color=color_field_name on root node Task-3992107
The stock barcode screens have been simplified to use newer standard layout components and styling. This makes the interface easier to maintain and helps keep barcode picking and batch picking views consistent with current Odoo conventions.
Original PR description
In this commit we have simplified the kanban arch for the stock and their related modules.the goal is to simplify them, make them easier to read and use bootstrap utility classnames. - Previously, we used kanban-box, but now we are using kanban-card instead. - Deprecated oe_kanban_global_click and oe_kanban_global_click_edit. - More use of <field/> tags - Removed the oe_kanban_colorpicker class and replaced it with the kanban_color_picker widget. - Changed type='edit' to type='open' to open records. since version 16, records always open in edit mode by default. - kanban_image from rendering context, is deprecated so we use <field name="..." widget="image"/> instead - kanban_color, kanban_getcolor and kanban_getcolorname are deprecated use new attribute highlight_color="color_field_name" on root node Task-3992107
Self-ordering in Point of Sale now uses configured IoT receipt printers as expected. This helps restaurants and shops keep receipt printing consistent across regular checkout and self-order flows.
Original PR description
Previously, the self order mode did not work with IoT printers for receipts, even if they were configured in the PoS config. After this PR, IoT receipt printers work as expected in self order mode. task-4128846
Document sharing now supports recipient-only links, invitation emails, and a portal area where users can find files shared with them. This makes document access easier for intended recipients while reducing accidental exposure through open links.
Original PR description
### **<<<<< SHARE LINK CHANGES >>>>>** **---- changes in `documents_share.py` ----** 1. There will now be 2 types of share link. 2. For which a new `Selection` field `share_type` has been added to…
### **<<<<< SHARE LINK CHANGES >>>>>**
**---- changes in `documents_share.py` ----**
1. There will now be 2 types of share link.
2. For which a new `Selection` field `share_type` has been added to the `documents_share` model. The values of which are as follows:
- `share_global` --> Allows anyone with the link to access shared documents.
- `share_restricted` --> Only selected records (from the `res.partner` model)
will have access.
3. Added a `Many2many` field member_ids to specify `res.partner` records allowed
to access the share link.
4. The field `member_ids` will only display those records which are not archived
and have a related `res.users` record. (refer the `_get_member_domain` function).
5. Added a method `_check_share_access_rights` to check if the user is authorized
to access the documents from the share link.
6. Added action_send_invitation method to send email invitations to partners in
the field `member_ids`.
**---- changes in `documents_share_views.xml` ----**
1. Users must select `share_type` inside the `documents_share` dialog box.
2. On selecting the "Only Recipients" option, the user will be prompted to enter the recipients with whom they wish to share the link.
3. The [COPY LINK & CLOSE] button changes to [SEND INVITATION] upon recipient selection.
4. The [SEND INVITATION] button triggers an email to the recipients.
**---- changes in `mail_template_data.xml` ----**
1. The template `mail_template_document_share` receives the data from the `action_send_invitation` method.
2. This is the template used to email the share link to all the recipients.
**---- changes in `documents_kanban_view.scss` ----**
1. Rectified the selector to match the correct class of the `CopyClipboardChar` widget.
### **<<<<< PORTAL INTEGRATION >>>>>**
- Shared documents are now visible to recipients under the `Files Shared` label in their portal.
**---- changes in `documents.py` ----**
1. Added a new route to access the `download_one` function from the portal as well.
2. Added a check (inside the `_get_file_response`) to verify the access token when the user tries to preview/download the document from the portal.
3. Also added a check for authorization of the users trying to access the shared documents directly from the share link.
**---- added `documents_share_demo.xml` ----**
1. Added a demo record to facilitate testing of portal flows.
**---- changes in `documents.document.py` ----**
1. Added a new `access_token` field for security reasons while accessing the documents' records from the portal.
2. Added a SQL CONSTRAINT to ensure `access_token` uniqueness.
**---- changes in `test_documents_document.py` ----**
1. Directly copying the spreadsheet without specifying a new access token results in the violation of the SQL CONSTRAINT.
2. Hence, manual assignment of a new `access_token` is required.
**---- changes in `documents_templates_share.xml` ----**
1. Added an access denied template for unauthorized access attempts.
**---- changes in `sign_portal_templates.xml` ----**
1. Updated the icon of the `sign` portal card so we can use that icon as the icon for the `documents` portal card.
2. Renamed the `sign` module portal card for clarity between `sign` and `documents` portal cards.
**---- changes in `spreadsheet_mixin.py` ----**
1. Each invocation of the `copy` method requires a unique `access_token`. (If we do not do this, we will violate the unique SQL CONSTRAINT applied on the `access_token` field)
2. Since there are many different models invoking the method, we need to explicitly check if the `self` is an instance of the `documents_document` model. And only in that case we pass the access_token.
Task-3889932Subscriptions that were previously churned can now be reopened automatically when a related invoice is paid on time. This helps avoid customers remaining incorrectly closed after completing payment, especially when using payment links.
Original PR description
Before this commit, when a subscription received a payment in Churned stage, it would stay closed after the invoice payment confirmation. After this commit, when this payment scenario happens, we re-open the churned subscriptions linked to the invoice if the payment date is less than or equal the next invoicing date. task-4106927
A spelling mistake was corrected in the UrbanPiper restaurant integration information. This is a minor cleanup that improves presentation and avoids confusion in module details.
The guided timesheet walkthrough no longer gets stuck when users click a timesheet cell to enter hours. This keeps onboarding and training flows smooth by ensuring the tour recognizes the click even when an overlay appears on hover.
Original PR description
Steps to reproduce: - start timesheets tour - when reaching step "Click on the cell to set the number of hours you spent on this project.", and clicking on the cell, tour stay at the same step. Source: - when hovering the cell, a new html element came to superpose above the trigger. so the click is done on the new element and not the trigger. Fix: - The fix was done in task 4147246, this commit just adapted the trigger with an additional alternative trigger task-4141027
New tables added in Studio report editing now follow the report's existing external layout styling. This keeps reports visually consistent and avoids manual formatting corrections after inserting tables.
Original PR description
Before this commit, when inserting a new table in the report, its style was off because of the specific styles set by the external layout After this commit, the styles fit the external layout's task-4166611
Automatic bank reconciliation now prefers an active customer or vendor when matching a bank statement line by account number. This helps avoid assigning inactive contacts during reconciliation while still allowing reconciliation when there is only one possible match.
Original PR description
…sible Context: When doing automatic reconciliation, statement lines without partner but with account_number set are using the method `_retrieve_partner` to find a partner which would have a bank account with the same account_number. Problem: The res.partner.bank could be active and the partner inactive, which would result in selecting an inactive partner for the reconciliation. This commit improve on that behavior by trying to assign an active partner if we happen to have one with the same bank account and if it is not possible, we still leave the inactive partner but we disable the "auto reconcile" part of the reconciliation. Task: 3975338
When exporting GL in datev format, the receivable/payable accounts were not well formatted. Steps: - duplicate the Receivable Account (A) - create a customer C with receivable set as A - create and confirm an invoice for C - go to GL and export datev file -> column konto is account code of A, it should be 1000000 + C.id, according to datev (starting by 1 for customers and 7 for Vendors) Before this commit, we were making the distinction between the customers that had the "original" rece
Original PR description
When exporting GL in datev format, the receivable/payable accounts were not well formatted. Steps: - duplicate the Receivable Account (A) - create a customer C with receivable set as A - create and confirm an invoice for C - go to GL and export datev file -> column konto is account code of A, it should be 1000000 + C.id, according to datev (starting by 1 for customers and 7 for Vendors) Before this commit, we were making the distinction between the customers that had the "original" receivable account and the others, and we were displaying the account code in the second case. It should be the datev format in any case. opw-4117993 Forward-Port-Of: odoo/enterprise#69573
Add tests for the community side changes in https://github.com/odoo/odoo/pull/167235, as these changes mostly impact inter-company transaction flows. task-3853055 Forward-Port-Of: odoo/enterprise#69715 Forward-Port-Of: odoo/enterprise#64078
Original PR description
Add tests for the community side changes in https://github.com/odoo/odoo/pull/167235, as these changes mostly impact inter-company transaction flows. task-3853055 Forward-Port-Of: odoo/enterprise#69715 Forward-Port-Of: odoo/enterprise#64078
no task Forward-Port-Of: odoo/enterprise#69643
Original PR description
no task Forward-Port-Of: odoo/enterprise#69643
This commit adds the missing neutralization necessary for the l10n_uy_edi module introduced in [1] The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is ma
Original PR description
This commit adds the missing neutralization necessary for the l10n_uy_edi module introduced in [1] The purpose of the standard neutralization framework is to allow us to create database copies that will not interact with external systems in ways that could impact the production database (or if it is not possible to prevent the interactions, make sure that they are benign or won't result in actual changes), or impact the customers of the operator of the production database. This is mainly useful to allow safe support investigation on database duplicates. [1] https://github.com/odoo/enterprise/pull/51266 Forward-Port-Of: odoo/enterprise#69692 Forward-Port-Of: odoo/enterprise#69555
…orders The cron _cron_confirm_purchase_orders run only once a week, month and do nothing the rest of the week month The cron may timeout and get delay to it's next execution date before all the po to process are done This leave some draft pos that won't be handle before next month/week and generate unacceptable delay. The cron should notify its progress in order to be able to run as much as needed. In order to have a consistent progress notified, this commit first fech all the pos t
Original PR description
…orders The cron _cron_confirm_purchase_orders run only once a week, month and do nothing the rest of the week month The cron may timeout and get delay to it's next execution date before all the po to process are done This leave some draft pos that won't be handle before next month/week and generate unacceptable delay. The cron should notify its progress in order to be able to run as much as needed. In order to have a consistent progress notified, this commit first fech all the pos to process and then process them one by one. Forward-Port-Of: odoo/enterprise#69598
eBay recently changed the URL they send in the viewitemURL. We found 3 different ways they send it, but there might be more. And the new ones can only be matched to the product template, not variant. We shouldn't have relied on this URL to match products in the beginning, but we can't refactor this flow in stable, instead, we fallback on the name of the variant, as it was created from eBay. opw-3934127 Forward-Port-Of: odoo/enterprise#69152
Original PR description
eBay recently changed the URL they send in the viewitemURL. We found 3 different ways they send it, but there might be more. And the new ones can only be matched to the product template, not variant. We shouldn't have relied on this URL to match products in the beginning, but we can't refactor this flow in stable, instead, we fallback on the name of the variant, as it was created from eBay. opw-3934127 Forward-Port-Of: odoo/enterprise#69152
commit [1] introduce alias to handle scale up game but scale up ask to create a database without demo. So we move the alias to data. It's far from optimal but it's the cleaner temporary solution [1] commit cfe4829be00c77935555d506d86f0f14618fd21f Forward-Port-Of: odoo/enterprise#69773
Original PR description
commit [1] introduce alias to handle scale up game but scale up ask to create a database without demo. So we move the alias to data. It's far from optimal but it's the cleaner temporary solution [1] commit cfe4829be00c77935555d506d86f0f14618fd21f Forward-Port-Of: odoo/enterprise#69773
Currently, an exception is generated when the user tries to open the "Cash Flow Statement" report. Steps to produce an error: - install 'Accounting Reports' - Open Accounting > Configuration > Accounting > Journals - Now delete all journals except "Miscellaneous Operations" - change type of "Miscellaneous Operations" to sales > sale - Click Reporting > click "Cash Flow Statement" >>> exception occurs Stack Trace: ``` SyntaxError: syntax error at or near ")" LINE 28: ...
Original PR description
Currently, an exception is generated when the user tries to open the "Cash Flow Statement" report. Steps to produce an error: - install 'Accounting Reports' - Open Accounting > Configuration >…
Currently, an exception is generated when the user tries to open the "Cash Flow Statement" report.
Steps to produce an error:
- install 'Accounting Reports'
- Open Accounting > Configuration > Accounting > Journals
- Now delete all journals except "Miscellaneous Operations"
- change type of "Miscellaneous Operations" to sales > sale
- Click Reporting > click "Cash Flow Statement" >>> exception occurs
Stack Trace:
```
SyntaxError: syntax error at or near ")"
LINE 28: ... AND account_move_line.account_id NOT IN ((), ())
^
File "odoo/http.py", line 2373, in __call__
response = request._serve_db()
File "odoo/http.py", line 1903, in _serve_db
return self._transactioning(
File "odoo/http.py", line 1966, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1933, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2177, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 223, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 754, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 35, in call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 459, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "home/odoo/src/enterprise/saas-17.4/account_reports/models/account_report.py", line 4872, in get_report_information
'lines': self._get_lines(options, all_column_groups_expression_totals=all_column_groups_expression_totals, warnings=warnings),
File "home/odoo/src/enterprise/saas-17.4/account_reports/models/account_report.py", line 2275, in _get_lines
dynamic_lines = self._get_dynamic_lines(options, all_column_groups_expression_totals, warnings=warnings)
File "home/odoo/src/enterprise/saas-17.4/account_reports/models/account_report.py", line 2705, in _get_dynamic_lines
rslt = self.env[self.custom_handler_model_name]._dynamic_lines_generator(self, options, all_column_groups_expression_totals, warnings=warnings)
File "home/odoo/src/enterprise/saas-17.4/account_reports/models/account_cash_flow_report.py", line 16, in _dynamic_lines_generator
report_data = self._get_report_data(report, options, layout_data)
File "home/odoo/src/enterprise/saas-17.4/account_reports/models/account_cash_flow_report.py", line 57, in _get_report_data
for aml_groupby_account in self._get_liquidity_moves(report, options, currency_table_query, payment_account_ids, cashflow_tag_ids):
File "home/odoo/src/enterprise/saas-17.4/account_reports/models/account_cash_flow_report.py", line 365, in _get_liquidity_moves
self._cr.execute(SQL(' UNION ALL ').join(queries))
File "odoo/sql_db.py", line 347, in execute
res = self._obj.execute(query, params)
```
This is because at the time of query building for getting liquidity moves, it gets an empty tuple from line [1] as we do not have any journals with the type 'bank', 'cash', or 'general'.
This commit will fix the above issue by returning empty report_data when payment_account_ids is empty.
[1] - https://github.com/odoo/enterprise/blob/8fa01948610809d191b75260772782e25ea3a737/account_reports/models/account_cash_flow_report.py#L195
sentry-5555757610
Forward-Port-Of: odoo/enterprise#67928This commit fix a design issue in the hr_payroll where the "Availability in Structure" field was incorrectly positioned among other input types. task-4050183 Forward-Port-Of: odoo/enterprise#69761 Forward-Port-Of: odoo/enterprise#67532
Original PR description
This commit fix a design issue in the hr_payroll where the "Availability in Structure" field was incorrectly positioned among other input types. task-4050183 Forward-Port-Of: odoo/enterprise#69761 Forward-Port-Of: odoo/enterprise#67532
Since #64854 view_model_tree inherited an action on click that was meant only for a specific view this action has been moved to a primary inherited view. Related to task-id: 3861100 backport of odoo/enterprise#68107 Forward-Port-Of: odoo/enterprise#69751
Original PR description
Since #64854 view_model_tree inherited an action on click that was meant only for a specific view this action has been moved to a primary inherited view. Related to task-id: 3861100 backport of odoo/enterprise#68107 Forward-Port-Of: odoo/enterprise#69751