Daily updates from Odoo
Navigate
Branch
Friday, July 5, 2024
63 changes
33 changes
Resolved issues and error corrections
Stock lots will now use the company linked to their related product by default, even when another default company is present in the workflow. This prevents lots from being assigned to the wrong company or getting a company when they should not, improving accuracy in multi-company inventory operations.
Original PR description
Now that lots can be set without company, we want them to have by default the company of their related product. The issue is that if there is a `default_company_id` set in the context at any point, it will prevent the computation of the right `company_id`, causing the wrong company (or a company where there shouldn't be one) to be set on the lot. To prevent this, we simply pop the `default_company_id` from the context if present when checking the default values, forcing the use of the compute instead. Also restores the `default_company_id` in `action_generate_lot_line_vals`, as this removes the default from move lines, and is no longer necessary for lots. Description of the issue/feature this PR addresses: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where the starred message counter could stay outdated in another browser tab after a starred message was deleted. The counter is now updated from the server, so users see a consistent and reliable count across tabs.
Original PR description
Before this PR, the star message counter was not updated on message deletion on tabs that were unaware of the message. Steps to reproduce the issue: - Open two tabs and log in as admin. - Star a message; the counter should show 1 on both tabs. - Reload one tab without accessing the channel. - Delete the starred message from the other tab. - Notice that the star counter on the second tab still shows 1. The issue arose because the client-side star counter updated based on partial information, specifically only when the message was starred. If the message had not been fetched, this information was unavailable. This PR resolves the issue by removing the client-side computation and implementing a server-side notification instead. runbot-61305,62004
Fixes an issue where applicants entering an invalid LinkedIn URL on a job application briefly saw a warning that then disappeared. The warning now remains visible when needed, helping applicants correct their information before submitting.
Original PR description
steps to reproduce -go to host/jobs -go to any job -put a wrong linkedin url -> the message is not displayed (after a blink) reason https://github.com/odoo/enterprise/pull/65011 this pr adds a js function (checkRedundant) that remove the warning message no matter what if its check are successful fix adds a condition and parma to check if the warning message should be removed or not task-4010892 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
Miscellaneous changes
Previously, the down payment invoice used the account related to the product. The final invoice used the default computed account instead. This resulted in two different accounts being billed for the same client and the same sale. This commit makes the final invoice use the same account as its down payment. To verify: - Create a sale order with a product which have an income account different from default one - Create Downpayment => Invoice will have the income account of the product
Original PR description
Previously, the down payment invoice used the account related to the product. The final invoice used the default computed account instead. This resulted in two different accounts being billed for the same client and the same sale. This commit makes the final invoice use the same account as its down payment. To verify: - Create a sale order with a product which have an income account different from default one - Create Downpayment => Invoice will have the income account of the product - Fully invoice the sale order => Line to deduce the payment will use the default account [Ticket link](https://www.odoo.com/odoo/project.task/3887331) opw-3887331 Forward-Port-Of: odoo/odoo#170783
**Current behavior:** When importing a repair order record, if a picking_type_id is not supplied by the data source, the import will fail. **Expected behavior:** Fields with default values shouldn't be required during record creation. **Steps to reproduce:** 1. Create a .CSV with one column (e.g., `scheduled date`) and load it in the import record view in the Repair app 2. Map the CSV column to the repair model's date field 3. Click the test button to see the error (bad query)
Original PR description
**Current behavior:** When importing a repair order record, if a picking_type_id is not supplied by the data source, the import will fail. **Expected behavior:** Fields with default values shouldn't…
**Current behavior:** When importing a repair order record, if a picking_type_id is not supplied by the data source, the import will fail. **Expected behavior:** Fields with default values shouldn't be required during record creation. **Steps to reproduce:** 1. Create a .CSV with one column (e.g., `scheduled date`) and load it in the import record view in the Repair app 2. Map the CSV column to the repair model's date field 3. Click the test button to see the error (bad query) **Cause of the issue:** If a `picking_type_id` is not supplied, we try to get the default field value via `default_get()`. However, it is called incorrectly (string argument vs. container), so the string is iterated over and each letter is treated as a field name (none of which, of course, exist in the model). Later in the create sequence, we assume there is a `picking_type_id` value obtained from the `default_get()` call but it is not there. This (eventually) causes the invalid query. **Fix:** Correct the call to `default_get()`. opw-3813273 Forward-Port-Of: odoo/odoo#171589
(wrote by LSE) Before this commit: If an error happened when trying to synchronise a PoS order nothing is saved on the backend to inform the user regarding the error. Note: Odoo logs would contain the information, but it is out of reach for certain clients (on odoo online for instance). In theory, we can't lose any information as, if the sync process raise an exception, the order is still on the PoS browser cache that will then try to be resync when another order sync happen. But,
Original PR description
(wrote by LSE) Before this commit: If an error happened when trying to synchronise a PoS order nothing is saved on the backend to inform the user regarding the error. Note: Odoo logs would contain…
(wrote by LSE) Before this commit: If an error happened when trying to synchronise a PoS order nothing is saved on the backend to inform the user regarding the error. Note: Odoo logs would contain the information, but it is out of reach for certain clients (on odoo online for instance). In theory, we can't lose any information as, if the sync process raise an exception, the order is still on the PoS browser cache that will then try to be resync when another order sync happen. But, in practice, the support received some cases of "missing PoS orders". Which can happen as we fully rely on the client browser cache that can be cleared or use another computer/browser/session. After this commit: If an order can not be processed in the backend: - the PoS order data is saved in the PoS session attachments - a scheduled activity is created in the PoS session As an un-synced keep being tried to be sync (and will likely fail each time), we compare it with the already attached one to avoid having the content repeated multiple times. If the order was modified in between, a new attachment with the same name is created. Note: draft orders that will fail to validate are NOT stored The attachment and activity are automatically removed when the order of same reference is validated  opw-3650239 Forward-Port-Of: odoo/odoo#167269 Forward-Port-Of: odoo/odoo#147130
Problem: en_US data is loaded while the user uses another language Steps to reproduce: - Install "point_of_sale" app and "pos_loyalty" module - Change the language (e.g. to french) - Go to POS -> Products -> Discount & Loyalty - Create a new Loyalty Card - In Rewards, set a discount of 20 $ on order and save - Go to the shop and select a partner and a product (price must be expensive enough for the loyalty card to be applicable) - Click on "Reward", the earlier created reward is there
Original PR description
Problem: en_US data is loaded while the user uses another language Steps to reproduce: - Install "point_of_sale" app and "pos_loyalty" module - Change the language (e.g. to french) - Go to POS ->…
Problem: en_US data is loaded while the user uses another language Steps to reproduce: - Install "point_of_sale" app and "pos_loyalty" module - Change the language (e.g. to french) - Go to POS -> Products -> Discount & Loyalty - Create a new Loyalty Card - In Rewards, set a discount of 20 $ on order and save - Go to the shop and select a partner and a product (price must be expensive enough for the loyalty card to be applicable) - Click on "Reward", the earlier created reward is there - Go back to the form of the loyalty card and change the value and save - Go back to the shop - Click on "Reward" and the name of the loyalty card is still the same as before while it should be for the new price Cause: When loading the data, the record environment have language set to None so by default it is loaded in en_US which didn't recompute its value after the modification of the price. opw-3987961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171049
When the authorization of the payment expires. Happens when you do not capture manually tx in 7 days (by default). Stripe sends a webhook that payment is canceled which was not captured before this PR, hence the changes were not applied for the corresponding payment. With this PR the cancel webhook is captured and the corresponding payment is canceled odoo-side. opw-3957346 Forward-Port-Of: odoo/odoo#171061
Original PR description
When the authorization of the payment expires. Happens when you do not capture manually tx in 7 days (by default). Stripe sends a webhook that payment is canceled which was not captured before this PR, hence the changes were not applied for the corresponding payment. With this PR the cancel webhook is captured and the corresponding payment is canceled odoo-side. opw-3957346 Forward-Port-Of: odoo/odoo#171061
# Description Since upgrading Bootstrap a few months ago, the `nav-link-padding-x` and `nav-link-padding-y` classes now rely on CSS variables defined within the `nav` class. To ensure these variables are correctly applied, we need to wrap the `nav-item` in a nav class. This change fixes the missing padding issue for the sign-in button. Task: [4032574](https://www.odoo.com/odoo/project/2328/tasks/4032574?cids=2) --- I confirm I have signed the CLA and read the PR guidelines at
Original PR description
# Description Since upgrading Bootstrap a few months ago, the `nav-link-padding-x` and `nav-link-padding-y` classes now rely on CSS variables defined within the `nav` class. To ensure these variables are correctly applied, we need to wrap the `nav-item` in a nav class. This change fixes the missing padding issue for the sign-in button. Task: [4032574](https://www.odoo.com/odoo/project/2328/tasks/4032574?cids=2) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171887
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171167
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171167
[FIX] l10n_es_edi_facutrae: fix TotalGrossAmount and new fields - The tag TotalGrossAmount should be the sum of the GrossAmount tag which is calculated as (price - discount + charge). Currently, the TotalGrossAmount is calculated as the sum of the price before subtracting the discount and adding the charge. - Add new fields to the XML. - Remove fields for total general discounts and charges as they were computed incorrectly. task-4001821 Forward-Port-Of: odoo/odoo#170176
Original PR description
[FIX] l10n_es_edi_facutrae: fix TotalGrossAmount and new fields - The tag TotalGrossAmount should be the sum of the GrossAmount tag which is calculated as (price - discount + charge). Currently, the TotalGrossAmount is calculated as the sum of the price before subtracting the discount and adding the charge. - Add new fields to the XML. - Remove fields for total general discounts and charges as they were computed incorrectly. task-4001821 Forward-Port-Of: odoo/odoo#170176
Small fix and improvement on dumpstack function: - info might not be the best option and could easily be muted if the server log levels happened to be higher. - query_time is initially set to 0. If a dumpstack happened with this value, it will not display any qt nor pt as 0 is evaluated as False Forward-Port-Of: odoo/odoo#171261
Original PR description
Small fix and improvement on dumpstack function: - info might not be the best option and could easily be muted if the server log levels happened to be higher. - query_time is initially set to 0. If a dumpstack happened with this value, it will not display any qt nor pt as 0 is evaluated as False Forward-Port-Of: odoo/odoo#171261
Before this commit, trying to log non-ascii characters from the IoT box would raise an error. The case primarily happens when a user has devices in their system that are named with special characters (e.g Chinese characters for printer names, accented French names, etc). After this commit, a device name containing non-ascii characters will be logged properly without triggering any tracebacks. REASON: It's the option that incurs the least amount of changes in the codebase. Furthermore, alt
Original PR description
Before this commit, trying to log non-ascii characters from the IoT box would raise an error. The case primarily happens when a user has devices in their system that are named with special characters (e.g Chinese characters for printer names, accented French names, etc). After this commit, a device name containing non-ascii characters will be logged properly without triggering any tracebacks. REASON: It's the option that incurs the least amount of changes in the codebase. Furthermore, alternative options would lead to lots of bespoke code to cover all cases. The proposed change is also the one that offers the greatest flexibility: clients can freely use their native language to name their devices. OPW-4001252 Forward-Port-Of: odoo/odoo#171728
In a grouped kanban view, drag and drop a record from a group which contains a lot of records and has the "Load more" displayed in the bottom (i.e. which contains more records than the limit). Before this commit, the drag&dropped record was displayed twice: once where it was dropped (which is fine), and once from where it was dragged (which is wrong). This happened because we didn't correctly synchronize the reload of the column (which must be done because there're more records than the limit
Original PR description
In a grouped kanban view, drag and drop a record from a group which contains a lot of records and has the "Load more" displayed in the bottom (i.e. which contains more records than the limit). Before…
In a grouped kanban view, drag and drop a record from a group which contains a lot of records and has the "Load more" displayed in the bottom (i.e. which contains more records than the limit). Before this commit, the drag&dropped record was displayed twice: once where it was dropped (which is fine), and once from where it was dragged (which is wrong). This happened because we didn't correctly synchronize the reload of the column (which must be done because there're more records than the limit, and we "removed" one record from the column) and the update on the moved record (s.t. it belongs to the correct column). As a consequence, we reloaded the column before updating the record, so it was still part of the original column. This commit fixes the issue by splitting the logic of the _removeRecords function: before, it altered the records locally (to filter out removed records) and updated the count, and, if necessary, it reloaded the list. Now, _removeRecords is only responsible to update the list locally, which must be done directly as we want the user to get a direct feedback of the move. In the flows where a reload might be necessary, we do it afterwards. In the case of a moveRecord, we can then do it after the update on the record. opw-3891269 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#171411
When a user tries to validate an invoice of the POS order a traceback will occur. Steps to produce: - Install 'l10n_sa_edi', 'point_of_sale', and 'contacts' modules. - Switch to a 'SA Company' company. - Open 'Point of Sale' and create and open New Session. - Select any products (with customer taxes )> payment > Select payment method > Invoice > Select individual customer > Validate error will generated in the backend. ```AttributeError: 'bool' object has no attribute 'encode'```
Original PR description
When a user tries to validate an invoice of the POS order a traceback will occur. Steps to produce: - Install 'l10n_sa_edi', 'point_of_sale', and 'contacts' modules. - Switch to a 'SA Company'…
When a user tries to validate an invoice of the POS order a traceback will occur. Steps to produce: - Install 'l10n_sa_edi', 'point_of_sale', and 'contacts' modules. - Switch to a 'SA Company' company. - Open 'Point of Sale' and create and open New Session. - Select any products (with customer taxes )> payment > Select payment method > Invoice > Select individual customer > Validate error will generated in the backend. ```AttributeError: 'bool' object has no attribute 'encode'``` This is because 'signature' is 'False' at [1] while generating an invoice for an order and a system tries to encode it. link [1]: https://github.com/odoo/odoo/blob/149a2acea96cff14990b667ee611c3afbdc146f2/addons/l10n_sa_edi/models/account_move.py#L115 This commit solves the above issue by adding a condition if 'signature' is 'False' then encodes a blank string. sentry-5482247880 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#169407
Improve some shortcomings of the comparison system applied on history revisions. * Better handling of diffs generated by changes in html parameters: > Previous system was generating unnecessary HTML opening tags in those cases. * Better handling of addition or deletion in previously empty HTML tags. > Previous system was generating unnecessary HTML opening tags in those cases. * Better handling of HTML tag replacement. > Previous system was generating invalid HTML in those cases.
Original PR description
Improve some shortcomings of the comparison system applied on history revisions. * Better handling of diffs generated by changes in html parameters: > Previous system was generating unnecessary HTML…
Improve some shortcomings of the comparison system applied on history revisions. * Better handling of diffs generated by changes in html parameters: > Previous system was generating unnecessary HTML opening tags in those cases. * Better handling of addition or deletion in previously empty HTML tags. > Previous system was generating unnecessary HTML opening tags in those cases. * Better handling of HTML tag replacement. > Previous system was generating invalid HTML in those cases. * Trade off the comparison generated on some complex changes to be able to display correct HTML > When we have both an HTML parameter change on the container tag and a content > change, we choose to display both `<added>` and `<removed>` in the same > container. > The current system is not smart enough to generate a better comparison and > would require extensive refactoring to handle this better. task-3761721 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171276 Forward-Port-Of: odoo/odoo#160460
Another checksum flag was added in 4a578a58 but this flag is not supported by older versions of Docker. Forward-Port-Of: odoo/odoo#171879
Original PR description
Another checksum flag was added in 4a578a58 but this flag is not supported by older versions of Docker. Forward-Port-Of: odoo/odoo#171879
PR does 2 things: - First round of .po file cleaning for es_xx.po files. Since v17 started using es_419 instead of the es_xx.po files, these languages are no longer accessible on Transifex for the translators to change. These files were mostly out of date/incorrect anyways though, so we delete them. The one exception to this is the es_CL.po because Chile has some specific words that differ from the rest of LATAM. This cleanup will occur in a followup PR to give translators time to double chec
Original PR description
PR does 2 things: - First round of .po file cleaning for es_xx.po files. Since v17 started using es_419 instead of the es_xx.po files, these languages are no longer accessible on Transifex for the…
PR does 2 things: - First round of .po file cleaning for es_xx.po files. Since v17 started using es_419 instead of the es_xx.po files, these languages are no longer accessible on Transifex for the translators to change. These files were mostly out of date/incorrect anyways though, so we delete them. The one exception to this is the es_CL.po because Chile has some specific words that differ from the rest of LATAM. This cleanup will occur in a followup PR to give translators time to double check if any of the translations in from these es_CL files should remain. - Cleanup the en_AU/en_GB.po files. There were some non-sense "translations" in them and most of them didn't add much value. Some en_AU files had specific legitimate "translations" were left (e.g. tax "GST", check = cheque), so they were only modified to remove any erroneous translations task: 3593077 ENT PR: https://github.com/odoo/enterprise/pull/65875 v17 PR: https://github.com/odoo/odoo/pull/170183 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171520
Since [1] and [2] the sort field was mistakenly set as a JS array instead of a stringified JSON array with double quotes. In JS we parse them and ignore errors. https://github.com/odoo/odoo/blob/70ac17346b17e07848b1567df7f333e72f07fc73/addons/web/static/src/search/search_model.js#L1959 Current data is wrong and the sort spec never worked. Upgrade PR where we found the bug : - https://github.com/odoo/upgrade/pull/5903 [1]: https://github.com/odoo/odoo/commit/3c0d98bcd8adf9325ee3497e
Original PR description
Since [1] and [2] the sort field was mistakenly set as a JS array instead of a stringified JSON array with double quotes. In JS we parse them and ignore errors. https://github.com/odoo/odoo/blob/70ac17346b17e07848b1567df7f333e72f07fc73/addons/web/static/src/search/search_model.js#L1959 Current data is wrong and the sort spec never worked. Upgrade PR where we found the bug : - https://github.com/odoo/upgrade/pull/5903 [1]: https://github.com/odoo/odoo/commit/3c0d98bcd8adf9325ee3497eb8d25ec7f904d6a5#diff-80650b3ebe3ff7900a5409e2047c91a71c7d86b11cb2dbc1f5c99b77f381ae95 [2]: https://github.com/odoo/odoo/commit/3355dc16235355fe51e894f14e275210464608c6#diff-2c13c95bb9b3423a9150ff5b7fb5a78ba1b7c1f405f0dd40ff951bdb62fe8f95 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171841 Forward-Port-Of: odoo/odoo#171719
In [1] when the translation conditions were adapted to allow restricted editors to translate, the general editability right was wrongly impacted, making the user believe a page could be edited when it was not the case. This commit restores the editability condition and limits the translatability to records that can be modified by the restricted editor user. A `_check_user_can_modify` is introduced to enable customization. Steps to reproduce (described in terms of expected behavior):
Original PR description
In [1] when the translation conditions were adapted to allow restricted editors to translate, the general editability right was wrongly impacted, making the user believe a page could be edited when…
In [1] when the translation conditions were adapted to allow restricted editors to translate, the general editability right was wrongly impacted, making the user believe a page could be edited when it was not the case. This commit restores the editability condition and limits the translatability to records that can be modified by the restricted editor user. A `_check_user_can_modify` is introduced to enable customization. Steps to reproduce (described in terms of expected behavior): - Install `website_sale` and `website_event` - Add a language to the website - Assign the following rights to a non-admin user: - Website: Restricted editor - Sale: Administrator - Event: No right - Log in as that user - Go to the contact us page: - Edit: nothing should be possible - Translate: not available - Go to a product page: - Edit: blocks can be dropped in fields, texts can be changed - Translate: available and texts can be changed - Go to an event page: - Edit: nothing should be possible - Translate: not available [1]: https://github.com/odoo/odoo/commit/1bcc0733c9af52c6cf38b12f24ff6ed96314bec4 Forward-Port-Of: odoo/odoo#171844 Forward-Port-Of: odoo/odoo#170102
This error occurs when we keep the product name empty in the stock move and try to generate the Serials/Lots by clicking on ``Generate Serials/Lots``. Steps to reproduce: - Install the ``stock`` module - Create a new product(eg: test) and set its tracking ``By Lots`` in Traceability - Create a new receipt and add ``test`` as product and ``Mark as ToDo`` - Again add ``test`` as the product and on the right, click on ``bars(fa-icon)`` - Remove the product name > click on ``Generate Serials
Original PR description
This error occurs when we keep the product name empty in the stock move and try to generate the Serials/Lots by clicking on ``Generate Serials/Lots``. Steps to reproduce: - Install the ``stock``…
This error occurs when we keep the product name empty in the stock move and try to generate the Serials/Lots by clicking on ``Generate Serials/Lots``. Steps to reproduce: - Install the ``stock`` module - Create a new product(eg: test) and set its tracking ``By Lots`` in Traceability - Create a new receipt and add ``test`` as product and ``Mark as ToDo`` - Again add ``test`` as the product and on the right, click on ``bars(fa-icon)`` - Remove the product name > click on ``Generate Serials/Lots`` - Click on ``Generate`` Traceback: ``KeyError 'product_id'`` This error occurs at [1] because ``product_id`` is not present in the default values. This commit will fix the above error by not showing the ``Generate Serials/Lots`` and ``Import Serials/Lots`` buttons when ``product`` is empty and also will raise an error if ``product`` is not found. [1]: https://github.com/odoo/odoo/blob/b1ba4018f91f1fd788f48180bd5fc4656ab1e35c/addons/stock/models/stock_move.py#L930 sentry-5072366645 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170718
Before this commit, the getFiltersMatchingPivot was prone to errors when the input that is supposed to be generated automatically has been wrongly formed by the user. After this commit, the function is more robust and has sensible defaults. OWP: 3952358 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171909 Forward-Port-Of: odoo/odoo#171630
Original PR description
Before this commit, the getFiltersMatchingPivot was prone to errors when the input that is supposed to be generated automatically has been wrongly formed by the user. After this commit, the function is more robust and has sensible defaults. OWP: 3952358 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171909 Forward-Port-Of: odoo/odoo#171630
Currently, a traceback is occurring when the user clicks on the chat button while creating a new employee record. To reproduce this issue: 1) Install `employee` 2) Create a new `employee` record 3) Give the value for the related user in the `HR Setting` page 4) A chat button appears at the left side of the `employee name` 5) Click on the chat button, and a traceback occurs Error:- ``` TypeError: '<' not supported between instances of 'int' and 'NoneType' File "odoo/http.py",
Original PR description
Currently, a traceback is occurring when the user clicks on the chat button while creating a new employee record. To reproduce this issue: 1) Install `employee` 2) Create a new `employee` record 3)…
Currently, a traceback is occurring when the user clicks on the chat button while creating a new employee record.
To reproduce this issue:
1) Install `employee`
2) Create a new `employee` record
3) Give the value for the related user in the `HR Setting` page
4) A chat button appears at the left side of the `employee name`
5) Click on the chat button, and a traceback occurs
Error:-
```
TypeError: '<' not supported between instances of 'int' and 'NoneType'
File "odoo/http.py", line 2248, in __call__
response = request._serve_db()
File "odoo/http.py", line 1823, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1843, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1821, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1828, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2053, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 756, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 38, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "addons/mail/models/discuss/discuss_channel.py", line 973, in channel_get
""", (tuple(partners_to), tuple(partners_to), sorted(list(partners_to)),))
```
When the related user value is given, the `chat` button is visible to the user before saving the record.
But here in the `openChat` method, we used `props.record.resId`.
which is created after the employee record is created.
https://github.com/odoo/odoo/blob/a6c14effd3e38cf38966ae89675e8e54b54cf825/addons/hr/static/src/components/employee_chat/employee_chat.xml#L4-L11
It leads to the above traceback as `channel_get` calls with `partners_to` as `None` from the below line
https://github.com/odoo/odoo/blob/a6c14effd3e38cf38966ae89675e8e54b54cf825/addons/mail/static/src/core/common/thread_service.js#L555-L557
This commit will resolve this issue by making it visible to the user after the employee record is created.
Note:- An alternative solution can be at this line
https://github.com/odoo/odoo/blob/9f84ff581686f8e2198a0a88d19f7a52e27ccb53/addons/hr/static/src/thread_service_patch.js#L9
```
if (!person) {
this.notificationService.add(
_t("To open chat, please first save the record.."),
{ type: "info" }
);
return;
}
```
sentry- 5501637214
Forward-Port-Of: odoo/odoo#171380When the client side requests an update of message statuses for sent invoices that are "Pending reception" (`peppol_move_state == "processing"`), the IAP throws an error if message is still being processed on the server side. We get a `702` "Peppol Request Not Ready" error code from the server in that case. Currently, on the client side as long as we see an error, we update `peppol_move_state` to `error`, which prevents further status updates (we only check "processing" messages). We
Original PR description
When the client side requests an update of message statuses for sent invoices that are "Pending reception" (`peppol_move_state == "processing"`), the IAP throws an error if message is still being processed on the server side. We get a `702` "Peppol Request Not Ready" error code from the server in that case. Currently, on the client side as long as we see an error, we update `peppol_move_state` to `error`, which prevents further status updates (we only check "processing" messages). We should not update the move state to error and just keep it as processing, so that we will retry fetching the state on the next scheduled action run. no task, customer feedback --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171479
A previous fix was iterating on all the records in `self` in order to remove an issue when multiple companies are involved in the deletion. However the way it is fixed was triggering multiple calls to `check_move_sequence_chain` even though that method is optimized to only check once every move, hence worse perforance. Also, the moves need to be deleted in order if we wanted to do it that way. Fixup of f3863949b95613c4b1d7292f7fc2da2696af467a Forward-Port-Of: odoo/odoo#171984
Original PR description
A previous fix was iterating on all the records in `self` in order to remove an issue when multiple companies are involved in the deletion. However the way it is fixed was triggering multiple calls to `check_move_sequence_chain` even though that method is optimized to only check once every move, hence worse perforance. Also, the moves need to be deleted in order if we wanted to do it that way. Fixup of f3863949b95613c4b1d7292f7fc2da2696af467a Forward-Port-Of: odoo/odoo#171984
Steps to reproduce: - Create a subcontracted bom for a product with flexible consumption (with warning) - Create a receipt for that product from the recorded subcontractor with more than 1 qty - Click on 'Record Component' and set one qty produced and more than expected qty to consume - Record Production and validate the warning - Do the same thing a second time Issue: While the first 'Record Component' prompts the warning for different consumption, the second attempt doesn't. This i
Original PR description
Steps to reproduce: - Create a subcontracted bom for a product with flexible consumption (with warning) - Create a receipt for that product from the recorded subcontractor with more than 1 qty - Click on 'Record Component' and set one qty produced and more than expected qty to consume - Record Production and validate the warning - Do the same thing a second time Issue: While the first 'Record Component' prompts the warning for different consumption, the second attempt doesn't. This is due to the context containing the 'skip_consumption' key from the first attempt being used to generate the new action for the remaining quantity to produce. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171957 Forward-Port-Of: odoo/odoo#171216
STEP TO REPRODUCE: ================== 1- Go on Time off Application 2- Select First Approval filter You will see two records: one with "second approval" status and one with "to approve" status. With this commit only leaves with "to approve status" will appears with this filter. task-4005045 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170910
Original PR description
STEP TO REPRODUCE:
==================
1- Go on Time off Application
2- Select First Approval filter
You will see two records: one with "second approval" status and one with "to approve" status.
With this commit only leaves with "to approve status" will appears with this filter.
task-4005045
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#170910Previously, users were able to edit reward sale order lines. However, these edits were undone on confirming the SO, which was confusing. This fix makes the quantity, unit price, and taxes of such lines readonly to make it clear that they're not meant to be edited. opw-3971219 Forward-Port-Of: odoo/odoo#171269
Original PR description
Previously, users were able to edit reward sale order lines. However, these edits were undone on confirming the SO, which was confusing. This fix makes the quantity, unit price, and taxes of such lines readonly to make it clear that they're not meant to be edited. opw-3971219 Forward-Port-Of: odoo/odoo#171269
Before this commit: If 2 IoT box are set on different companies and both have a printer with the same identifier. On the completion request, the server can not be sure from which device the priting was completed and might choose the wrong IoT. As such the "fail to print" notification will appear while it is false opw-3965623 Forward-Port-Of: odoo/odoo#171808
Original PR description
Before this commit: If 2 IoT box are set on different companies and both have a printer with the same identifier. On the completion request, the server can not be sure from which device the priting was completed and might choose the wrong IoT. As such the "fail to print" notification will appear while it is false opw-3965623 Forward-Port-Of: odoo/odoo#171808
No description available.
**Current behavior:** Lines in an invoice may display a product name incorrectly if they mix arabic/latin characters. **Expected behavior:** These types of product names should respect the RTL syntax if being sent to an Arabic lang partner. **Steps to reproduce:** *Ensure the rtlcss node package is installed and in PATH* 1. Create a Saudi company / switch to a demo one, switch to Arabic language 2. Create a product with the name: `دفتر سلكي بهوية الهيئة A4 - شد 50 ورقة
Original PR description
**Current behavior:** Lines in an invoice may display a product name incorrectly if they mix arabic/latin characters. **Expected behavior:** These types of product names should respect the RTL syntax…
**Current behavior:**
Lines in an invoice may display a product name incorrectly if
they mix arabic/latin characters.
**Expected behavior:**
These types of product names should respect the RTL syntax if
being sent to an Arabic lang partner.
**Steps to reproduce:**
*Ensure the rtlcss node package is installed and in PATH*
1. Create a Saudi company / switch to a demo one, switch to
Arabic language
2. Create a product with the name:
`دفتر سلكي بهوية الهيئة A4 - شد 50 ورقة`
3. Create an invoice to a partner with Arabic set as their lang
4. Confirm the invoice -> print it
5. The product name on the PDF has a mal-ordered name
**Cause of the issue:**
The right-to-left rule of the Arabic language is not getting
enforced.
There is a secondary bug where certain whitespace-delimited
substrings get displayed in a broken, overlapping way. From my
no-comprehensive testing, it seems to only happen when there is
a sequence in the string where you have some substring ending in
a numeral (0-9) followed by a single-space, then another
substring that begins with an Arabic alphabet character.
**Fix:**
When printing an invoice with an arabic partner:
1. Use right-aligned text instead of left
2. Pad single-space breaks between substrings in a product name
where the first substring ends with a numeral and the
second begins with an alpha char.
3. Add explicit `dir="rtl"` attribute to the display node
opw-3971541
Forward-Port-Of: odoo/odoo#169267This PR refactors the process of finding candidates (SVL) in the FIFO run of the stock account. With the current Odoo standard behavior, we can't update the domain to find candidates or adjust the candidates' values, and we have to override `def _run_fifo.` This PR addresses this issue. @qrtl QT4657 Forward-Port-Of: odoo/odoo#170470
Original PR description
This PR refactors the process of finding candidates (SVL) in the FIFO run of the stock account. With the current Odoo standard behavior, we can't update the domain to find candidates or adjust the candidates' values, and we have to override `def _run_fifo.` This PR addresses this issue. @qrtl QT4657 Forward-Port-Of: odoo/odoo#170470
before this commit, there is no option to enable tracking for draft sale orders. In some cases end users need this functionality, right now we have to customize and make this possible after this commit, a new system parameter is introduced sale.track_draft_orders , by which end user can control the tracking. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171442
Original PR description
before this commit, there is no option to enable tracking for draft sale orders. In some cases end users need this functionality, right now we have to customize and make this possible after this commit, a new system parameter is introduced sale.track_draft_orders , by which end user can control the tracking. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171442
21 changes
New functionality added to Odoo
Website editors can now add a dynamic section that displays available appointments directly on a website. The update makes appointments easier to promote and improves filtering by staff, resources, or appointment names, while clarifying the existing appointment button option.
Original PR description
*: website_appointment__account_payment, website_enterprise In order to easily display existing appointments on the website, add an 'Appointments' dynamic snippet. It will display punctual and…
*: website_appointment__account_payment, website_enterprise In order to easily display existing appointments on the website, add an 'Appointments' dynamic snippet. It will display punctual and recurring appointments, published and linked to the current website (or all). Also, a few options are added: - One can filter on Users / Resources - If one of those is used, the user can select existing users / resources to filter the displayed appointments - Also, one can specify a list of comma separated names that will be used to search appointments based on 'name'. Some placeholder data is added. The snippet template is the same one as appointment cards on the front-end. Therefore, the card template has been split into sub templates, being called in the snippet one. The split is done in a separate commit. The main difference is the display of the sample ribbon. The previous 'Appointment' snippet, which adds a button that can redirect to appointments (with some options) is renamed (in strings, not in the files, to avoid versioning the snippet) to 'Appointment Button' to be more explicit. In a separate commit, align domains used to fetch and choose appointment types for the s_online_appointment snippet. (including both website and datetime domains) Task-3889948
Enhancements to existing features
Appraisal forms now include an option to notify followers when a 360 feedback survey is submitted. This helps managers and relevant stakeholders stay informed about feedback completion without manual follow-up.
Original PR description
new Followers options added in appraisal form for 360 feedback when checked, send notification after submitting 360 feedback survey form in appraisal task-3956699
Tasks created from the calendar now keep both their start and deadline dates based on the selected time range. This makes task planning more accurate and consistent when users create tasks directly from day or week calendar views.
Original PR description
…alendar view Before this commit: - When creating tasks from calendar view by selecting one or many cells in day/weeks scale, the task is created with only date_deadline. its planned_date_begin is not set. After this commit: - planned_date_begin is set. task-3916735
Tax reports now show a visual warning when the base amount and tax amount on a line appear inconsistent. This helps accounting users spot potential reporting issues faster and review them before relying on the report.
Original PR description
Displays a visual cue in `generic_tax_report`, when the base amount and tax amount of a line is inconsistent. task-3203762
The appraisal settings page now makes it clearer how appraisal dates and automatic appraisal creation work. This helps HR teams understand that next appraisal dates are still calculated by default, while appraisal plans enable automatic creation of due appraisals.
Original PR description
For appraisals, next_appraisal_date is computed regardless with default whether appraisal_plan is set or not. While when appraisal_plan is set, cron creates due appraisals automatically. It was not obvious with previous settings view. This commit reworks UX to clarify that. task-3961343
This update replaces an internal search operator with a standard equivalent across several Odoo business apps. The change should not alter day-to-day behavior, but it helps keep the platform easier to maintain and more consistent for future updates.
Original PR description
We can use 'in' SQL instead of inselect which is an internal operator. odoo/odoo#171371 https://github.com/odoo/documentation/pull/10026 task-4022654
The Indian GST reporting tests were updated to match the latest invoice-level HSN code validation rules. This helps ensure tax reports continue to validate product classification details correctly after recent changes.
Original PR description
In this PR: Fix merge conflicts in Task ID 3681519 by updating test cases to align with new HSN code validation at the invoice level. Task ID: 3681519
The helpdesk ticket confirmation page now has a cleaner, more elegant layout that matches the website thank-you page. This gives customers a more consistent and polished experience after submitting a support request.
Original PR description
This PR enhances the layout of the "ticket received" page of `website_helpdesk` to make it more elegant and to keep the layout consistent with the `website` "thank you" page (see [odoo/#166138](https://github.com/odoo/odoo/pull/166138)). task-3790303 Requires: - https://github.com/odoo/odoo/pull/166138 --- | Before | After | |--------|--------| | <img width="1141" alt="Capture d’écran 2024-05-30 à 13 03 01" src="https://github.com/odoo/enterprise/assets/80679690/68c3bc56-ccca-4960-998f-98e580d5067c"> | <img width="473" alt="Capture d’écran 2024-05-30 à 13 02 44" src="https://github.com/odoo/enterprise/assets/80679690/3dfed26b-e899-477e-ac1f-09b1dc74e900"> |
When a salary rule is duplicated, the copied rule name now automatically ends with “(copy)”. This makes it easier for payroll users to distinguish originals from duplicates and avoid confusion when managing salary rules.
Original PR description
This commit adds `(copy)` at the end of the salary rule name when the user duplicates the rule. task: 4014255
Sendcloud and FedEx delivery options now work with the updated pickup location selector in the online checkout. This keeps pickup point choices consistent across carriers and removes outdated screens that are no longer needed.
Original PR description
*: website_delivery_sendcloud, website_sale_fedex Remove now unused views, uniformize data sent by delivery methods, and adjust tests to adapt to the changes made in `Delivery`. See also: - https://github.com/odoo/odoo/pull/156382 - https://github.com/odoo/upgrade/pull/6194 task-3747001
Belgian salary package contracts now include the company car model name as a tracked benefit. This helps HR and employees clearly see when the selected car model changes as part of signing a new contract.
Original PR description
This commit adds car model name as a benefit, so that it can be reflected as a change when a new contract is signed. task: 3908690
Code cleanup and technical improvements
This update prepares automated test tours for a simpler step format by replacing a special modal-search option with direct modal selectors. It is an internal cleanup that helps reduce maintenance complexity without changing day-to-day user behavior.
Original PR description
In order to simplify the structure of a tour step, it was decided to remove the "in_modal" key. The purpose of this key is to search for the trigger in a modal element. But actually you just need to add ".modal" to the selector. This functionality therefore really has little added value. That's why we're removing it. In this commit, we prepare the ground to be able to remove this functionality by adding .modal to the selectors and forcing the fact of not looking in a modal (in_modal: false) otherwise that would be duplicative. task~3974087 https://github.com/odoo/odoo/pull/171709
Miscellaneous changes
### Issue: A quantity of `3` gets displayed as `3.00...004`. ### Steps to reproduce: - Settings > Technical > Database Structure > Decimal Accuracy - Change the `Digits` of `Product Unit of measure` to 5 - Create a storable product P1 with a BOM: - In the operation tab: one operation in `Assembly line 1` - In the component tab: 1 unit of P2 consumed in the operation - Create and confirm an MO for 3 units of P1 - Go to the shopfloor module, remove the MO ready filter Two issues can b
Original PR description
### Issue: A quantity of `3` gets displayed as `3.00...004`. ### Steps to reproduce: - Settings > Technical > Database Structure > Decimal Accuracy - Change the `Digits` of `Product Unit of measure`…
### Issue: A quantity of `3` gets displayed as `3.00...004`. ### Steps to reproduce: - Settings > Technical > Database Structure > Decimal Accuracy - Change the `Digits` of `Product Unit of measure` to 5 - Create a storable product P1 with a BOM: - In the operation tab: one operation in `Assembly line 1` - In the component tab: 1 unit of P2 consumed in the operation - Create and confirm an MO for 3 units of P1 - Go to the shopfloor module, remove the MO ready filter Two issues can be noticed: - Click on Register Production A pop up opens. Before validating it: The displayed producing quantity of P1 and the quantity of P2 that should be consumed by the operation is`3.00...004`. After validation, the produced quantity is rounded. However, if you click on the cross the rounding error will remain. In addition, the second rounding issue will remain even after validation of the consumed qty. ### Cause of the issue: Our float utils introduce tiny rounding errors, especially at higher precisions. In our case, these errors are introduced during the call of the write method of the `web_save`. ### Fix: We eliminate the rounding errors for the display in the same way as initially ptoposed by https://github.com/odoo/enterprise/pull/58880 see commit https://github.com/odoo/enterprise/commit/1c2f0068d319917bb4af163396d0861a1ff6c9e1 and adapt it to also apply to the raw_move_ids of the MO. opw-3861892 --- Forward-Port-Of: odoo/enterprise#62510
For the `Special Economic Zone` , we don't need to show invoice lines in nil category table. The issue was part of the PR https://github.com/odoo/enterprise/pull/61433 but it got missed from saas-17.2 version while resolving the conflicts. saas-17.2 version PR https://github.com/odoo/enterprise/pull/65105 Forward-Port-Of: odoo/enterprise#66051
Original PR description
For the `Special Economic Zone` , we don't need to show invoice lines in nil category table. The issue was part of the PR https://github.com/odoo/enterprise/pull/61433 but it got missed from saas-17.2 version while resolving the conflicts. saas-17.2 version PR https://github.com/odoo/enterprise/pull/65105 Forward-Port-Of: odoo/enterprise#66051
The withholding extra is being computed based on the current date, and not based on the payslip one. This is of course incorrect. Forward-Port-Of: odoo/enterprise#65868
Original PR description
The withholding extra is being computed based on the current date, and not based on the payslip one. This is of course incorrect. Forward-Port-Of: odoo/enterprise#65868
Before, when creating an invoice for eu operations, lines without product were not accounted inside the ec sales report. Now when an invoice with lines without product happens, it will be displayed inside the ec sales report. This fix had to change the way the sbr icp export retrieved those values. Task: 3978307 Forward-Port-Of: odoo/enterprise#66006 Forward-Port-Of: odoo/enterprise#64265
Original PR description
Before, when creating an invoice for eu operations, lines without product were not accounted inside the ec sales report. Now when an invoice with lines without product happens, it will be displayed inside the ec sales report. This fix had to change the way the sbr icp export retrieved those values. Task: 3978307 Forward-Port-Of: odoo/enterprise#66006 Forward-Port-Of: odoo/enterprise#64265
Following https://github.com/odoo/enterprise/pull/57063 , demo companies were merged with base companies, we adapt the demo data references to fix tests. Forward-Port-Of: odoo/enterprise#66067
Original PR description
Following https://github.com/odoo/enterprise/pull/57063 , demo companies were merged with base companies, we adapt the demo data references to fix tests. Forward-Port-Of: odoo/enterprise#66067
This PR introduces a `l10n` test over the Balance Sheet reports. Each Balance Sheet report in the `LOC_DATA` global at the head of the file will be tested. The test generates a journal entry with a line in every account that is not `off_balance`. It then checks whether the Balance Sheet is balanced. The test does this both for debits and for credits. The test will give a warning for any installed Balance Sheet report which is not specified in the LOC_DATA global. The aim is to change th
Original PR description
This PR introduces a `l10n` test over the Balance Sheet reports. Each Balance Sheet report in the `LOC_DATA` global at the head of the file will be tested. The test generates a journal entry with a…
This PR introduces a `l10n` test over the Balance Sheet reports.
Each Balance Sheet report in the `LOC_DATA` global at the head of the file will be tested.
The test generates a journal entry with a line in every account that is not `off_balance`.
It then checks whether the Balance Sheet is balanced.
The test does this both for debits and for credits.
The test will give a warning for any installed Balance Sheet report which is not specified in the LOC_DATA global. The aim is to change this to an error once all existing Balance Sheets are tested, to make this test mandatory for any new localizations.
For each localization with a Balance Sheet, the test needs to know the XMLIDs of:
- the CoA
- the Balance Sheet report
- the Total Assets line of the Balance Sheet
- the Total Liabilities line of the Balance Sheet
- the Total Equity line of the Balance Sheet (if applicable)
Setting the global `IDENTIFY_INCORRECT_ACCOUNTS` to `True` switches the behaviour of the test: it identifies the accounts that cause the imbalance using a binary search. This is off by default for runbot.
**Performance impact**
- For each Balance Sheet, the test does the following:
- load the chart template
- create an account.move with 4 AMLs for each account (one debit and credit in the account; and one debit and credit in the counterpart account)
- generate the report once.
- The Binary Search (which can be toggled when testing locally) is quite efficient:
- If there is just one incorrect account, then the report needs to be generated `log2(<number of accounts>)` times.
- If there are `X` incorrect accounts, then in the worst-case the report may need to be generated `X * log2(<number of accounts>)` times.
On the Belgian CoA, with no incorrect accounts, the test takes 14s on my PC. With 4 incorrect accounts, the test takes 33s.
Task: 3060790
Forward-Port-Of: odoo/enterprise#66007
Forward-Port-Of: odoo/enterprise#36838Forward-Port-Of: odoo/enterprise#66017 Forward-Port-Of: odoo/enterprise#65957
Original PR description
Forward-Port-Of: odoo/enterprise#66017 Forward-Port-Of: odoo/enterprise#65957
Before this commit, selection item options were not updated properly. 1. When adding some options, validating and then removing the options and go to sign, the removed options would still be there. This happened because when passing an empty array to the backend it would be recognized as an empty set of commands, it's like we are telling odoo to do nothing. To fix this we use the command [6, false, [new_ids]]. 2. `state.option_ids` were updated using `changes.option_ids` which is ve
Original PR description
Before this commit, selection item options were not updated properly. 1. When adding some options, validating and then removing the options and go to sign, the removed options would still be there.…
Before this commit, selection item options were not updated properly. 1. When adding some options, validating and then removing the options and go to sign, the removed options would still be there. This happened because when passing an empty array to the backend it would be recognized as an empty set of commands, it's like we are telling odoo to do nothing. To fix this we use the command [6, false, [new_ids]]. 2. `state.option_ids` were updated using `changes.option_ids` which is very fragile, for example in 16.0 we the changes are given in the form of `[6, false, [id1, id2, ..]]` but in 17.0 we have a list of commands for adding and removing for example `[[4, id1], [3, id2]]` To count on some fixed form of updates would introudce bugs if this form changes in future. To fix this we use `record.data.option_ids.currentIds` which is basically the live set of Ids. 3. when updating both options and responsible at the same time before validating, responsible won't update. This happened becase of the return statement when the options change. To fix this wer remove the return keyword and allow them both to be updated. Task: 3972994 Forward-Port-Of: odoo/enterprise#64333
Prior to this commit, when uploading a file through a share, the file upload note used the share creator's id instead of the id of the actual user who uploaded the file. After this commit, the id of the actual file uploader is used. Forward-Port-Of: odoo/enterprise#65398
Original PR description
Prior to this commit, when uploading a file through a share, the file upload note used the share creator's id instead of the id of the actual user who uploaded the file. After this commit, the id of the actual file uploader is used. Forward-Port-Of: odoo/enterprise#65398
9 changes
Resolved issues and error corrections
This fix ensures that timesheet reminder notification dates are properly calculated when a new company is created in Odoo. Previously, these reminder dates were only set when specific configuration fields were manually changed, even though they had default values. Now the system automatically calculates these dates during company creation, ensuring employees and managers receive their timesheet reminders as expected from day one.
Original PR description
Before this commit the timesheet_mail_employee_nextdate and timesheet_mail_manager_nextdate Were calculated only when a change was made on timesheet_mail_employee_delay, timesheet_mail_employee_interval or timesheet_mail_manager_delay, timesheet_mail_manager_interval fields, even tho those two have a default value Now the _timesheet_postprocess method will always call _calculate_timesheet_mail_employee_nextdate and _calculate_timesheet_mail_manager_nextdate method when called from the res.company.create method Seems to work even if the delay and interval fields don't have default value Following this PR > https://github.com/odoo/enterprise/pull/48096 15.0 > master Task-3714293 Forward-Port-Of: odoo/enterprise#55546
This fix corrects how AvaTax determines which location information to use when generating tax reports. Previously, the system prioritized GPS coordinates (latitude/longitude) over actual street addresses, which prevented important address fields from being populated in AvaTax reports. Now the system will use the customer's address information first, only falling back to GPS coordinates if no address is available. This ensures AvaTax reports include complete address details, which is critical for accurate tax calculations and billing.
Original PR description
Before this commit, avatax used the longitude and latitude in priority even if the partner has an address. The problem with this is that when you print the AvaTax report, the fields DestStreet, DestCity, and DestPostalCode are not populated because AvaTax was not sent any of that information. The customer needs those fields to be populated or else they may be charged more money. So now it will be the opposite, we will use the address in priority but if the customer has a delivery address with no address information we will use the latitude and longitude of the delivery address partner. Task: 4011481 Forward-Port-Of: odoo/enterprise#65971 Forward-Port-Of: odoo/enterprise#65726
The Studio app icon now maintains a consistent size of 70 pixels, matching all other app icons in the interface. Previously, the icon would resize when the browser window was resized, creating an inconsistent user experience. This fix ensures the Studio icon behaves the same way as other application icons.
Original PR description
This commit fixes the size of studio icons when the window is resized. The w-75 class was applied, which caused the element to be resized instead of keeping the desired width of 70px, like other icons do. Now, the icon keep the same dimensions, like any other app icon. task-3998287
This fix corrects how ordered quantities are calculated when creating sales orders from field service tasks. Previously, delivered quantities displayed correctly but ordered quantities were incorrect due to a missing unit conversion. The fix ensures both quantities now display accurately when converting timesheets to sales orders.
Original PR description
### Steps to reproduce the issue: 1. Create a Product with "Service" as Product Type and "Based on Timesheets" as Invoicing Policy 2. Go to _Field Service > Configuration > Projects_ and choose a…
### Steps to reproduce the issue: 1. Create a Product with "Service" as Product Type and "Based on Timesheets" as Invoicing Policy 2. Go to _Field Service > Configuration > Projects_ and choose a Project 3. In the _Invoicing_ section, add a line with an Employee and the Service Product you created 4. Create a Task for the Project 5. Add in the _Timesheets_ section a line with the Employee and a duration of one hour 6. Click on "Mark as done", then "Sales Order" 7. The Delivered Quantities have a correct value but the Ordered Quantities do not ### Explanation: An uom conversion is performed in `_get_delivered_quantity_by_analytic` to compute `qty_delivered` but is missing in `_fsm_create_sale_order_line` for `product_uom_qty`. https://github.com/odoo/odoo/blob/18e03c73691d9efa82cbf82b5e084172fe74665e/addons/sale/models/sale_order_line.py#L386-L392 ### Suggested Fix: To prevent unintended behaviours, any product that is currently used in a Field Service Project will have `invoice_policy`, `service_type` and `detailed_type` locked to match the domain of `timesheet_product_id` for every model using it. opw-3858530 Forward-Port-Of: odoo/enterprise#65855 Forward-Port-Of: odoo/enterprise#63337
This fix resolves a system error that occurred when the MRP Workorder module was uninstalled while the Quality MRP module remained active. The issue happened because a quality check method was trying to use a field that only exists when the Workorder module is installed. By moving the problematic method to the correct module, the system now works properly regardless of which modules are installed.
Original PR description
### Steps to reproduce: - Install mrp_quality and uninstall mrp_workrder - Create products A, B, and C - Product A: Storable, Manufacturing: - BOM: - 1 x product B - Product B: Storable, tracked by…
### Steps to reproduce:
- Install mrp_quality and uninstall mrp_workrder
- Create products A, B, and C
- Product A: Storable, Manufacturing:
- BOM: - 1 x product B
- Product B: Storable, tracked by Lot, Manufacturing route with:
- BOM: - 1 x Product C
- Quality check: Op manufacturing and Control Per Quantity
- Product C: Storable, On hand quantity of 10
- Create MO for product B and complete it with a Lot id
- Create MO for product A > confirm
#### > Traceback error
### Cause of the issue:
The `move_id` field of the `quality.check` model is used in the `_update_lot_from_lot_line` method of that same model. However, the method is defined in the `quality_mrp` module while the `move_id` field is defined in the `mrp_workorder` module.
Since `quality_mrp` depends on `mrp` and since `mrp_workorder` is auto installed when `mrp` is installed, this should not be an issue. However, since `mrp_workorder` is not a strict dependency of the `quality_mrp` module, the later in not uninstalled when `mrp_workorder` is. As such, it is possible to not have a `move_id` field on the `quality.check` model while the filed is used in the call of the `_update_lot_from_lot_line` mdethod defined in `quality_mrp`.
### For the posterity:
The method was introduced by commit 8ab6c56 in saas-16.4 for a fix and was later an later updated by commit 801ff42 for an other fix.
opw-3994004
---The IoT module has been updated to properly handle logs containing international characters (non-ASCII). Previously, receiving logs with special characters would cause system errors. This fix ensures all character types are processed correctly while maintaining compatibility with older IoT devices that may still send standard ASCII characters.
Original PR description
Before this commit, receiving logs with non-ascii characters would cause a traceback. After this commit, non-ascii characters are processed correctly. With the proposed fix, should a client send an ascii-encoded string, it will still be decoded correctly, ensuring backwards compatibility. This means that if the IoT box doesn't get updated and interacts with an updated server, since the UTF-8 table covers the ascii table, it won't lead to any error server-side. OPW-4001252 Forward-Port-Of: odoo/enterprise#65956
This update fixes how fixed taxes are displayed when printing invoices. Previously, the base amount was incorrectly shown after a fixed tax, even though fixed taxes don't use that base amount in their calculation. The system now properly distinguishes between fixed and regular taxes to display the correct information on invoices.
Original PR description
Related to : https://github.com/odoo/odoo/pull/170741 When printing an invoice including a fixed tax, we don't want the base amount to be displayed after said tax, since the fixed computation doesn't take into account said amount.
Added a check to differenciate fixed taxes from other and adapt display accordingly.
This specific PR intends to stop a test in tax_external taking the new field into account.
Since the function modified has been updated in 17.2, another PR will be necessary.
See https://github.com/odoo/odoo/pull/168634
task-3964942
X-original-commit: b4c0aa0b00892b87da0c3bf6815cb0f575c216b2Fixed an issue where products that failed quality checks during manufacturing were not being sent to the designated failure location. Previously, failed products would always go to the default stock location instead. Now when a manufactured product fails a quality check, it correctly routes to the failure location specified in the quality control setup.
Original PR description
**Current behavior:** Setting up a control point for a product by quantity with a failure stock location on manufacturing operations will never allow a manufactured product that fails the quality…
**Current behavior:**
Setting up a control point for a product by quantity with a failure stock location on manufacturing operations will never allow a manufactured product that fails the quality check to end up in the failure location.
**Expected behavior:**
A product created in a manufacturing order can fail a quality check and end up in the designated failure location in WH.
**Steps to reproduce:**
1. Set up a quality point on some storable product on manufacturing operations with:
`Control per: Quantity`
`Type: Pass - Fail`
`Failure Location: Some internal location`
3. Create a new MO with the quality controlled product and confirm it
4. Click the Quality Checks button, fail the check (make sure to select the faiure location here)
5. After the Quality Check, click Produce All -> Observe that the full quantity of products produced by the MO still was moved to whatever the default Stock location is, not the failure location specified.
**Cause of the issue:**
The method `_move_line_to_failure_location()` expects a picking and SML to exist, however when the quality check starts from an MO, we have neither (contrasted with a check starting from a picking). So the method just skips the logic where the re-route would occur.
**Fix:**
Override the method in the mrp_quality bridge module, if the quality check has a production_id then create the SML on the spot via `MrpProduction.action_confirm()`, then go through the same logic to split the created line as necessary based on the failed quantity vs. total quantity of the MO.
opw-3865301This fix corrects how customer and pickup point addresses are sent to Sendcloud for shipping labels. Previously, the pickup point address was being duplicated on labels. Now both the pickup point location and the customer's delivery address are correctly sent to Sendcloud, ensuring labels print accurately with the right information.
Original PR description
Before this commit: When the user chooses a pickup point, the res.partner of the sale order is replaced with data from the pickup point, while the previously set customer's data is set as the partner's parent. And Sendcloud relies on a service_point_id field in its API rather than a raw address. Which causes double printing of the service point address on the label. Moreover, Sendcloud explicitly requires the customer's (and not the pickup point) address in its API. After this commit: Both the service_point_id and the customer's delivery address are sent to Sendcloud. Both addresses are printed on the label correctly. opw-3977565