Wednesday, March 26, 2025
61 changes · saas-18.2
Resolved issues and error corrections
This fixes an issue where rapidly switching between pasted links in the editor could cause the link preview to appear blank. The change prevents the link tools from repeatedly reopening and closing, improving reliability when editing descriptions or other rich text fields.
Original PR description
**Problem**: Calling `closeLinkTools` on `link.isConnected` sets the selection, which triggers `selectionchange`, leading to `openLinkTools`, which then calls `closeLinkTools`, causing an infinite loop. **Solution**: In `openLinkTools`, use `this.overlay.close();` to close the link popover without changing the selection. **Steps to reproduce**: 1. Create a new task. 2. Select and copy the task's URL. 3. Paste the URL in the description. 4. Press Enter. 5. Paste the URL again. 6. Click quickly between the two URLs. - **Issue**: Sometimes, the link preview appears blank. **opw-4669353** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Creating a new server action and choosing the Webhook type no longer triggers an error before a model is selected. This prevents an avoidable setup interruption and makes configuring automated actions smoother for users.
Original PR description
When you create a new server action and select the type "Webhook", you get a traceback because no model is set yet on the server action. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Expense search filters now match partial words automatically, making it easier for users to find the records they need. Users no longer need to know exact terms or add special wildcard characters when searching expenses.
Original PR description
Since the search view are used by final users and they are most of time search on partial words, we don't want to force them to use an exact match or add manually "%" at the beginning and end of their search. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Scheduled cleanup now avoids competing with active scheduled jobs for the same records. This reduces the chance of background jobs waiting on database locks, improving reliability without changing user-facing workflows.
Original PR description
When a cron is starting, it removes all triggers that are in the past and the autovacuum job on triggers removes all triggers older than a week. When the autovacuum tries to run, there is a high probability that a cron is already running and rows are being deleted/locked. We change the autovacuum so that it only removes the records for inactive cron jobs because the active ones will already be removed when that job will start. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures appraisal reports use the correct colors for their current status after status names changed. It helps users quickly read appraisal report states correctly and avoids misleading visual indicators.
Original PR description
ref: <https://runbot.odoo.com/odoo/error/161511> - fix the `COLORS_BY_STATE` with the new state keys
This fix ensures signature fields keep their intended alignment when users place them on documents. It helps make prepared signing documents look more consistent and reduces manual adjustment after adding fields.
Original PR description
This commit addresses post merge fixes in the UI after the big rework of the sidebar and UI improvements: - Fix alignment of the sign items when being dropped, as from now on sign items follow the pre-defined alignment and are not forced to be rendered in the center anymore. task-4555838
This change removes a test setup step that reused an existing account code, preventing duplicate-code conflicts during automated validation. It helps keep accounting report test runs stable without changing day-to-day user functionality.
Original PR description
The Issue: Prior to this commit, when changing the account code for Outstanding Receipts for the test test_cash_basis_general_ledger_load_more_lines, the code '101403' already exists. The Fix: remove the line that force writing the existing account code runbot-134665
Miscellaneous changes
For forensics purposes, having a log when users are doing an export is useful. In this revision, the logger is put in the controller. It would be better to put it in a lower level method, such the `export_data` public method on the models. However: - The domain is only available in the controller. `export_data` does not receive the domain in its params. Putting the logger in `export_data` would therefore lead to the inability to log the domain. Or we would need to do one logger in the con
Original PR description
For forensics purposes, having a log when users are doing an export is useful. In this revision, the logger is put in the controller. It would be better to put it in a lower level method, such the…
For forensics purposes, having a log when users are doing an export is useful. In this revision, the logger is put in the controller. It would be better to put it in a lower level method, such the `export_data` public method on the models. However: - The domain is only available in the controller. `export_data` does not receive the domain in its params. Putting the logger in `export_data` would therefore lead to the inability to log the domain. Or we would need to do one logger in the controller just for the domain, and a second logger in `export_data`. - During an export using a group by (and without import compatibility) `export_data` is called recursively, in `insert_leaf`. Hence, if the logger would be put in `export_data`, there would be one log per group, therefore bloating the logs. Hence, for stable versions, the decision taken is to put the log in the controller rather than in a lower level method. It's better than nothing. A rework of the API of `export_data` is planned in master to solve the above concerns. Forward-Port-Of: odoo/odoo#203388 Forward-Port-Of: odoo/odoo#202568
When there are lots of `product_template_attribute_lines` the computation of the `product_tmpl_ids` field of `product.attribute` can take a bit of time. This in turn slows down the editing of attribute/attribute_values on product.template's FormView. This commit changes the compute method by first doing a `_read_group` to retrieve the templates by attribute. This skips the `__get__` call on `product_attribute.product_attribute_line_ids`. A compound index on `product_template_attribute_line`
Original PR description
When there are lots of `product_template_attribute_lines` the computation of the `product_tmpl_ids` field of `product.attribute` can take a bit of time. This in turn slows down the editing of attribute/attribute_values on product.template's FormView. This commit changes the compute method by first doing a `_read_group` to retrieve the templates by attribute. This skips the `__get__` call on `product_attribute.product_attribute_line_ids`. A compound index on `product_template_attribute_line` is also added to speedup the `_read_group` mentioned above. #### speedup Customer database with close to 900 000 product_template_attribute_lines and an average of 100 000 product_template_attribute_lines by attribute_id. Adding a new attribute in a template FormView: 3s -> 500ms. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203168
Before this commit, when doing the reconciliation of a statement line with an invoice without a journal entry, we were trying to find a matching payment for that statement line and setting it as paid. However, it didn't do the opposite when breaking the matching between the invoice and the statement line. This commit adds that opposite behavior. Forward-Port-Of: odoo/odoo#202692
Original PR description
Before this commit, when doing the reconciliation of a statement line with an invoice without a journal entry, we were trying to find a matching payment for that statement line and setting it as paid. However, it didn't do the opposite when breaking the matching between the invoice and the statement line. This commit adds that opposite behavior. Forward-Port-Of: odoo/odoo#202692
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202982 Forward-Port-Of: odoo/odoo#202230
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202982 Forward-Port-Of: odoo/odoo#202230
When we have an Analytic Plan being Mandatory, confirming an invoice from the form view, if it has a line without an Analytic distribution, correctly raises a ValidationError. Confirming invoices from the list view does not raise the same error, yet it should. To replicate: 1. [Activate](https://www.odoo.com/documentation/18.0/applications/finance/accounting/reporting/analytic_accounting.html) Analytic accounting: a. Install `accountant` b. In Settings, activate Analytic Accounting
Original PR description
When we have an Analytic Plan being Mandatory, confirming an invoice from the form view, if it has a line without an Analytic distribution, correctly raises a ValidationError. Confirming invoices…
When we have an Analytic Plan being Mandatory, confirming an invoice from the form view, if it has a line without an Analytic distribution, correctly raises a ValidationError. Confirming invoices from the list view does not raise the same error, yet it should. To replicate: 1. [Activate](https://www.odoo.com/documentation/18.0/applications/finance/accounting/reporting/analytic_accounting.html) Analytic accounting: a. Install `accountant` b. In Settings, activate Analytic Accounting c. Create an Analytic plan (with an Analytic account associated) 2. Set its default applicability to mandatory 3. Create two invoices, remove the analytic distribution from one of the lines in one invoice. 4. In the invoices list view, select both newly created invoices, click on Actions > Confirm Entries 5. Click Confirm 6. The invoices were posted, even though they have no analytic distributions. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4603919) opw-4603919 Forward-Port-Of: odoo/odoo#203338 Forward-Port-Of: odoo/odoo#201560
- Filter pack_lot_ids to exclude non-numeric IDs when syncing data from the UI, ensuring lot numbers are not duplicated on the receipt. task-id: 4633355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201107
Original PR description
- Filter pack_lot_ids to exclude non-numeric IDs when syncing data from the UI, ensuring lot numbers are not duplicated on the receipt. task-id: 4633355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201107
Before this commit, a a race condition could lead to a missing channel for a rtcSession (for example if the channel is removed and that knowledge is obtained before the removal of the session). Forward-Port-Of: odoo/odoo#203413
Original PR description
Before this commit, a a race condition could lead to a missing channel for a rtcSession (for example if the channel is removed and that knowledge is obtained before the removal of the session). Forward-Port-Of: odoo/odoo#203413
**Problem**: When adding text followed by **"Shift+Enter"** and a long image, clicking to edit the text triggers `scrollTo`, causing the view to jump to the image instead. This makes it impossible to edit the text, as the selection keeps switching to the image. This happens because, on `pointerdown`, the selection changes to text, triggering a scroll. On `pointerup`, the target becomes the image, changing the selection again. **Solution**: Scroll only if more than half of the content is
Original PR description
**Problem**: When adding text followed by **"Shift+Enter"** and a long image, clicking to edit the text triggers `scrollTo`, causing the view to jump to the image instead. This makes it impossible to edit the text, as the selection keeps switching to the image. This happens because, on `pointerdown`, the selection changes to text, triggering a scroll. On `pointerup`, the target becomes the image, changing the selection again. **Solution**: Scroll only if more than half of the content is not visible. **Steps to Reproduce**: 1. Add text and press **"Shift+Enter"**. 2. Insert a long image below the text. 3. Try to edit the text: - **Issue**: View scrolls to the image, making text uneditable. opw-4606741 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203315 Forward-Port-Of: odoo/odoo#200161
In a form view with a many2one field using the res_partner_many2one widget (e.g. in the "Contacts" form view) where this field is set, remove the value. Before this commit, this didn't trigger a change in the model. As a matter of fact, the "save" button in the control panel (the small cloud) wasn't displayed. As a consequence, such a change couldn't be saved. This commit fixes the issue. OPW-4669817 Description of the issue/feature this PR addresses: Current behavior before PR: D
Original PR description
In a form view with a many2one field using the res_partner_many2one widget (e.g. in the "Contacts" form view) where this field is set, remove the value. Before this commit, this didn't trigger a change in the model. As a matter of fact, the "save" button in the control panel (the small cloud) wasn't displayed. As a consequence, such a change couldn't be saved. This commit fixes the issue. OPW-4669817 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203277
Issue: if user does not have employee in the current company in managment the allocation will try to load his employee calendar which raise the error Fix: check if there is an employee for the user before trying to fetch the data Task: 4660184 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203318 Forward-Port-Of: odoo/odoo#202643
Original PR description
Issue: if user does not have employee in the current company in managment the allocation will try to load his employee calendar which raise the error Fix: check if there is an employee for the user before trying to fetch the data Task: 4660184 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203318 Forward-Port-Of: odoo/odoo#202643
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode a
Original PR description
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce:…
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode app and come back to the record. #### > The subline related to SN1 displays now a demand of 0. A new barcode line has been created with a demand of 1 for SN1. In short an extra record was created unecessarily. ### Cause of the issue: In the barcode app the demand of each line is measured by the quantity present on its move lines. In our set up, the move is related to 2 moves lines with a quantity of 1 that are not picked. Scanning SN1 will update the qty_done of its line to 1. As such, the move line quantity will be set from 1 to 1 and the move line will be picked: https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move_line.py#L58-L61 In turns, the picked state of the move will be set to picked: https://github.com/odoo/odoo/blob/7bc38562f1988ba15525c04168e30c06a8f1d33c/addons/stock/models/stock_move.py#L208-L212 Now, editing the qty done of the move once more from 1 to 0 to reset the reservation will not revert the process for 2 reasons: 1. The quantity of the move line will be reset form its current value to 0, altering the demand of the barcode line to 0. 2. Even if the move line was unpicked in this process, the picked compute method of the move will never reset the picked state as the compute method can only set a True value. We therefore end up with a picked move without any picked move line and for which one of the picked move line has a quantity of 0. Now, leaving the barcode app will launch the split_uncompleted_moves method in order to not lose the changes made to the record and since the move is picked for the wrong reason, the move will be splitted in 2 instead of escaping the split process. https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move.py#L21-L22 Enterprise: https://github.com/odoo/enterprise/pull/80675 opw-4600565 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202882 Forward-Port-Of: odoo/odoo#200167
Before this commit: When sample data was visible in the view, the pager was also displayed, showing a record count, which could be misleading. After this commit: Now, when sample data is visible, the pager is hidden. Task-4489033 Forward-Port-Of: odoo/odoo#203336 Forward-Port-Of: odoo/odoo#200624
Original PR description
Before this commit: When sample data was visible in the view, the pager was also displayed, showing a record count, which could be misleading. After this commit: Now, when sample data is visible, the pager is hidden. Task-4489033 Forward-Port-Of: odoo/odoo#203336 Forward-Port-Of: odoo/odoo#200624
Before this commit, the error message shown when a gift card had already been sold contained incorrect grammar: "This Gift card is already been sold." opw-4656131 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203140
Original PR description
Before this commit, the error message shown when a gift card had already been sold contained incorrect grammar: "This Gift card is already been sold." opw-4656131 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203140
Before this commit: ====================== Loyalty points were awarded for all orders, including those from UrbanPiper (online orders). This allowed customers to earn loyalty points both for dine-in and online orders, leading to earning loyalty points twice. Since online food delivery platforms have their own reward systems, loyalty points should not be granted for these orders. After this commit: ==================== Loyalty points and rewards are now excluded for UrbanPiper orders. T
Original PR description
Before this commit: ====================== Loyalty points were awarded for all orders, including those from UrbanPiper (online orders). This allowed customers to earn loyalty points both for dine-in and online orders, leading to earning loyalty points twice. Since online food delivery platforms have their own reward systems, loyalty points should not be granted for these orders. After this commit: ==================== Loyalty points and rewards are now excluded for UrbanPiper orders. Task-4585821 Forward-Port-Of: odoo/odoo#203322 Forward-Port-Of: odoo/odoo#198509
Same issue as in https://github.com/odoo/odoo/commit/77c921586efbaaf93ea6d9bba399716c9d861c8c It's not possible to create coins/bills with an accuracy greater than 2 but some countries need more than 2 decimals. The decimal precision was reduced with this commit for cleaning purposes: https://github.com/odoo/odoo/commit/96a2478d0dd8342b5278d123b59b1baed1f52d46 opw-4640800 Forward-Port-Of: odoo/odoo#202504
Original PR description
Same issue as in https://github.com/odoo/odoo/commit/77c921586efbaaf93ea6d9bba399716c9d861c8c It's not possible to create coins/bills with an accuracy greater than 2 but some countries need more than 2 decimals. The decimal precision was reduced with this commit for cleaning purposes: https://github.com/odoo/odoo/commit/96a2478d0dd8342b5278d123b59b1baed1f52d46 opw-4640800 Forward-Port-Of: odoo/odoo#202504
Some users are encountering access error when opening the pos from a child company Steps to reproduce: ------------------- * Create a child company for "My Belgian Company" * Register this company for the user Marc Demo * Create a shop in the brach * Now connect as Marc Demo * Try to open the PoS > Observation: Access error Why the fix: ------------ Account chart template are only defined in the parent company. opw-4644042 Forward-Port-Of: odoo/odoo#202506
Original PR description
Some users are encountering access error when opening the pos from a child company Steps to reproduce: ------------------- * Create a child company for "My Belgian Company" * Register this company for the user Marc Demo * Create a shop in the brach * Now connect as Marc Demo * Try to open the PoS > Observation: Access error Why the fix: ------------ Account chart template are only defined in the parent company. opw-4644042 Forward-Port-Of: odoo/odoo#202506
Before this commit, as a public user in website chatter: - Trying to add a reaction would result in a traceback. - The link created from the "Copy Link" action would lead to an unauthorized page. Steps to reproduce: - Install website module and add course page - As public user open a course - Go to reviews - Add a reaction to any message -> traceback - Copy link to any message - Open said link -> unauthorized page This commit fixes the issues by adding a "can_react" field in the po
Original PR description
Before this commit, as a public user in website chatter: - Trying to add a reaction would result in a traceback. - The link created from the "Copy Link" action would lead to an unauthorized page. Steps to reproduce: - Install website module and add course page - As public user open a course - Go to reviews - Add a reaction to any message -> traceback - Copy link to any message - Open said link -> unauthorized page This commit fixes the issues by adding a "can_react" field in the portal store init. task-4551910 Forward-Port-Of: odoo/odoo#200076 Forward-Port-Of: odoo/odoo#197508
This commit fixes improper interpolation of SCSS variables assigned to CSS custom properties, leading to malformed generated CSS rules (i.e. `--my-prop: $my-value` in the CSS bundle). Quote from the SASS/SCSS documentation: > CSS custom properties, also known as CSS variables, have an unusual > declaration syntax: they allow almost any text at all in their > declaration values. (...) Because of this, Sass parses custom property > declarations differently than other property declarations.
Original PR description
This commit fixes improper interpolation of SCSS variables assigned to CSS custom properties, leading to malformed generated CSS rules (i.e. `--my-prop: $my-value` in the CSS bundle). Quote from the SASS/SCSS documentation: > CSS custom properties, also known as CSS variables, have an unusual > declaration syntax: they allow almost any text at all in their > declaration values. (...) Because of this, Sass parses custom property > declarations differently than other property declarations. All tokens, > including those that look like SassScript, are passed through to CSS > as-is. The only exception is interpolation, which is the only way to > inject dynamic values into a custom property. Reference: https://sass-lang.com/documentation/style-rules/declarations/#custom-properties Forward-Port-Of: odoo/odoo#203279 Forward-Port-Of: odoo/odoo#203134
The aim of this commit is to fix a display bug where the shipping adress is overlapping the address element when too many address lines are present Steps to reproduce: - Install l10n_din5008_sale - Configure the document to use the din5008 layout - Create a UK customer with all the adress fields filled + phone - Create a quotation for that customer and Print the PDF Quote opw-4575257  Becomes
Original PR description
The aim of this commit is to fix a display bug where the shipping adress is overlapping the address element when too many address lines are present Steps to reproduce: - Install l10n_din5008_sale - Configure the document to use the din5008 layout - Create a UK customer with all the adress fields filled + phone - Create a quotation for that customer and Print the PDF Quote opw-4575257  Becomes  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201850
When applying a global discount on a sale order, the fixed taxe shouldn't be consider in a discount. It might be counter intuitive, as a x% discount isn't a discount on the total amount but of the total fixed taxe excluded amount, but is how it should be done. Consider a 100% discount with a product with an ecotax: the ecotax needs to be paid, the sale order can never go down under that amount, yet the product is 100% discounted. opw-4584784 Forward-Port-Of: odoo/odoo#202781 Forward-Port-Of:
Original PR description
When applying a global discount on a sale order, the fixed taxe shouldn't be consider in a discount. It might be counter intuitive, as a x% discount isn't a discount on the total amount but of the total fixed taxe excluded amount, but is how it should be done. Consider a 100% discount with a product with an ecotax: the ecotax needs to be paid, the sale order can never go down under that amount, yet the product is 100% discounted. opw-4584784 Forward-Port-Of: odoo/odoo#202781 Forward-Port-Of: odoo/odoo#202024
The automatic detection of maximum email size was not working anymore. After this commit, the `esmtp_features` attribute is added, to ensure reliable detection of the email's size. opw-4673107 cc: @Julien00859 @Abridbus Forward-Port-Of: odoo/odoo#203326
Original PR description
The automatic detection of maximum email size was not working anymore. After this commit, the `esmtp_features` attribute is added, to ensure reliable detection of the email's size. opw-4673107 cc: @Julien00859 @Abridbus Forward-Port-Of: odoo/odoo#203326
When using stripe in kiosk it was not working Steps to reproduce: ------------------- * Setup stripe * Setup a PoS kiosk * Add a stripe payment method to a kiosk > Observation: There is an error and nothing is sent to the terminal Why the fix: ------------ Instead of using `False` when calling `_verify_authorization` we should send an empty object. opw-4643323 Forward-Port-Of: odoo/odoo#203269
Original PR description
When using stripe in kiosk it was not working Steps to reproduce: ------------------- * Setup stripe * Setup a PoS kiosk * Add a stripe payment method to a kiosk > Observation: There is an error and nothing is sent to the terminal Why the fix: ------------ Instead of using `False` when calling `_verify_authorization` we should send an empty object. opw-4643323 Forward-Port-Of: odoo/odoo#203269
### Description: When opening the replenishment view, the locations are checked to find if some products need to be refilled. If one product needs to be refilled, it will check if an orderpoint already exists, otherwise, it will create it. The issue is that the checks are currently done on all the orderpoints, even the ones not related to the product. The performances are worsened by the compute on `qty_to_order` triggered on all the orderpoints. ### Fix: To fix that, we can add a leaf
Original PR description
### Description: When opening the replenishment view, the locations are checked to find if some products need to be refilled. If one product needs to be refilled, it will check if an orderpoint already exists, otherwise, it will create it. The issue is that the checks are currently done on all the orderpoints, even the ones not related to the product. The performances are worsened by the compute on `qty_to_order` triggered on all the orderpoints. ### Fix: To fix that, we can add a leaf to the domain so that we only retrieve the orderpoints related to the products that need to be refilled. This will reduce the number of records on which we call the `qty_to_order` compute. ### Benchmark (in 18): | # of orderpoint | Before | After | | --------------- | ------ | ----- | | 44145 | 6:52 | 6s | | 22145 | 3:38 | 6s | ### Reference: opw-4618887 Forward-Port-Of: odoo/odoo#203276
Before this PR, access error could occur when the live chat operator left and the visitor refreshed the page. This occur because one can access a partner as long as there is a common channel, which might not be the case after the operator left. Steps to reproduce the issue: - Open two browsers: admin, visitor on the website. - Navigate to a tracked page with the visitor (e.g. contactus and back on home page): this will create a website visitor which is a condition for the "requested_by_oper
Original PR description
Before this PR, access error could occur when the live chat operator left and the visitor refreshed the page. This occur because one can access a partner as long as there is a common channel, which…
Before this PR, access error could occur when the live chat operator left and the visitor refreshed the page. This occur because one can access a partner as long as there is a common channel, which might not be the case after the operator left. Steps to reproduce the issue: - Open two browsers: admin, visitor on the website. - Navigate to a tracked page with the visitor (e.g. contactus and back on home page): this will create a website visitor which is a condition for the "requested_by_operator" field to be added. - Open a chat, send a message. - Leave with admin. - Reload the page with the visitor. - It's not possible to open a chat anymore due to an access error. This PR adds a missing sudo when computing "requested_by_operator" on channel which solves the issue. This PR also adds a test to ensure that `channel._to_store` still works after the operator left, preventing other errors in the future. task-4663990 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203074
**Problem**: After commit [https://github.com/odoo-dev/odoo/commit/80fde992370e4474c27a383a61814ce1159f550c](https://github.com/odoo/odoo/commit/80fde992370e4474c27a383a61814ce1159f550c), if all tabs in a "Tabs" block are removed and saved, the next time the editor is opened, there is a traceback because `navEl` is `null`. **Solution**: Use the first value from `possibleValues` in case `navEl` is `null` this will prevent traceback in that case but does not prevent reaching the no tab si
Original PR description
**Problem**: After commit [https://github.com/odoo-dev/odoo/commit/80fde992370e4474c27a383a61814ce1159f550c](https://github.com/odoo/odoo/commit/80fde992370e4474c27a383a61814ce1159f550c), if all tabs…
**Problem**: After commit [https://github.com/odoo-dev/odoo/commit/80fde992370e4474c27a383a61814ce1159f550c](https://github.com/odoo/odoo/commit/80fde992370e4474c27a383a61814ce1159f550c), if all tabs in a "Tabs" block are removed and saved, the next time the editor is opened, there is a traceback because `navEl` is `null`. **Solution**: Use the first value from `possibleValues` in case `navEl` is `null` this will prevent traceback in that case but does not prevent reaching the no tab situation (Still able to remove all tabs). **Steps to Reproduce**: 1. Add a **"Tabs"** block. 2. Click inside the first tab to edit its content. 3. Press **Backspace** repeatedly until the tab is completely removed. 4. Repeat for all remaining tabs until none are left. 5. Save and exit the editor. 6. Open the editor again. - **Issue**: A traceback occurs due to `navEl` being `null`. **opw-4608389** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202476
When putting products in pack from the picking FormView `picking._put_in_pack` is eventually called. This method does a few things, amongst those is a write on picking.move_line_ids and another is the creation of a new package level. Both of these can be a bit slow when the picking's number of move_lines gets bigger. This can happen for SN tracked products for instance. In a database with 1800 move_lines, each _put_in_pack call takes around 1.5s, which can become cumbersome when customers are u
Original PR description
When putting products in pack from the picking FormView `picking._put_in_pack` is eventually called. This method does a few things, amongst those is a write on picking.move_line_ids and another is…
When putting products in pack from the picking FormView `picking._put_in_pack` is eventually called. This method does a few things, amongst those is a write on picking.move_line_ids and another is the creation of a new package level. Both of these can be a bit slow when the picking's number of move_lines gets bigger. This can happen for SN tracked products for instance. In a database with 1800 move_lines, each _put_in_pack call takes around 1.5s, which can become cumbersome when customers are using multiple packages. Most of this slowness is coming from two things. The first one is stock.quants synchronization when writing on move.lines. The propose solution in this commit is to skip this synchronization when the only value in the vals dict is `result_package_id`. We can do that because this value is not used in the first quants synchronization of the write method. The second one is a write of `location_dest_id` on the picking's move_ids and move_line_ids in `package_level.create`. Since the package_level.location_dest_id value is coming from the `move_line_ids` value in `_put_in_pack`, this commit adds a context key to skip this write in case we're coming from `picking._put_in_pack` #### speedup In a 17.4 customer database, putting in pack for a picking with 1800 move_lines: 1.5s -> 90ms --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202967 Forward-Port-Of: odoo/odoo#200767
Steps to reproduce ================== - Go to the products kanban view - Open a record - Go back to the kanban view => Every product image is downloaded again Cause of the issue ================== There is a unique query param in the url as the browser doesn't fetch twice the same image from the same url in the same session. For non related fields, we use the last record update as a unique timestamp. For related fields, since we don't have the information about the last update
Original PR description
Steps to reproduce ================== - Go to the products kanban view - Open a record - Go back to the kanban view => Every product image is downloaded again Cause of the issue ==================…
Steps to reproduce
==================
- Go to the products kanban view
- Open a record
- Go back to the kanban view => Every product image is downloaded again
Cause of the issue
==================
There is a unique query param in the url as the browser doesn't fetch twice the same image from the same url in the same session.
For non related fields, we use the last record update as a unique timestamp.
For related fields, since we don't have the information about the last update, we generate a unique timestamp when instanciating an ImageField component.
It can happen that a related field points to the same model.
This is the case here where the product kanban view uses the "image_128" field.
```py
image_1920 = fields.Image("Image", max_width=1920, max_height=1920)
image_128 = fields.Image("Image 128", related="image_1920", max_width=128, max_height=128, store=True)
```
Solution
========
When a field is related but the relation points to the same model, we can still use the last record update
We can try to detect this by checking if there is a dot in the related path.
Forward-Port-Of: odoo/odoo#203292When self ordering is setup with pay after meal, and two users scans the same table. The order is now shared between the two users. taskId: 4489980 Forward-Port-Of: odoo/odoo#198405 Forward-Port-Of: odoo/odoo#197569
Original PR description
When self ordering is setup with pay after meal, and two users scans the same table. The order is now shared between the two users. taskId: 4489980 Forward-Port-Of: odoo/odoo#198405 Forward-Port-Of: odoo/odoo#197569
Before this fix, a user who left a channel could be re-added unexpectedly. Steps to reproduce: - Join a channel. - Leave using the `/leave` command. - Repeat until the channel reappears in the sidebar. This is caused by a race condition: non-members can still access channels, but certain actions (like typing) require membership and members are created when needed. If `action_unfollow` is called before `notify_typing`, the member will be re-created. This is especially problematic
Original PR description
Before this fix, a user who left a channel could be re-added unexpectedly. Steps to reproduce: - Join a channel. - Leave using the `/leave` command. - Repeat until the channel reappears in the sidebar. This is caused by a race condition: non-members can still access channels, but certain actions (like typing) require membership and members are created when needed. If `action_unfollow` is called before `notify_typing`, the member will be re-created. This is especially problematic when setting `is_typing` to `False` since it is triggered from the composer component's `onDestroy` lifecycle or after 5 seconds without activity which can easily come after an unfollow action. This fix ensures a member is only created when actively typing, preventing unintended re-creation after leaving. Forward-Port-Of: odoo/odoo#203116
The werkzeug version is parsed by using the `__version__` attribute which is deprecated since 3.0.0. This leads to an error when running Odoo in Debian trixie that provides werkzeug 3.1.3. See - pallets/werkzeug#2772 - https://packages.debian.org/trixie/python-werkzeug-doc > Also remove the unused import of `warning` Forward-Port-Of: odoo/odoo#203219 Forward-Port-Of: odoo/odoo#203143
Original PR description
The werkzeug version is parsed by using the `__version__` attribute which is deprecated since 3.0.0. This leads to an error when running Odoo in Debian trixie that provides werkzeug 3.1.3. See - pallets/werkzeug#2772 - https://packages.debian.org/trixie/python-werkzeug-doc > Also remove the unused import of `warning` Forward-Port-Of: odoo/odoo#203219 Forward-Port-Of: odoo/odoo#203143
Currently a `ParseError` is arising when the user installs the `pos_event` module after deleting `Event Registration` product from the products. Steps to reproduce: --- - Install `event_product` application (without demo data). - Delete `Event Registration` from products - Now install `pos_event` module Traceback: --- ``` Exception: Cannot update missing record 'event_product.product_product_event' ParseError: while parsing /home/odoo/src/odoo/saas-18.1/addons/pos_event/data/even
Original PR description
Currently a `ParseError` is arising when the user installs the `pos_event` module after deleting `Event Registration` product from the products. Steps to reproduce: --- - Install `event_product`…
Currently a `ParseError` is arising when the user installs the `pos_event` module after deleting `Event Registration` product from the products.
Steps to reproduce:
---
- Install `event_product` application (without demo data).
- Delete `Event Registration` from products
- Now install `pos_event` module
Traceback:
---
```
Exception: Cannot update missing record 'event_product.product_product_event'
ParseError: while parsing /home/odoo/src/odoo/saas-18.1/addons/pos_event/data/event_product_data.xml:4, somewhere inside <record id="event_product.product_product_event" model="product.product">
<field name="available_in_pos">True</field>
<field name="pos_categ_ids" eval="[(6, 0, [ref('pos_event.pos_category_event')])]"/>
</record>
```
The error occurs because the user deleted the product, and then tried to install the other module.
This commit solves the above issue by using `forcecreate="False"` to bypass record creation if it violates checks.
https://github.com/odoo/odoo/blob/f5378fadf910d193cbb44a4d1c10a5a15d8b9a51/odoo/tools/convert.py#L364
sentry-5731062091
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#199010Steps to reproduce: - Create SO with two products. - Apply 10% discount to both lines. - Confirm SO and create an invoice. - Confirm invoice for only one SOL. - Go to 'Orders to Invoice' and add uninvoiced-balance field to the view using Studio. - Check value of the uninvoiced-balance field. Issue: - The uninvoiced-balance field is not calculated correctly. Cause: - line.price_total already includes the discount, so applying the discount again results in an incorrect calculation.
Original PR description
Steps to reproduce: - Create SO with two products. - Apply 10% discount to both lines. - Confirm SO and create an invoice. - Confirm invoice for only one SOL. - Go to 'Orders to Invoice' and add uninvoiced-balance field to the view using Studio. - Check value of the uninvoiced-balance field. Issue: - The uninvoiced-balance field is not calculated correctly. Cause: - line.price_total already includes the discount, so applying the discount again results in an incorrect calculation. Fix: - Remove price_reduce and directly multiply unit_price_total by qty_to_invoice to ensure the correct calculation of amount_to_invoice. opw-4567563 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202821
When looping inside of the `while True` loop because of concurrency, the `sequence_prefix` was not correctly set. This was breaking the behavior of `sequence.mixin` because we were not able to get the last number. Partial revert of 10565c6968a5d0f285f93c4bdc610350999a88e3 Forward-Port-Of: odoo/odoo#203291
Original PR description
When looping inside of the `while True` loop because of concurrency, the `sequence_prefix` was not correctly set. This was breaking the behavior of `sequence.mixin` because we were not able to get the last number. Partial revert of 10565c6968a5d0f285f93c4bdc610350999a88e3 Forward-Port-Of: odoo/odoo#203291
Fw-port Transifex translations from major version to non-major versions Also copied changes done in v18 by https://github.com/odoo/enterprise/commit/717db6525383a181ae0d211989824ddd1413712b In Swiss localization: - Re-added in help descriptions that were removed in field overrides since they nicely describe what the codes represent - removed f-string that wasn't exporting with older version of Babel as it wasn't needed IMPORTANT: as of saas-18.2, xml translations are possible, but
Original PR description
Fw-port Transifex translations from major version to non-major versions Also copied changes done in v18 by https://github.com/odoo/enterprise/commit/717db6525383a181ae0d211989824ddd1413712b In Swiss…
Fw-port Transifex translations from major version to non-major versions Also copied changes done in v18 by https://github.com/odoo/enterprise/commit/717db6525383a181ae0d211989824ddd1413712b In Swiss localization: - Re-added in help descriptions that were removed in field overrides since they nicely describe what the codes represent - removed f-string that wasn't exporting with older version of Babel as it wasn't needed IMPORTANT: as of saas-18.2, xml translations are possible, but as the current status of the script to convert po translations into xml transations is insufficient for handling fw-porting of Translations, they have been reverted for the Belgian/Swiss payroll localizations. Issues when attempting to use script included: - does not remove existing xml translations - only appears to apply translations to the first translateable term in the xml record (i.e. the `hr.contract.salary.benefit` translations for `description` and `fold_label` are lost) Additionally, by leaving the translations all within the pot/po files, minimal manual work will be needed to fw-port the translations due to more consistent code between versions. Will fix opw-4614757 Forward-Port-Of: odoo/enterprise#82009
Inverse the domain on `subscription_state` from: `not in (selection_values)` -> `in (complement(selection_values))` Using the `in` operator gives Postgres the possibility to use an index on `subscription_state`, which cannot be done with a `not in` domain operator for `Selection` fields. Forward-Port-Of: odoo/enterprise#81703
Original PR description
Inverse the domain on `subscription_state` from: `not in (selection_values)` -> `in (complement(selection_values))` Using the `in` operator gives Postgres the possibility to use an index on `subscription_state`, which cannot be done with a `not in` domain operator for `Selection` fields. Forward-Port-Of: odoo/enterprise#81703
Test that resetting a statement line that was merged with a batch payment also resets the payments, especially for payments without an outstanding account. It wasn't the case because there is no real link between the batch payment and the statement line, and neither between the statement line and the payment itself. The fix is in community. Forward-Port-Of: odoo/enterprise#81839
Original PR description
Test that resetting a statement line that was merged with a batch payment also resets the payments, especially for payments without an outstanding account. It wasn't the case because there is no real link between the batch payment and the statement line, and neither between the statement line and the payment itself. The fix is in community. Forward-Port-Of: odoo/enterprise#81839
The Expense Account column was missing from the Asset Models list view. task-4402982 Forward-Port-Of: odoo/enterprise#81113 Forward-Port-Of: odoo/enterprise#78432
Original PR description
The Expense Account column was missing from the Asset Models list view. task-4402982 Forward-Port-Of: odoo/enterprise#81113 Forward-Port-Of: odoo/enterprise#78432
When automatically sending the receipt in a DE PoS, there was 2 receipt sent to the printer, one of them was empty and showing an error. Steps to reproduce: ------------------- * Setup a fiskaly PoS * Activate the automatic receipt printing * Open PoS and make an order * Pay the order > Observation: Two receipt are sent to the printer, one of them is empty and showing an error. Why the fix: ------------ We were calling the `super` method twice. This was causing the receipt to be p
Original PR description
When automatically sending the receipt in a DE PoS, there was 2 receipt sent to the printer, one of them was empty and showing an error. Steps to reproduce: ------------------- * Setup a fiskaly PoS * Activate the automatic receipt printing * Open PoS and make an order * Pay the order > Observation: Two receipt are sent to the printer, one of them is empty and showing an error. Why the fix: ------------ We were calling the `super` method twice. This was causing the receipt to be printed twice. We now call the `super` method only once. opw-4520201 Forward-Port-Of: odoo/enterprise#81771
- after having long name of signature request linked to the contract, it's conflicting the visual of kanban view - with same path, kanban state can not stable on their position - because of that, to make stability of kanban state changed path too - Before fix: - for long name of signature request, overwrite the kanban view  - After fix - perfectly fit the name in kanban view, - only
Original PR description
- after having long name of signature request linked to the contract, it's conflicting the visual of kanban view - with same path, kanban state can not stable on their position - because of that, to make stability of kanban state changed path too - Before fix: - for long name of signature request, overwrite the kanban view  - After fix - perfectly fit the name in kanban view, - only show the limited character and appending `...`  - OPW-4590161 Forward-Port-Of: odoo/enterprise#79913
As defined in https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/form/form_controller.js#L322 A record save in Form Controllers can be prevented when `onWillSaveRecord` returns `false`. But since the override in `HelpdeskTeamController` did not consider `super`, it would always break such a flow. Forward-Port-Of: odoo/enterprise#81853 Forward-Port-Of: odoo/enterprise#81769
Original PR description
As defined in https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/form/form_controller.js#L322 A record save in Form Controllers can be prevented when `onWillSaveRecord` returns `false`. But since the override in `HelpdeskTeamController` did not consider `super`, it would always break such a flow. Forward-Port-Of: odoo/enterprise#81853 Forward-Port-Of: odoo/enterprise#81769
Since changes made in https://github.com/odoo/enterprise/pull/75552 that changes the semantic of the field 'private_car_missing_days', we need to adapt the value used for simulations from 0 to 20 days (average nb of days in a month) Forward-Port-Of: odoo/enterprise#82022 Forward-Port-Of: odoo/enterprise#81943
Original PR description
Since changes made in https://github.com/odoo/enterprise/pull/75552 that changes the semantic of the field 'private_car_missing_days', we need to adapt the value used for simulations from 0 to 20 days (average nb of days in a month) Forward-Port-Of: odoo/enterprise#82022 Forward-Port-Of: odoo/enterprise#81943
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode a
Original PR description
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce:…
Issue: In Barcode, performing certain operations and then reverting your changes can drastically affect the state of records: "picked" status or the visual demand of the move. ### Steps to reproduce: - Create a storable product tracked by SN. Put 2 SN in stock SN1 and SN2 - Create a delivery order for 2 units and mark as to do. > The two SN's should be reserved on your delivery. - Go to the barcode app, scan SN1. - Edit edit the SN1 line to set the qty back to 0. - Leave the barcode app and come back to the record. #### > The subline related to SN1 displays now a demand of 0. A new barcode line has been created with a demand of 1 for SN1. In short an extra record was created unecessarily. ### Cause of the issue: In the barcode app the demand of each line is measured by the quantity present on its move lines. In our set up, the move is related to 2 moves lines with a quantity of 1 that are not picked. Scanning SN1 will update the qty_done of its line to 1. As such, the move line quantity will be set from 1 to 1 and the move line will be picked: https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move_line.py#L58-L61 In turns, the picked state of the move will be set to picked: https://github.com/odoo/odoo/blob/7bc38562f1988ba15525c04168e30c06a8f1d33c/addons/stock/models/stock_move.py#L208-L212 Now, editing the qty done of the move once more from 1 to 0 to reset the reservation will not revert the process for 2 reasons: 1. The quantity of the move line will be reset form its current value to 0, altering the demand of the barcode line to 0. 2. Even if the move line was unpicked in this process, the picked compute method of the move will never reset the picked state as the compute method can only set a True value. We therefore end up with a picked move without any picked move line and for which one of the picked move line has a quantity of 0. Now, leaving the barcode app will launch the split_uncompleted_moves method in order to not lose the changes made to the record and since the move is picked for the wrong reason, the move will be splitted in 2 instead of escaping the split process. https://github.com/odoo/enterprise/blob/e8c831a540c12019c560cc19abf7abe8785d0e0e/stock_barcode/models/stock_move.py#L21-L22 Community: https://github.com/odoo/odoo/pull/200167 opw-4600565 Forward-Port-Of: odoo/enterprise#81909 Forward-Port-Of: odoo/enterprise#80675
[This commit] updated the XBRL version of the Dutch tax reports from the 2024 version (NT18) to the 2025 version (NT19). However, users still need to be able to submit reports for 2024 using the previous scheme. In order to allow this, we keep both the 2024 and 2025 version of the XBRL template and choose the right one depending on the year of the report. In subsequent years, we can then remove the oldest version and add the newest version. The report IDs are suffixes with the year. [op
Original PR description
[This commit] updated the XBRL version of the Dutch tax reports from the 2024 version (NT18) to the 2025 version (NT19). However, users still need to be able to submit reports for 2024 using the previous scheme. In order to allow this, we keep both the 2024 and 2025 version of the XBRL template and choose the right one depending on the year of the report. In subsequent years, we can then remove the oldest version and add the newest version. The report IDs are suffixes with the year. [opw-4600111](https://www.odoo.com/odoo/project.task/4600111) [opw-4664515](https://www.odoo.com/odoo/project.task/4664515) [This commit]: https://github.com/odoo/enterprise/commit/f1710461f37f3560486a1410f9b9ff420b052b7b Forward-Port-Of: odoo/enterprise#82026
Before this commit, in the restaurant, splitting an order could result in an `IndexError: list index out of range`. This issue occurred due to incorrect handling of order lines during the split process. This fix ensures proper validation and handling of order lines to prevent such errors, improving the stability of the POS system. Steps to reproduce: - Create an order - Refresh browser - Attempt to split the order. - Observe the `IndexError: list index out of range` traceback. opw-4
Original PR description
Before this commit, in the restaurant, splitting an order could result in an `IndexError: list index out of range`. This issue occurred due to incorrect handling of order lines during the split process. This fix ensures proper validation and handling of order lines to prevent such errors, improving the stability of the POS system. Steps to reproduce: - Create an order - Refresh browser - Attempt to split the order. - Observe the `IndexError: list index out of range` traceback. opw-4451836 Forward-Port-Of: odoo/enterprise#78184
When updating the module, the bank data is reloaded. When the account is already trusted (`allow_out_payment == True`), the write fails due to checks to prevent fraud. To fix this, we wrap the data in a `noupdate` to prevent further writes from happening. If ever the account number changes, a new record will be created instead of updating the existing one. Since this account is the default one stipulated on the official belastingdienst site, it can be trusted by default. https://www.belast
Original PR description
When updating the module, the bank data is reloaded. When the account is already trusted (`allow_out_payment == True`), the write fails due to checks to prevent fraud. To fix this, we wrap the data in a `noupdate` to prevent further writes from happening. If ever the account number changes, a new record will be created instead of updating the existing one. Since this account is the default one stipulated on the official belastingdienst site, it can be trusted by default. https://www.belastingdienst.nl/wps/wcm/connect/bldcontenten/belastingdienst/business/payroll_taxes/you_are_not_established_in_the_netherlands_are_you_required_to_withhold_payroll_taxes/when_you_are_going_to_withhold_payroll_taxes/filing_payroll_tax_returns_and_paying_payroll_tax/payment similar: d4595b856045fe9d35a4ac0f28faf12f0d19cd88 Forward-Port-Of: odoo/enterprise#81740
Before this commit a translated mail layout's header would be (e.g. in Dutch) 'Je signature'. After this commit, the model's description is translated (e.g. in Dutch) to 'Je Handtekening'. This replicates the same behavior as the _send_signature_access_mail() method. Impacted versions: 16.0, 17.0 and 18.0 Forward-Port-Of: odoo/enterprise#81269 Forward-Port-Of: odoo/enterprise#77948
Original PR description
Before this commit a translated mail layout's header would be (e.g. in Dutch) 'Je signature'. After this commit, the model's description is translated (e.g. in Dutch) to 'Je Handtekening'. This replicates the same behavior as the _send_signature_access_mail() method. Impacted versions: 16.0, 17.0 and 18.0 Forward-Port-Of: odoo/enterprise#81269 Forward-Port-Of: odoo/enterprise#77948
This commit fixes improper interpolation of SCSS variables assigned to CSS custom properties, leading to malformed generated CSS rules (i.e. `--my-prop: $my-value` in the CSS bundle). Quote from the SASS/SCSS documentation: > CSS custom properties, also known as CSS variables, have an unusual > declaration syntax: they allow almost any text at all in their > declaration values. (...) Because of this, Sass parses custom property > declarations differently than other property declarations.
Original PR description
This commit fixes improper interpolation of SCSS variables assigned to CSS custom properties, leading to malformed generated CSS rules (i.e. `--my-prop: $my-value` in the CSS bundle). Quote from the SASS/SCSS documentation: > CSS custom properties, also known as CSS variables, have an unusual > declaration syntax: they allow almost any text at all in their > declaration values. (...) Because of this, Sass parses custom property > declarations differently than other property declarations. All tokens, > including those that look like SassScript, are passed through to CSS > as-is. The only exception is interpolation, which is the only way to > inject dynamic values into a custom property. Reference: https://sass-lang.com/documentation/style-rules/declarations/#custom-properties Forward-Port-Of: odoo/enterprise#82084 Forward-Port-Of: odoo/enterprise#82012
Minor improvements on HK payroll: - Update legal name for hk office employees - Remove several sensitive data on payslip - Fix demo data error Forward-Port-Of: odoo/enterprise#81819
Original PR description
Minor improvements on HK payroll: - Update legal name for hk office employees - Remove several sensitive data on payslip - Fix demo data error Forward-Port-Of: odoo/enterprise#81819
__Steps to reproduce:__ - Navigate to *Working Schedules* > *Standard 40 hours/week* - Remove the Lunch period - Create overlapping `Morning` and `Afternoon` periods on multiple days - Example: Morning: `08:00` to `12:00`, Afternoon: `12:00` to `16:00` - Go to *Planning* > *New* - Generate a slot within this period as an open shift - Go to the next week and select *Copy previous week* - Traceback error appears: - `TypeError: '<' not supported between instances of 'NoneType' an
Original PR description
__Steps to reproduce:__ - Navigate to *Working Schedules* > *Standard 40 hours/week* - Remove the Lunch period - Create overlapping `Morning` and `Afternoon` periods on multiple days - Example:…
__Steps to reproduce:__ - Navigate to *Working Schedules* > *Standard 40 hours/week* - Remove the Lunch period - Create overlapping `Morning` and `Afternoon` periods on multiple days - Example: Morning: `08:00` to `12:00`, Afternoon: `12:00` to `16:00` - Go to *Planning* > *New* - Generate a slot within this period as an open shift - Go to the next week and select *Copy previous week* - Traceback error appears: - `TypeError: '<' not supported between instances of 'NoneType' and 'datetime.datetime'` __Description of the issue:__ - In Planning, `calender._attendance_intervals_batch` function returns dict() of `workInterval`, which does not merge overlapping intervals. The `_merge` function in `Intervals` assumes input intervals are already merged, This mismatch caused issues in the planning app when unmerged overlapping intervals were passed to `_merge` __Description of the solution:__ - Convert `workInterval` instances to `Intervals` by passing `workInterval._items` directly to `Intervals`, as it performs merging on overlapping intervals during instantiation. - bug introduced in: [#f283540][1] - opw-4282039 [1]:https://github.com/odoo/odoo/commit/f283540336b29037fe8af9c1a951c3d27c941b3d#diff-357c95d58ea67c00f24d3a4c5a8a987041c42de13ca9f5535e7bb250b2927af6L214 Forward-Port-Of: odoo/enterprise#78499 Forward-Port-Of: odoo/enterprise#73618
When the name of the partner is too long, we truncate the name but we should have added text-no-wrap on the date and amount. opw-4502699 Forward-Port-Of: odoo/enterprise#81316
Original PR description
When the name of the partner is too long, we truncate the name but we should have added text-no-wrap on the date and amount. opw-4502699 Forward-Port-Of: odoo/enterprise#81316
Fixed the `Request Owner` field to list all users in the selected companies. The previous domain was based on `company_id`, which was computed from the selected `category_id`. However, if no category was selected (`category_id` was null), no `request_owner_id` was listed. The new fix computes all selected companies from `self.env`. task-4637199 Forward-Port-Of: odoo/enterprise#82028 Forward-Port-Of: odoo/enterprise#81096
Original PR description
Fixed the `Request Owner` field to list all users in the selected companies. The previous domain was based on `company_id`, which was computed from the selected `category_id`. However, if no category was selected (`category_id` was null), no `request_owner_id` was listed. The new fix computes all selected companies from `self.env`. task-4637199 Forward-Port-Of: odoo/enterprise#82028 Forward-Port-Of: odoo/enterprise#81096
When canceling a payment linked to an entry, we try to unlink the entry, but we end up in the following constains: `ir_attachment._unlink_except_cfdi_document` Steps: - Create, confirm an invoice and sent cfdi - Register a payment with `Por Definir` as payment method - Click on `Update Payments` - On CFDI tab, click on `Force CFDI` on payment line - Go to the payment - Reset it to draft and cancel it -> Error: `You can't unlink an attachment being an EDI document sent to the gover
Original PR description
When canceling a payment linked to an entry, we try to unlink the entry, but we end up in the following constains: `ir_attachment._unlink_except_cfdi_document` Steps: - Create, confirm an invoice and sent cfdi - Register a payment with `Por Definir` as payment method - Click on `Update Payments` - On CFDI tab, click on `Force CFDI` on payment line - Go to the payment - Reset it to draft and cancel it -> Error: `You can't unlink an attachment being an EDI document sent to the government.` Fix: Backport of https://github.com/odoo-dev/enterprise/commit/6f21aedf1a107acb4c89f7a8264171597068e102 opw-4644528 Forward-Port-Of: odoo/enterprise#82001
Invalid values were not being validated before sending to the FedEx REST API. Some values were longer than allowed and some states were not using the correct codes. Length limits were found from the FedEx REST API docs and the correct Indian state codes were provided by FedEx support directly. Added a mapping for Mexican states and one Indian state that did not have the correct state codes. State codes for Mexico were from the API specifications page and updated state codes for India were p
Original PR description
Invalid values were not being validated before sending to the FedEx REST API. Some values were longer than allowed and some states were not using the correct codes. Length limits were found from the FedEx REST API docs and the correct Indian state codes were provided by FedEx support directly. Added a mapping for Mexican states and one Indian state that did not have the correct state codes. State codes for Mexico were from the API specifications page and updated state codes for India were provided from FedEx support. opw-4461150 Forward-Port-Of: odoo/enterprise#81977 Forward-Port-Of: odoo/enterprise#79617
Steps to reproduce the bug: - Install l10n_es_real_estate module - Create a customer invoice on the accounting app - Invoice's AEAT data should be real estate type for mod347 doc - Generate the BOE of tax report document of mod 347 Traceback is thrown while generating the boe of the mod347 document, the traceback is for an issue related to the param of the operation key and that was because the function _call_on_partner_sublines is run for each real estate invoice and it has a callback
Original PR description
Steps to reproduce the bug: - Install l10n_es_real_estate module - Create a customer invoice on the accounting app - Invoice's AEAT data should be real estate type for mod347 doc - Generate the BOE of tax report document of mod 347 Traceback is thrown while generating the boe of the mod347 document, the traceback is for an issue related to the param of the operation key and that was because the function _call_on_partner_sublines is run for each real estate invoice and it has a callback to be executed on each of them. The callback function is _write_type2_partner_record which should have the report option as param, but it wasn't sent that made a traceback for the params. After fixing that, another traceback was thrown because the xmlid of the real estate invoices of both sold and bought are not in the invoice types map of _write_type2_partner_record function. opw-4589314 Forward-Port-Of: odoo/enterprise#82008 Forward-Port-Of: odoo/enterprise#81033