Tuesday, September 16, 2025
102 changes
5 changes
Resolved issues and error corrections
This fixes an access error that blocked branch or child companies from confirming sales orders when using loyalty programs defined by their parent company. The change lets the necessary loyalty history be recorded correctly, so shared loyalty programs work smoothly across company structures.
Original PR description
If you have a company parent with loyaltly programs and you try to confirm a sale order from a child company, an access error will be raised. Steps to reproduce: ------------------- * Create a…
If you have a company parent with loyaltly programs and you try to confirm a sale order from a child company, an access error will be raised. Steps to reproduce: ------------------- * Create a loyalty cards program * Set company to the current company * Create a branch company for the current one * Switch to branch company * Create a sale order, no need to add products, just a partner * Try to confirm the order > Observation: Access Error: > Sorry, Mitchell Admin (id=2) doesn't have 'create' access to: > -History for Loyalty cards and Ewallets (loyalty.history) Why the fix: ------------ Here's where the access error is being triggered: https://github.com/odoo/odoo/blob/35ea3dcb2eeb379c8b1127f0c7b42191853c0bd2/addons/sale_loyalty/models/sale_order.py#L106 Branches currently have access to the discounts & loyalty programs from the parent company, we extend the access to include loyalty history. Another solution could be to create the loyalty history using sudo() if the coupon's program id is a parent of the current company. opw-5055999 Forward-Port-Of: odoo/odoo#226226
This fix prevents Razorpay OAuth webhook setup from failing when website payments are enabled. It ensures payment connection URLs are built consistently, avoiding authentication errors caused by malformed addresses.
Original PR description
A bad URL could be generated when the `website_payment` module is installed, as it overrides `get_base_url` and may return a URL ending with `/`. Using f-strings to create URLs could result in a double slash `//`, causing errors. Steps to reproduce: - Install `website_payment` and `payment_razorpay_oauth` - Go to Payment Acquirers and connect via OAuth - Click "Generate your webhook" - "Authentication failed" error appears This fix uses `url_join`, like other payment providers, to build URLs correctly and avoid the double slash issue. opw-5079295 Forward-Port-Of: odoo/odoo#226639 Forward-Port-Of: odoo/odoo#226248
FedEx Home Delivery shipments can now generate return labels without triggering a recipient address error. This ensures affected US deliveries proceed smoothly when return labels are enabled.
Original PR description
**PROBLEM** When selecting FedEx Home Delivery service, and enabling the return label generation, we got the error `RECIPIENT.ADDRESS.ERROR`. **STEPS TO REPRODUCE** 1. Install delivery_fedex_rest (use the new fedex credentials). 2. On the FedEx US shipment method (demo data) select FedEx home delivery service, and check the `Generate Return Label` option. 3. Create a SO, add shipping with FedEx US, validate the SO. 4. Validate the delivery order, and notice the FedEx API return an error. **CAUSE** For Home Delivery Service, the recipient address need to have the `residential` flag set to true. In `_return_package()`, the request sent doesn't include this flag, leading to an error. **FIX** Fix `_return_package()` query to include the `residential` flag. opw-4939065 Forward-Port-Of: odoo/enterprise#94463
The printer interface now handles printer setup errors more gracefully. If a printer cannot be added due to system restrictions or an invalid name, the issue is logged and the interface keeps running instead of stopping.
Original PR description
Before this commit, if CUPS raised an error when adding a printer in the `supported()` method of the printer driver, the exception would not be caught causing the printer interface to stop. This can happen for example if the filesystem is read-only or the printer has an invalid name. After this commit, we catch any CUPS errors and log them, allowing the printer interface to continue running. We also enter write mode before adding the printer to prevent any read-only errors. task-5086036 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227121
Users can now open activities from the "View all activities" menu even when they do not have access to the related record. This prevents an error and still lets them complete the activity using the appropriate activity form.
Original PR description
**Steps to reproduce** 1. Create an activity on a record and assign it to a user who doesn't have access to this record. (e.g. create an activity on a `hr.employee` record and assign to a user without HR rights). 2. With this user lacking access rights, click on "View all activities" in the systray. 3. Click on the activity: error **Cause** The user may not have access rights to the record related to an activity. **Change** Open the activity's form view, we use `mail_activity_view_form_without_record_access` to display the "Mark as done" button. opw-4925744 Forward-Port-Of: odoo/odoo#226950 Forward-Port-Of: odoo/odoo#222649
4 changes
Resolved issues and error corrections
The printer interface now keeps running if the system encounters an error while adding a printer, such as a read-only filesystem or invalid printer name. These errors are logged for follow-up instead of interrupting printer operations, improving reliability for IoT printing setups.
Original PR description
Before this commit, if CUPS raised an error when adding a printer in the `supported()` method of the printer driver, the exception would not be caught causing the printer interface to stop. This can happen for example if the filesystem is read-only or the printer has an invalid name. After this commit, we catch any CUPS errors and log them, allowing the printer interface to continue running. We also enter write mode before adding the printer to prevent any read-only errors. task-5086036 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227121
2 changes
Resolved issues and error corrections
The booking page now shows the correct maximum number of people based on all available appointment resources, rather than being limited by the first resource found. This prevents customers from seeing an artificially low capacity and helps businesses accept the right number of attendees for each appointment slot.
Original PR description
**How to reproduce:** - Create an appointment with availability assigned to a resource. - Enable 'Manage Capacity' - Set the capacity of the first resource lower than the second one. - Open the appointment's booking page. **Technical Reason:** If appointment is scheduled based on 'resource_time' then resource_default is updated as the first value of resource_possible. Related PR: https://github.com/odoo/enterprise/pull/47059 **After this PR:** 'Number of people' dropdown will display the maximum capacity from all available resources. Task-4664393 Forward-Port-Of: odoo/enterprise#84243
11 changes
Resolved issues and error corrections
The purchase catalog's "Add All" action now correctly adds only products matching the user's current suggestion filters, avoiding unintended purchase order lines. The update also tidies the suggestion interface, keeps suggestions prominent, sets them off by default for first-time users, and limits suggestion percentage values to a safe range.
2 changes
Resolved issues and error corrections
Indian EDI setup checks now happen after an invoice is posted instead of blocking the posting process. This prevents related sales, subscription, or e-commerce workflows from being rolled back, while still allowing users to fix the configuration and retry EDI sending later.
Original PR description
ISSUE:- Previously, the EDI configuration was validated during invoice posting by overriding the check_move_configuration method. If an error was detected, a UserError was raised, leaving the invoice in the draft state. This behavior caused issues in scenarios where invoices were created with incorrect EDI configurations from subscriptions, sales orders, or e-commerce workflows. The invoice rollback due to the error also left the related sales orders in the draft state, disrupting the process. FIX:- The EDI configuration is now validated after the invoice is posted. If there are errors in the configuration, the invoice remains posted, and no UserError is raised. Users can subsequently correct the EDI configuration and retry the EDI sending process without requiring the invoice to be reposted. Task-4330659
1 change
Resolved issues and error corrections
Belgian companies are now registered on Peppol using the Enterprise Number required by Belgian authorities. The change also improves lookup checks by trying the alternative Belgian identifier when the first check does not find a match, helping avoid failed or duplicate Peppol registrations.
Original PR description
Belgium Peppol autorities enforces us to register our Belgian Peppol user with EAS 0208, the Enterprise Number (company_registry). Also allows for Belgium to check for 9925 existence on Peppol when 0208 check failed. And vice-versa. task-4852903
Branch companies can now confirm sales orders that use loyalty programs from their parent company without hitting an access error. This ensures loyalty history is recorded correctly when businesses operate with parent and branch company structures.
Original PR description
If you have a company parent with loyaltly programs and you try to confirm a sale order from a child company, an access error will be raised. Steps to reproduce: ------------------- * Create a…
If you have a company parent with loyaltly programs and you try to confirm a sale order from a child company, an access error will be raised. Steps to reproduce: ------------------- * Create a loyalty cards program * Set company to the current company * Create a branch company for the current one * Switch to branch company * Create a sale order, no need to add products, just a partner * Try to confirm the order > Observation: Access Error: > Sorry, Mitchell Admin (id=2) doesn't have 'create' access to: > -History for Loyalty cards and Ewallets (loyalty.history) Why the fix: ------------ Here's where the access error is being triggered: https://github.com/odoo/odoo/blob/35ea3dcb2eeb379c8b1127f0c7b42191853c0bd2/addons/sale_loyalty/models/sale_order.py#L106 Branches currently have access to the discounts & loyalty programs from the parent company, we extend the access to include loyalty history. Another solution could be to create the loyalty history using sudo() if the coupon's program id is a parent of the current company. opw-5055999 Forward-Port-Of: odoo/odoo#226226
Fixed an issue that caused FedEx Home Delivery return label generation to fail with an address error. The return shipment request now correctly marks the recipient address as residential, helping users complete FedEx home delivery workflows without manual workarounds.
Original PR description
**PROBLEM** When selecting FedEx Home Delivery service, and enabling the return label generation, we got the error `RECIPIENT.ADDRESS.ERROR`. **STEPS TO REPRODUCE** 1. Install delivery_fedex_rest (use the new fedex credentials). 2. On the FedEx US shipment method (demo data) select FedEx home delivery service, and check the `Generate Return Label` option. 3. Create a SO, add shipping with FedEx US, validate the SO. 4. Validate the delivery order, and notice the FedEx API return an error. **CAUSE** For Home Delivery Service, the recipient address need to have the `residential` flag set to true. In `_return_package()`, the request sent doesn't include this flag, leading to an error. **FIX** Fix `_return_package()` query to include the `residential` flag. opw-4939065 Forward-Port-Of: odoo/enterprise#94463
Fixed an issue that could prevent Razorpay OAuth webhook generation when website payments are enabled. The change ensures payment connection URLs are built correctly, avoiding authentication failures caused by accidental double slashes.
Original PR description
A bad URL could be generated when the `website_payment` module is installed, as it overrides `get_base_url` and may return a URL ending with `/`. Using f-strings to create URLs could result in a double slash `//`, causing errors. Steps to reproduce: - Install `website_payment` and `payment_razorpay_oauth` - Go to Payment Acquirers and connect via OAuth - Click "Generate your webhook" - "Authentication failed" error appears This fix uses `url_join`, like other payment providers, to build URLs correctly and avoid the double slash issue. opw-5079295 Forward-Port-Of: odoo/odoo#226639 Forward-Port-Of: odoo/odoo#226248
FedEx Home Delivery shipments can now generate return labels without triggering a recipient address error. The fix ensures FedEx receives the required residential address information, reducing failed delivery validations for affected US shipments.
Original PR description
**PROBLEM** When selecting FedEx Home Delivery service, and enabling the return label generation, we got the error `RECIPIENT.ADDRESS.ERROR`. **STEPS TO REPRODUCE** 1. Install delivery_fedex_rest (use the new fedex credentials). 2. On the FedEx US shipment method (demo data) select FedEx home delivery service, and check the `Generate Return Label` option. 3. Create a SO, add shipping with FedEx US, validate the SO. 4. Validate the delivery order, and notice the FedEx API return an error. **CAUSE** For Home Delivery Service, the recipient address need to have the `residential` flag set to true. In `_return_package()`, the request sent doesn't include this flag, leading to an error. **FIX** Fix `_return_package()` query to include the `residential` flag. opw-4939065 Forward-Port-Of: odoo/enterprise#94463
Original PR description
Use correct domain to compute new orderlines upon clicking "Add All" from purchase catalog suggestion feature. REASON: Typo in rush before freeze on which context to use: BEFORE: `domain =…
Use correct domain to compute new orderlines upon clicking "Add All" from purchase catalog suggestion feature.
REASON: Typo in rush before freeze on which context to use:
BEFORE: `domain = fields.Domain.AND([domain, self.env.context.get('domain')])`
AFTER: `domain = fields.Domain.AND([domain, suggest_ctx.get('domain')])`
Separated in 2 commits for review but they can be squashed on merge.
Fixed typo above in first commit (along some other relevant changes)
The second commit is just some unrelated cleaning up, and the following small changes:
- Moves In the order filter out of Good / Service filter group.
- Clamp suggestion percent factor between 0-999 (previously 0-inf)
- Removes the Activate text from the Suggest Toggle and cleans spacing.
- Put suggestion back on top of sections in SearchPanel (It was on top but then a PR for search panel sections inadvertently moved it below sections)
- Change default suggest state to OFF (first time ever, afterwards state is saved/loaded from localStorage).
Original PR: odoo/odoo#218343
Original task: task [#4783508](https://www.odoo.com/odoo/project/966/tasks/4783508)
Bug ticket: task [#5076240](https://www.odoo.com/odoo/project/966/tasks/5076240)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prFixed Brazilian Avalara tax handling so taxes marked as not accounting-relevant no longer create extra journal lines or inflate invoice totals. The tax values are still recorded in the document chatter for traceability, including related point-of-sale flows.
Original PR description
### Steps to reproduce: - Install l10n_br_edi, switch to Brazilian company - Set up Avalara - Create an invoice with the tax "ICMS Exemption Incl." which is included in price - Click "Generate taxes"…
### Steps to reproduce:
- Install l10n_br_edi, switch to Brazilian company
- Set up Avalara
- Create an invoice with the tax "ICMS Exemption Incl." which is included in price
- Click "Generate taxes" to compute the taxes with Avalara
- In "Journal Items" we can see a line for "ICMS Exemption Incl.", its value appears as excluded
### Cause:
The result from Avalara included a value for this tax:
```
'tax': 1.44,
'taxImpact': {
'accounting': 'none',
'impactOnFinalPrice': 'Included',
'impactOnNetAmount': 'Included',
},
```
But the untaxed amount is computed without this tax. Odoo keeps the untaxed amount from the response and add a line for the tax. As a result, the tax is added to the amounts like an excluded tax would.
### Solution:
In the response from Avalara, taxes with `['taxImpact']['accounting'] == 'none'` should be part of the accounting: no line should be created for this tax. So we filter them out in `_get_external_taxes`.
We also log these taxes in the chatter to keep a trace of them. As the parameter `'accounting': 'none'` is linked with the tax and not the line, if a tax on one line has `'accounting': 'none'` then the same tax will also have 'accounting': 'none' on all other lines. We use this to fetch all non accounting taxes, then we use the summary to construct the message like it was done before.
The logging in the bridge with pos needed to ba adapted because now the taxes may not be unarchived as they are ignored when they have `'accounting': 'none'`.
opw-4964315Corrects loyalty point calculations after a sales order is confirmed so previously applied reward costs are not deducted a second time. This ensures customers can receive all eligible promotions on an order, avoiding missed discounts and support issues.
Original PR description
## Versions: 16.0+ ## Issue: After confirming a Sales Order (SO), loyalty points are incorrectly calculated when applying additional promotions. This causes only one reward to be applied instead of…
## Versions:
16.0+
## Issue:
After confirming a Sales Order (SO), loyalty points are incorrectly calculated when applying additional promotions. This causes only one reward to be applied instead of all eligible ones.
## Cause:
When the SO is confirmed, the cost in points for each line is retrieved and deducted to compute remaining available points. However, when promotions are re-applied, the system re-evaluates the total cost of the SO and deducts the points again, effectively double-counting the same lines.
## Steps to reproduce:
- Set up a `Discount & Loyalty` promotion program:
- 2 points granted per purchase (minimum $0).
- Rewards:
- 5% discount on "Simple Pen" (costs 1 point).
- 10% discount on "Whiteboard Pen" (costs 1 point).
- Create a Quotation with "Simple Pen" and "Whiteboard Pen".
- Confirm the Quotation into a Sales Order.
- Apply promotions:
- The first reward applies correctly
- The second reward does not apply
opw-4753472
Forward-Port-Of: odoo/odoo#226656
Forward-Port-Of: odoo/odoo#211342This fix prevents security lead times from being counted more than once when one warehouse is supplied by another. It also ensures manufacturing lead times are applied even when a product has no bill of materials, improving delivery and production date accuracy.
Original PR description
In this bug, when there are multiple warehouse, and a warehouse is supplied by another one, the security lead time is repeated in calculations. To reproduce the bug: 1- Create a db with, stock, mrp,…
In this bug, when there are multiple warehouse, and a warehouse is supplied by another one, the security lead time is repeated in calculations. To reproduce the bug: 1- Create a db with, stock, mrp, sale installed. 2- Unarchive `MTO` route. 3- Set `Security Lead` Time in Setting. 4- Create two warehouses wh1, wh2. 5- In wh1, set `Manufacture to Resupply` to True. 6- In wh2, set `Manufacture to Resupply` to False and make it resupply from wh1. 7- Create a product and track inventory. 8- Create a BOM for the product. 9- Enable `Manufacture`, `MTO`, `wh2: Supply Product from wh1` routes for the product. 10- Create a new Quote for the product and in the Delivery, select `wh2` as the warehouse. Confirm the Quote. 11- Open MO. Security lead time is considered twice in dates calculations which is mistake. To solve this issue, we must call `_get_dates_info` only once. The current condition might be True more than once for multiple moves. We should also check that it is not True for next moves which otherwise means the security lead time is already effected. This issue is reproduced because this condition is not sufficient to ensure it is called once: https://github.com/odoo/odoo/blob/c0a7b51c9e14d29cefa96c29dd716b7aec698818/addons/stock/models/stock_move.py#L1656-L1657 The above condition is written to ensure we are adding the delay only when move location is warehouse stock location. This cause problem in multi-warehouse because we have this case that move location is warehouse stock location once for wh1 and once in wh2. To solve this issue, we make sure the call `_get_dates_info` doesn't affect when the move has rules with src location in warehouse stock location. related: #112325 opw-4889642 Forward-Port-Of: odoo/odoo#226712 Forward-Port-Of: odoo/odoo#224232
The accounting KPI summary now includes posted entries that still need an accountant's review, not only draft entries. This gives teams a more accurate view of pending accounting work by journal category, helping prioritize follow-up more reliably.
Original PR description
The `kpi.provider:get_account_kpi_summary` method should count draft moves by category, but also include posted moves that still are to be checked by the accountant. Task-id: 5062431 Forward-Port-Of: odoo/odoo#227091 Forward-Port-Of: odoo/odoo#226411
This fix prevents Google Calendar permission checks from blocking upgrades or mail template updates when appointment video-call links are recalculated. It helps customers avoid unexpected validation errors for read-only guest events and keeps calendar-related migrations running smoothly.
Original PR description
**Steps to Reproduce:** 1. Create DB in 18.0 with calendar module and google_calendar without demo data. 2. create a calendar event with videocall location other then odoo generated and mark that as…
**Steps to Reproduce:**
1. Create DB in 18.0 with calendar module and google_calendar without demo data.
2. create a calendar event with videocall location other then odoo generated and mark that as guest_readonly.
3. after that install appointment module and ``acces_token``.
4. upgrade to 18.3 below mentioned traceback will raise or can update to mail template.
**Issue**
why from 18.3 [from](https://github.com/odoo/odoo/commit/999df6d4a3b5d21648e5e09757661714e99e1154#diff-bd520efea06a5449c8694b54f5f7aa8587c929a5669ea0439bb9d5e38f8d29c8) this commit now template will render on record for checking. During render checking the ``videocall_redirection`` field value as it [compute](https://github.com/odoo/enterprise/blob/f5d99ea7ae7c2748c4a23a793c46ab1a123b3aad/appointment/models/calendar_event.py#L188) and non store field it going for compute over here the access_token is missing so it will go for compute and during that this [validation](https://github.com/odoo/odoo/blob/1ac89eb71aab48fa8d50fbae01d96bec23d88418/addons/google_calendar/models/calendar.py#L106) is triggering and it breaking because env user is odoobot and user_id is different this issue occur during checking on write on mail template.
**Fix:**
For fixing this checking is the fields syncable with calendar or not
```
File "/home/odoo/src/odoo/saas-18.4/odoo/orm/fields.py", line 1751, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/saas-18.4/odoo/orm/fields.py", line 1914, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/saas-18.4/addons/calendar/models/calendar_event.py", line 696, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/saas-18.4/addons/mail/models/mail_thread.py", line 469, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/saas-18.4/odoo/orm/models.py", line 4620, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/saas-18.4/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/saas-18.4/appointment/models/calendar_event.py", line 207, in _compute_videocall_redirection
event.access_token = uuid.uuid4().hex
File "/home/odoo/src/odoo/saas-18.4/odoo/orm/fields.py", line 1847, in __set__
records.write({self.name: write_value})
File "/home/odoo/src/enterprise/saas-18.4/appointment/models/calendar_event.py", line 246, in write
res = super().write(vals)
File "/home/odoo/src/odoo/saas-18.4/addons/google_calendar/models/calendar.py", line 96, in write
self._check_modify_event_permission(values)
File "/home/odoo/src/odoo/saas-18.4/addons/google_calendar/models/calendar.py", line 108, in _check_modify_event_permission
raise ValidationError(_("The following event can only be updated by the organizer "
odoo.exceptions.ValidationError: El organizador es el único que puede actualizar el siguiente evento de acuerdo con los permisos del evento establecidos en Google Calendar.
```
opw-5042454
upg-3113613
TBG - 2082
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#226890The workcenter planning view now shows totals based on the workcenter's actual configured working hours instead of always showing a full 24-hour day. This gives manufacturing users a more accurate view of available capacity and helps them schedule work orders with less confusion.
Original PR description
## **Issue Before This Commit:** In the workcenter planning view, the total hours displayed were misleading, as they always showed 24 hours of the day instead of the workcenter’s defined working…
## **Issue Before This Commit:** In the workcenter planning view, the total hours displayed were misleading, as they always showed 24 hours of the day instead of the workcenter’s defined working hours. This caused confusion for users since the displayed total hours did not match the actual available working time of the workcenter. ## **Steps to Reproduce:** - Create a Manufacturing Order (MO). - Add "Drawer" as the product. - Add a "SEC-ASSEM: [FURN_8855] Drawer" BOM. - Set the quantity to produce as 10. - Confirm the MO and plan it. - Open the planning view and notice that the total hours count incorrectly shows 24 hours instead of the defined working hours. ## **Cause of the issue:** The bug was introduced by this PR (https://github.com/odoo/odoo/pull/205486), as the related changes were not adapted here. Because of that, pill.record.workcenter_id[0] returns an undefined value. ## **With This Commit:** The calculation of total hours has been corrected to consider only the workcenter’s defined working hours. Users now see accurate hours in the planning view, making it easier to plan and schedule work orders reliably. task - 4900885 Forward-Port-Of: odoo/enterprise#93035
Fixes an issue that prevented Ecuadorian delivery guides from being generated when barcode scanning was disabled in Inventory settings. Businesses can now create required delivery documents regardless of whether they use barcode scanning.
Original PR description
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch…
Currently, an error occurs when generating a Delivery Guide if the Barcode Scanner is disabled in the Inventory settings. **Steps to reproduce:** - Install the `l10n_ec_edi_stock` module and switch to the `EC company`. - Uncheck `Barcode Scanner` in the Inventory `settings`. - Create a new warehouse and set the `Entity` and `Emission Point`. - Navigate to Inventory > Operations > Deliveries and create a new delivery. - Add details > mark as Todo > Validate > Generate Delivery Guide. **Error:** `AttributeError: 'stock.move.line' object has no attribute 'qty_done'` **Root Cause:** At [1], the code references `line.qty_done`, but this field is defined in the `stock_barcode` module at [2]. When the Barcode Scanner is `disabled`, the field is not available, leading to the `error`. **Fix:** This commit updates the delivery guide values to use `line.quantity` instead of `line.qty_done` at [1] and at [4]. Since in the `stock_barcode` module at [3], `qty_done` is derived from `quantity`. [1]: https://github.com/odoo/enterprise/blob/ba5b9790f28e2f7eabda22e5992737eab0e82c6e/l10n_ec_edi_stock/models/stock_picking.py#L354 [2]: https://github.com/odoo/enterprise/blob/8c53e50df1cf9dc6d3ca4cae19c39135ac85d4e4/stock_barcode/models/stock_move_line.py#L23 [3]: https://github.com/odoo/enterprise/blob/8c53e50df1cf9dc6d3ca4cae19c39135ac85d4e4/stock_barcode/models/stock_move_line.py#L48-L50 [4]: https://github.com/odoo/enterprise/blob/8b72fdef63f634ccf436b49adbac5c1f9358c127/l10n_ec_edi_stock/views/report_delivery_guide.xml#L165 sentry-6851008674 Forward-Port-Of: odoo/enterprise#93775
Manufacturing orders no longer mark components as consumed when users only change inventory lot or location details without changing quantities. This reduces confusion and keeps consumption status aligned with actual material usage.
Original PR description
Issue Before This Commit: ============================ When only the quants/move line were changed without modifying the quantity, the system automatically marked components as consumed (manual…
Issue Before This Commit: ============================ When only the quants/move line were changed without modifying the quantity, the system automatically marked components as consumed (manual consumption and picked boolean were set). This created confusion for the user since no actual consumption took place. Steps to Reproduce: ============================ - Install the `mrp` module. - Create a tracked product (lot/serial) with quants. - Create and confirm an MO having that product as a component. - Change only the quants (e.g., location of the quant, not quantity); notice that manual consumption and picked boolean are set. Cause of the Issue: =========================== This issue occurs when clicking the 'Details' button (`action_show_details` method) on a stock move. That action passes the context `force_manual_consumption`, based on that which directly sets the `manual_consumption` and `picked` booleans in the `write` and `create` methods. [see](https://github.com/odoo/odoo/blob/master/addons/mrp/models/stock_move.py#L276). With This Commit: ============================ Manual consumption and picked boolean are no longer set when only quants (not quantity) are changed. Component consumption is now triggered only if the quantity differs from the demand, ensuring consistency and avoiding confusion for the user. This fix avoids unintended behaviour by ensuring that the picked and manual consumption booleans change only when the quantity differs from the demand. TaskID:- 5062365 Forward-Port-Of: odoo/odoo#225386
Public website shoppers could encounter a Forbidden error when the shop determined taxes or pricing rules from their location. This fix ensures the fiscal position is computed with the needed access, keeping the shopping experience available for visitors who are not logged in.
Original PR description
Ensure the fiscal position is always computed using sudo. When computing the fiscal position based on geolocated country, the result may not be return without sudo. Steps to reproduce: - Set a default Fiscal Position on the contact model (property_account_position_id) - Visit the website shop without logging in. - You will get a Forbidden error because Odoo raises an access error when fetching the fiscal position. This fix add a sudo() to the partner used to compute the fiscal position, so that when accessing the partner property, it will be returned with `env.su = True`. opw-5058588 Forward-Port-Of: odoo/odoo#225481
This fix updates Italian electronic invoice exports so self-invoices no longer include payment data that should be omitted. It also places the supplier’s original invoice number and date in the correct linked-invoice section, helping companies meet Italian tax authority formatting requirements.
Original PR description
1- `<DatiPagamento>` shouldn't be included in autofatture. 2- The supplier's original invoice number and date must be placed in the `<DatiFattureCollegate>`, using `<IdDocumento>` and `<DataDocumento>` fields respectively. Currently `<IdDocumento>` is added to the `<DatiOrdineAcquisto>`. A fix is made to add `<IdDocumento>` and `<DataDocumento>` to `<DatiFattureCollegate>`. references: https://www.agenziaentrate.gov.it/portale/documents/d/guest/guida_compilazione-fe-esterometro-v1-10_aprile_2025 opw-4810326 Forward-Port-Of: odoo/odoo#225276 Forward-Port-Of: odoo/odoo#212989
The printer interface now handles printer setup errors more gracefully when CUPS cannot add a printer, such as on read-only systems or with invalid printer names. Instead of stopping the service, the error is logged and the printer interface keeps running.
Original PR description
Before this commit, if CUPS raised an error when adding a printer in the `supported()` method of the printer driver, the exception would not be caught causing the printer interface to stop. This can happen for example if the filesystem is read-only or the printer has an invalid name. After this commit, we catch any CUPS errors and log them, allowing the printer interface to continue running. We also enter write mode before adding the printer to prevent any read-only errors. task-5086036 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227121