Friday, May 16, 2025
28 changes · saas-17.4
Resolved issues and error corrections
This update documents why certain hidden fields remain in localized Odoo views, keeping automated checks satisfied while avoiding disruption to custom view extensions. It is a low-risk maintenance fix that prepares these fields for later removal in the main version without changing day-to-day functionality.
Original PR description
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue in Mail where the new message banner could stay visible after messages were marked as read when the composer was focused. This prevents users from seeing outdated unread-message indicators and keeps the conversation view accurate.
Original PR description
Purpose of this commit: When a mail thread contains a banner and the composer is focused, the banner remains visible even after the `mark_as_read` action is triggered. This issue arises because the sync parameter isn't set to true when markAsRead is executed during `onFocusin`. Setting it to true would also update the `new_message_separator`, which isn't always necessary. This commit introduces a partial sync mechanism that only syncs the `localMessageUnreadCounter`, which controls the banner's visibility. task-4102924
This fix prevents sales orders from crashing when users edit a product line after creating a down payment invoice under certain unit-of-measure settings. Down payment lines without unit information are now ignored for quantity-change logging, keeping the sales workflow stable.
Original PR description
Versions -------- - 17.4+ Steps ----- 1. Configure UoM decimal accuracy to be 0 digits; 2. create, confirm a SO; 3. create a downpayment invoice; 4. go back to the SO; 5. modify the product line's…
Versions -------- - 17.4+ Steps ----- 1. Configure UoM decimal accuracy to be 0 digits; 2. create, confirm a SO; 3. create a downpayment invoice; 4. go back to the SO; 5. modify the product line's price. Issue ----- > AssertionError: precision_rounding must be positive, got 0. Cause ----- When checking for quantity changes to log on `write`, a fallback rounding value is retrieved using `precision_get`. This returns a `precision_digits` value, but is being used as a `precision_rounding` value, resulting in an error when it is 0. In previous versions, this fallback value was never used, as `display_type` lines were skipped, and any other line is guaranteed to have a `product_uom.rounding` value. As of 9aa52dd6418e, the constraint was changed for `is_downpayment` lines not having to be of `display_type` nor require a `product_uom` value, meaning the faulty fallback value now gets used. Solution -------- Remove the fallback value, and only log lines with a `product_uom` value. opw-4566621
Clicking the Welcome Bot in a live chat member list no longer causes an error. This keeps chat conversations usable when staff view participant details, improving reliability with minimal user-facing change.
Original PR description
Traceback: https://pastebin.com/UmtLxudu Steps to reproduce: - Open conversation with a visitor in chat window - Using the thread actions, open the channel member list - Click on the Welcome bot > leads to a traceback The Welcome Bot partner does not have user_id hence when opening its avatar card leads to a traceback as the avatar card requires a user_id. This commit address this issue.
This update addresses internal view definitions where hidden fields now need to be clearly justified under newer validation rules. It adds explanatory comments so stable-version tests continue to pass while reducing the risk of issues for customer-specific customizations.
Original PR description
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master.
Miscellaneous changes
Fixes an issue when issuing self-billed invoices to the platform. So far we have been using Odoo's bill name as ID, but we should instead use the bill reference (if set) to use the supplier number. task-4777585 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208721
Original PR description
Fixes an issue when issuing self-billed invoices to the platform. So far we have been using Odoo's bill name as ID, but we should instead use the bill reference (if set) to use the supplier number. task-4777585 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208721
To reproduce: ============= - have an employee with a working schedule of night shifts like 18:00 to 00:00 break to 01:00 then continue to 03:00 - create payslip for this employee for January 2025 - print the payslip, the working hours will be 183.9936 The problem: ============ 00:00 is represented as 23:59:59.99999 in python, that missing microsecond impacts the computation of the duration of the work entry. The solution: ============= round the total seconds opw-4702410 ---
Original PR description
To reproduce: ============= - have an employee with a working schedule of night shifts like 18:00 to 00:00 break to 01:00 then continue to 03:00 - create payslip for this employee for January 2025 - print the payslip, the working hours will be 183.9936 The problem: ============ 00:00 is represented as 23:59:59.99999 in python, that missing microsecond impacts the computation of the duration of the work entry. The solution: ============= round the total seconds opw-4702410 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208811
Some services or applications (Outlook, Google Messages) display previews of links sent through messages or email. In an effort to strengten user privacy, these services fetch the previews from their own servers rather than from the user's device. Since these services' requests had not been added to the list of known bot identifiers, they generate parasite "clicks" which don't match their user. This commit adds identifiers for the Outlook and Google Messages service requests to the l
Original PR description
Some services or applications (Outlook, Google Messages) display previews of links sent through messages or email. In an effort to strengten user privacy, these services fetch the previews from their own servers rather than from the user's device. Since these services' requests had not been added to the list of known bot identifiers, they generate parasite "clicks" which don't match their user. This commit adds identifiers for the Outlook and Google Messages service requests to the list of known bot IDs, thereby preventing the parasite clicks from generating. task-3672491 Forward-Port-Of: odoo/odoo#200148 Forward-Port-Of: odoo/odoo#167799
### Issue In project sharing, tasks in the "Done" and "Approved" stages were not shown with distinct progress in the Kanban progress bar. As a result, users were unable to identify the task status easily. ### Reason: The color class was set incorrectly. ### Fix: We have updated the color class in this commit to correctly reflect the task stages. issue-https://github.com/odoo/odoo/commit/1a44b849970d3e39111a99ea35db5b586b184dd3 ### Steps to Reproduce: - Create a projec
Original PR description
### Issue
In project sharing, tasks in the "Done" and "Approved" stages were not shown with distinct progress in the Kanban progress bar. As a result, users were unable to identify the task status easily.
### Reason:
The color class was set incorrectly.
### Fix:
We have updated the color class in this commit to correctly reflect the task stages.
issue-https://github.com/odoo/odoo/commit/1a44b849970d3e39111a99ea35db5b586b184dd3
### Steps to Reproduce:
- Create a project with 2 tasks:
- Task 1 in the "Done" stage
- Task 2 in the "Approved" stage
- Share the project with a portal user
- Open the project in the portal
- Navigate to the project sharing Kanban view and check the progress bar
task-4551177
Forward-Port-Of: odoo/odoo#206031For proper provision management we introduce accounts 2350 and 2351 task-4797323 Forward-Port-Of: odoo/odoo#210062
Original PR description
For proper provision management we introduce accounts 2350 and 2351 task-4797323 Forward-Port-Of: odoo/odoo#210062
__Current behavior before commit:__ The QR code on the payment page is cropped when the Pending Message of the payment provider has a long line. __Description of the fix:__ Set `flex-shrink-0` to the QR code card so it doesn't shrink. __Steps to show the cropped QR code:__ 1. Install sale_management and website 2. Set company currency to EUR 3. Enable QR Codes under Customer Payments in Settings 4. Enable Online Payment (and disable Online Signature) under Quotations & Orders 5. In
Original PR description
__Current behavior before commit:__ The QR code on the payment page is cropped when the Pending Message of the payment provider has a long line. __Description of the fix:__ Set `flex-shrink-0` to the QR code card so it doesn't shrink. __Steps to show the cropped QR code:__ 1. Install sale_management and website 2. Set company currency to EUR 3. Enable QR Codes under Customer Payments in Settings 4. Enable Online Payment (and disable Online Signature) under Quotations & Orders 5. In Payment Providers, install SEPA Direct Debit. Select Test mode, check Enable QR Codes, and publish it. 6. **In Messages tab, put a very long line as Pending Message** 7. Go to the Journal "Bank" and set a random IBAN as Account number 8. Create a new Quote with a non 0 price and click on Preview and pay the order 9. The QR code is cropped opw-4735003 Forward-Port-Of: odoo/odoo#209686
### Steps to reproduce: - In the settings enable Multi-Step routes - Unarchive the MTO route - Create a storable product using the MTO and buy route - Create and confirm a sale order for 100 units of that product - Validate the delivery for only 30 units and backorder the rest #### > The purchase order demand was updated to 170 units ### Cause of the issue: Processing the backorder wizard will create and confirm moves for the backorder picking: https://github.com/odoo/odoo/blob/a7
Original PR description
### Steps to reproduce: - In the settings enable Multi-Step routes - Unarchive the MTO route - Create a storable product using the MTO and buy route - Create and confirm a sale order for 100 units of that product - Validate the delivery for only 30 units and backorder the rest #### > The purchase order demand was updated to 170 units ### Cause of the issue: Processing the backorder wizard will create and confirm moves for the backorder picking: https://github.com/odoo/odoo/blob/a71c0c7d1c3391beb1bf2939ae076a804a627dbd/addons/stock/models/stock_move.py#L1916-L1919 However, as these moves are `make_to_order` they are planned to create and run procurements in their respective `_action_confirm`'s: https://github.com/odoo/odoo/blob/a71c0c7d1c3391beb1bf2939ae076a804a627dbd/addons/stock/models/stock_move.py#L1379-L1388 opw-4633920 opw-4713650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209442
When posting the vendor bill before validating the receipt, and the currency rate changed between the bill and receipt: - An Exchange diff account move would be created, and the Stock Input Account would not be balanced This is because the balance of the receipt would perfectly match the balance of the vendor bill, but not the Amount in currency. So, when we try to reconcile the 2 lines, because they are in the same currency, we are reconciling the Amount in Currency. Hence, the exchange rat
Original PR description
When posting the vendor bill before validating the receipt, and the currency rate changed between the bill and receipt: - An Exchange diff account move would be created, and the Stock Input Account…
When posting the vendor bill before validating the receipt, and the currency rate changed between the bill and receipt:
- An Exchange diff account move would be created, and the Stock Input Account would not be balanced
This is because the balance of the receipt would perfectly match the balance of the vendor bill, but not the Amount in currency. So, when we try to reconcile the 2 lines, because they are in the same currency, we are reconciling the Amount in Currency. Hence, the exchange rate journal entry is created, and a discrepancy in the Stock Input Account balance is introduced.
When the bill is posted before the receipt is validated, we want the receipt to have the value of the bill, and there is no reason to have only the balance or the amount in currency from the bill, so we can take both of them.
https://github.com/user-attachments/assets/c6dc5e72-8f5b-4c0f-99fa-c5e98a9574ff
## How to reproduce:
- Install stock_account,purchase
- Create product P:
* Valued in AVCO automated.
* Control Policy to 'On ordered quantities'
- Add currency rates for the EUR currency:
* 2.0 on the 2025-01-01
* 2.1 today
- Create and Confirm a new purchase for 1 unit of P and a price of 100 Euros
- Create the Bill:
* Set the bill's accounting date & bill date to the 2025-01-01
* Confirm the bill
=> Amount in Currency: 100 Euros - Balance: $50 USD - Rate used: 2.0
- Go back to the PO and receive the product.
=> Amount in Currency: 105 Euros - Balance: $50 USD - Rate used: 2.1
- Check the created Journal Entries:
=> Currency exchange rate difference: $2.38
=> (105 - 100) / 2.1
OPW-4631348
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#209667
Forward-Port-Of: odoo/odoo#209118moving it to the module mrp_subcontracting_purchase is the correct module, as it depends on the override of _get_resupply_availability happening in mrp_subcontracting_purchase module accorinding to this PR (https://github.com/odoo/odoo/pull/144702/files#diff-54bc40f604ca24cec75d6f7473d21d1d2d0300576456026fe63164daf7cd5149) and fails as a single app test in mrp_subcontracting build_error-163126 Forward-Port-Of: odoo/odoo#206078
Original PR description
moving it to the module mrp_subcontracting_purchase is the correct module, as it depends on the override of _get_resupply_availability happening in mrp_subcontracting_purchase module accorinding to this PR (https://github.com/odoo/odoo/pull/144702/files#diff-54bc40f604ca24cec75d6f7473d21d1d2d0300576456026fe63164daf7cd5149) and fails as a single app test in mrp_subcontracting build_error-163126 Forward-Port-Of: odoo/odoo#206078
# Context Building on a recent PR (https://github.com/odoo/odoo/pull/188697), we introduce multiple small tweaks to enhance the life of support agents and system admins that work a lot with the log files in the the context of email related issues. # Changes * A given `mail.mail` record being processed by the `_send` method can end up sending multiple emails under the hood ( if `recipient_ids` points to muliple ids). This means that the ratio between one `mail.mail` record and the number
Original PR description
# Context Building on a recent PR (https://github.com/odoo/odoo/pull/188697), we introduce multiple small tweaks to enhance the life of support agents and system admins that work a lot with the log…
# Context Building on a recent PR (https://github.com/odoo/odoo/pull/188697), we introduce multiple small tweaks to enhance the life of support agents and system admins that work a lot with the log files in the the context of email related issues. # Changes * A given `mail.mail` record being processed by the `_send` method can end up sending multiple emails under the hood ( if `recipient_ids` points to muliple ids). This means that the ratio between one `mail.mail` record and the number of email sent through SMTP is not always 1:1. We added a new log line that counts the total emails processed in the loop which should give a more precise estimation of the real number of emails attempted through SMTP * Given the above, we the usual log line was not reporting all the (redacted) list of email addresses but only the `email_to` of the last `msg` value created during the inner loops. We now correctly show a comma seperated list of all recipients in a given batch. * The historical log line `Sent batch %s emails via mail server ID #%s` could be missleading as it was not counting the number of emails but the number of `mail.mail` records processed. It was reformulated to account for this. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206657
Before this commit, the filename for pdf reports when previewed from the portal is "\<database ID\>.pdf" instead of a readable name like "Sales-Order-S00001".pdf. This can be especially confusing if the database ID is a different number from the record's sequence number. Steps to reproduce ----- 1. Open a sales order in the customer portal 2. Select the Print button 3. From the pdf preview, Print -> Save to PDF 4. The downloaded filename is "\<database ID\>.pdf", also the browser title b
Original PR description
Before this commit, the filename for pdf reports when previewed from the portal is "\<database ID\>.pdf" instead of a readable name like "Sales-Order-S00001".pdf. This can be especially confusing if the database ID is a different number from the record's sequence number. Steps to reproduce ----- 1. Open a sales order in the customer portal 2. Select the Print button 3. From the pdf preview, Print -> Save to PDF 4. The downloaded filename is "\<database ID\>.pdf", also the browser title bar is just the database ID Cause ----- No filename is being set in the Content-Disposition header, so the browser takes the filename from the last segment of the URL which is the database ID. Solution ----- Set an inline Content-Disposition with the filename argument when previewing, similar to what is done when downloading. opw-4710501 Forward-Port-Of: odoo/odoo#209700 Forward-Port-Of: odoo/odoo#207357
When generating the JO UBL file, we want to keep the PartyIdentification and its ID node, even if the latter is empty. Also, in the same file, the country code of a partner should be set to 'PN' if the partner doesn't have its country set. task-4656827 Forward-Port-Of: odoo/odoo#206488
Original PR description
When generating the JO UBL file, we want to keep the PartyIdentification and its ID node, even if the latter is empty. Also, in the same file, the country code of a partner should be set to 'PN' if the partner doesn't have its country set. task-4656827 Forward-Port-Of: odoo/odoo#206488
**Steps to reproduce:** - Install l10n_it_edi_ndd - Switch to an Italian company (e.g. IT Company) - Create an invoice - Confirm the invoice => Document Type (in "Electronic Invoicing" tab) is computed - Create a credit note from the invoice - On credit note wizard, click on "Reverse and Create Invoice" - Check the created credit note **Issue:** The credit note is posted but its Document Type field (l10n_it_document_type) is empty. l10n_it_document_type should be computed when it do
Original PR description
**Steps to reproduce:** - Install l10n_it_edi_ndd - Switch to an Italian company (e.g. IT Company) - Create an invoice - Confirm the invoice => Document Type (in "Electronic Invoicing" tab) is…
**Steps to reproduce:** - Install l10n_it_edi_ndd - Switch to an Italian company (e.g. IT Company) - Create an invoice - Confirm the invoice => Document Type (in "Electronic Invoicing" tab) is computed - Create a credit note from the invoice - On credit note wizard, click on "Reverse and Create Invoice" - Check the created credit note **Issue:** The credit note is posted but its Document Type field (l10n_it_document_type) is empty. l10n_it_document_type should be computed when it doesn't have a value already and the state of the move is "posted". The credit note will be rejected when sent to SDI because this field is empty. **Cause:** In the reverse method, the field is set to False in order to be recomputed. However, the compute method is triggered when the state changes, but the credit note not is already posted. Therefore the field will not be recomputed. **Solution:** Set the value to False before the creation of the credit note. So that, the field will be recomputed when posting the credit note. opw-4689755 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208654
When using shiplater in PoS and creating a backorder from the original picking, the COGS would be duplicated when validating the backorder. Steps to reproduce: ------------------- * Create 2 products, one with a cost of 20 and one with a cost of 0 * Create a PoS order with 2 lines, one for each product * Validate the order using the shiplater option * Close the session and go to the picking created * Validate the delivery only for the product with a cost of 20 and make a backorder for t
Original PR description
When using shiplater in PoS and creating a backorder from the original picking, the COGS would be duplicated when validating the backorder. Steps to reproduce: ------------------- * Create 2…
When using shiplater in PoS and creating a backorder from the original picking, the COGS would be duplicated when validating the backorder. Steps to reproduce: ------------------- * Create 2 products, one with a cost of 20 and one with a cost of 0 * Create a PoS order with 2 lines, one for each product * Validate the order using the shiplater option * Close the session and go to the picking created * Validate the delivery only for the product with a cost of 20 and make a backorder for the product with a cost of 0 * Go to the session accounting entries and check the COGS entries, you should see one entry for the product we just processed * Validate the backorder > Observation: A second COGS entry is created for the product with a cost of 20 Why the fix: ------------ Instead of creating the COGS entries based on the PoS order lines, we now create them based on the stock move lines. This way, we only create the COGS entries for the stock move lines that are actually processed. We also avoid creating COGS entries for the stock move lines that have no cost. opw-4597430 Forward-Port-Of: odoo/odoo#207075
Step to reproduce: - install accounting - in the dashboard searchbar, add a `Group By` with value `type` - go to vendor bills view from the dashboard - upload any file Error: Wrong value for `ir.attachment.type`: 'purchase' Expected: The upload process should go on without any error Explanation: in the `onFileUploaded` hook for vendor bills AccountFileUploader JS component, we included all context when we are creating the `ir.attachment` object. The group-by we added earl
Original PR description
Step to reproduce: - install accounting - in the dashboard searchbar, add a `Group By` with value `type` - go to vendor bills view from the dashboard - upload any file Error: Wrong value for…
Step to reproduce: - install accounting - in the dashboard searchbar, add a `Group By` with value `type` - go to vendor bills view from the dashboard - upload any file Error: Wrong value for `ir.attachment.type`: 'purchase' Expected: The upload process should go on without any error Explanation: in the `onFileUploaded` hook for vendor bills AccountFileUploader JS component, we included all context when we are creating the `ir.attachment` object. The group-by we added earlier are thus also added as `default_type` in the context. But when creating a record, the ORM checks for all `default_*` key in the context and try to use it as additional values for the created record. Since the key-value combination `type` and `purchase` is not valid in an `ir.attachment` record, it throws this error. Solution: Before passing the context, we have to make sure to clean all the `default_*` contexts to avoid these kind of behaviors. In python, usually we use `clean_context` method before calling `create`. But since this is in JS, we manually filter all key-value item that starts with "default_" in the context object. opw-4512697 Forward-Port-Of: odoo/odoo#201628
The aim of this commit is to: - avoid reporting negative amount in a 281.50 form which are rejected by the administration. - avoid reporting form with 0 value everywhere which are rejected by the administration. - avoid reporting a form with an amount < 250 EUR Context: The administration stated that we don't need to make any report that would be above 250 EUR. (art. 57, al. 3 CIR 92 et art. 30 AR/CIR 92) https://www.wolterskluwer.com/fr-be/expert-insights/tax-form-281-50
Original PR description
The aim of this commit is to: - avoid reporting negative amount in a 281.50 form which are rejected by the administration. - avoid reporting form with 0 value everywhere which are rejected by the…
The aim of this commit is to:
- avoid reporting negative amount in a 281.50 form which are rejected by the administration.
- avoid reporting form with 0 value everywhere which are rejected by the administration.
- avoid reporting a form with an amount < 250 EUR
Context:
The administration stated that we don't need to make any report that would be above 250 EUR.
(art. 57, al. 3 CIR 92 et art. 30 AR/CIR 92)
https://www.wolterskluwer.com/fr-be/expert-insights/tax-form-281-50 https://travaillerensociete.indicator.be/main/newsadvice/52784/news/52785/news_story/533/ https://www.monastucesetconseils.be/2025-04/fiches-fiscales-281-50-pour-le-29-juin-2025-WAACPCAR_EU33150802
Before this commit:
Odoo could create a form with a negative amount as commission/fee/... This could result in the administration software converting the xml into a BOW file to generated an error and a file that will be rejected by Belcotax.
Same for form with 0 everywhere.
Also, accountants always end up deleting the 281.50 form below 250 EUR as those don't need to be reported.
After this commit:
Odoo don't report negative or null total amount as commission/fee/... and doesn't create any form if the total amounts are below 250 EUR saving accountants the burden to remove them.
task-id: None
This was discussed and done with TSB and DELC and is also the result of our past experiences reporting 281.50 forms which also involved CAHE, MAKR and CAL.
Forward-Port-Of: odoo/enterprise#85508Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762
Original PR description
Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762
Steps to reproduce: (thanks to TBS for investigating + writing the test) 1. Have a MX company with Quadrum or SwSapien 2. Create a USD bank transaction with `13220.00 USD` and `305147.51 MXN` 3. Create a USD invoice for `13220.00 USD` and send CFDI 4. Reconcile transaction and invoice 5. Click "Update payments" on the invoice => CRP20211 Looks like it comes from this rounding difference Rate is computed by odoo using `305147.51 MXN / 13220.0 USD = 23.082262481 ≃ 23.082262 MXN/USD`
Original PR description
Steps to reproduce: (thanks to TBS for investigating + writing the test) 1. Have a MX company with Quadrum or SwSapien 2. Create a USD bank transaction with `13220.00 USD` and `305147.51 MXN` 3.…
Steps to reproduce: (thanks to TBS for investigating + writing the test) 1. Have a MX company with Quadrum or SwSapien 2. Create a USD bank transaction with `13220.00 USD` and `305147.51 MXN` 3. Create a USD invoice for `13220.00 USD` and send CFDI 4. Reconcile transaction and invoice 5. Click "Update payments" on the invoice => CRP20211 Looks like it comes from this rounding difference Rate is computed by odoo using `305147.51 MXN / 13220.0 USD = 23.082262481 ≃ 23.082262 MXN/USD` PAC verify the amount paid using `13220.0 USD * 23.082262 MXN/USD = 305147.50 MXN` which is not `305147.51 MXN` Solution: There is no solution by adapting the rate: - quadrum restricts the rate to 6 decimals; - rounding the rate differently (e.g. to `23.082263`) would not help because `13220.0 USD * 23.082263 MXN/USD = 305147.52 MXN` which again is not `305147.51 MXN`. So, the only solution that I can think of is to adapt the amount in company currency so that it is exactly `round(amount_in_payment_curr / rate_rounded_to_6_decimals)`, i.e. in the example, change it to `305147.50 MXN`. In tests, both Quadrum and SwSapien seem to accept this. We don't perform the modification for Solucion Factible (the other PAC). opw-4222310 Forward-Port-Of: odoo/enterprise#83499
Implement new Swiss municipality OFS number assignment for ERP systems based on 2025 AFC list. This commit updates the address validation and municipality assignment logic in the ERP system to align with the new "Liste des communes OFS 2025 pour l’attribution du numéro de commune au code postal" published by the Swiss Federal Tax Administration (AFC) for withholding tax purposes. Forward-Port-Of: odoo/enterprise#84859
Original PR description
Implement new Swiss municipality OFS number assignment for ERP systems based on 2025 AFC list. This commit updates the address validation and municipality assignment logic in the ERP system to align with the new "Liste des communes OFS 2025 pour l’attribution du numéro de commune au code postal" published by the Swiss Federal Tax Administration (AFC) for withholding tax purposes. Forward-Port-Of: odoo/enterprise#84859
For proper provision management we introduce accounts 2350 and 2351 task-4797323 Forward-Port-Of: odoo/enterprise#85574
Original PR description
For proper provision management we introduce accounts 2350 and 2351 task-4797323 Forward-Port-Of: odoo/enterprise#85574
To be able to configure salary journals and access rule parameters, we reintroduce back the salary menu in configuration Forward-Port-Of: odoo/enterprise#85288
Original PR description
To be able to configure salary journals and access rule parameters, we reintroduce back the salary menu in configuration Forward-Port-Of: odoo/enterprise#85288
Fix a bug where account moves paid with cash appears in a line with full 0 in the boe export of mod347 tax report. But it shouldn't create a line at all, so this commit remove the lines in this case. task-4613012 Forward-Port-Of: odoo/enterprise#84317
Original PR description
Fix a bug where account moves paid with cash appears in a line with full 0 in the boe export of mod347 tax report. But it shouldn't create a line at all, so this commit remove the lines in this case. task-4613012 Forward-Port-Of: odoo/enterprise#84317
This commit will do a backport of the python change made in this commit: https://github.com/odoo/enterprise/pull/77565/commits/7f26eefa932ec09297fbc4b8256ebe0b2976b231 task-4476707 Forward-Port-Of: odoo/enterprise#84728
Original PR description
This commit will do a backport of the python change made in this commit: https://github.com/odoo/enterprise/pull/77565/commits/7f26eefa932ec09297fbc4b8256ebe0b2976b231 task-4476707 Forward-Port-Of: odoo/enterprise#84728