Friday, May 24, 2024
43 changes · saas-17.1
Resolved issues and error corrections
Point of Sale now avoids an unnecessary pricelist lookup when a scanned barcode belongs to a product that is not available. This prevents possible errors during checkout and keeps cashier workflows smoother.
Original PR description
Prior to this commit, scanning a product barcode for a missing product would trigger a search for the missing pricelist, potentially leading to an error. This commit fixes this issue by preventing the pricelist search when the product is missing. opw-3850050 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Point of Sale now correctly hides the default price list when a default price list is already configured. This restores the expected behavior after a previous refactor and avoids confusing price list information being shown to cashiers.
Original PR description
Default Price on POS would not show on older versions if there was a default pricelist set already on the POS. But would show default price if it was unset. This was not changed in the refactor, so the line that was referenced to see if default pricelist was set was referring to a variable that was no longer being set. Using the current default pricelist that is stored at pos.config.pricelist_id achieves the same functionality as before on this version of the POS. opw-3926123 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
- When a user wants to register on Odoo SMP but they are registered somewhere else, we throw an error that asks them to deregister from another service. Sometimes users might not know where they are registered, so it would be helpful to pass that information about their current registration in the error message as well - Currently, we check whether a partner is valid by calling their SMP url. But it is possible that a participant exists on the Peppol network but cannot receive that specific for
Original PR description
- When a user wants to register on Odoo SMP but they are registered somewhere else, we throw an error that asks them to deregister from another service. Sometimes users might not know where they are registered, so it would be helpful to pass that information about their current registration in the error message as well - Currently, we check whether a partner is valid by calling their SMP url. But it is possible that a participant exists on the Peppol network but cannot receive that specific format that a user has selected for them. A valid participant is one that both exists and can receive the document. task-3870271 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163383
In order for some text in the JavaScript code to be translatable, it must be wrapped in a call to _t. The title of a popup in the "sales management screen" missed this call to _t, preventing it from being translated. This commit fixes the problem by adding the missing call to _t. opw-3908751 Forward-Port-Of: odoo/odoo#165866 Forward-Port-Of: odoo/odoo#165337
Original PR description
In order for some text in the JavaScript code to be translatable, it must be wrapped in a call to _t. The title of a popup in the "sales management screen" missed this call to _t, preventing it from being translated. This commit fixes the problem by adding the missing call to _t. opw-3908751 Forward-Port-Of: odoo/odoo#165866 Forward-Port-Of: odoo/odoo#165337
Issue: - unable to set up different journals on duplicated payment providers. - As a result, customers cannot set up different currencies for the same payment provider in one company database. A very common case with Authorize.Net -> for each currency, a different account needs to be created: USD and CAD.The customers are unable to set up different journals on a payment provider. Steps To Reproduce: - Under one company duplicate a payment acquirer. - Try to set a different journal per eac
Original PR description
Issue: - unable to set up different journals on duplicated payment providers. - As a result, customers cannot set up different currencies for the same payment provider in one company database. A very common case with Authorize.Net -> for each currency, a different account needs to be created: USD and CAD.The customers are unable to set up different journals on a payment provider. Steps To Reproduce: - Under one company duplicate a payment acquirer. - Try to set a different journal per each duplicate. - Notice changing journal on one acquirer changes it on the duplicate. Solution: - WIP Ticket [link](https://www.odoo.com/web#model=project.task&id=3704407) opw-3704407 Forward-Port-Of: odoo/odoo#166352 Forward-Port-Of: odoo/odoo#154351
Issue: ====== The label of link doesn't auto save. Steps to reproduce the issue: ============================= - Go to email marketing - Add text block - Select some text and convert it to link - Change the label of link from the link tools - Click on the top , outside the editable - The label sets back to it's original value Origin of the issue: ==================== `onSelectionChange` is called from the flow of `obeserverApply` which calls `deselectTable` here [1] and it deac
Original PR description
Issue: ====== The label of link doesn't auto save. Steps to reproduce the issue: ============================= - Go to email marketing - Add text block - Select some text and convert it to link -…
Issue: ====== The label of link doesn't auto save. Steps to reproduce the issue: ============================= - Go to email marketing - Add text block - Select some text and convert it to link - Change the label of link from the link tools - Click on the top , outside the editable - The label sets back to it's original value Origin of the issue: ==================== `onSelectionChange` is called from the flow of `obeserverApply` which calls `deselectTable` here [1] and it deactivate the observer which clears `this.observerTimout` so `historyStep` don't get caled. Solution: ========= - We don't unactivate the observer when there are no `td` elements to process. [1]: https://github.com/odoo/odoo/blob/saas-16.3/addons/web_editor/static/src/js/editor/odoo-editor/src/OdooEditor.js#3931 --- Issue: ====== Traceback after discard mass mailing with selection Steps to reproduce the issue: ============================= - Create a new mass mailing - Choose the welcome template - Click outside the editable - Select the first paragraph in the template such that the toolbar appears - discard the record - traceback Origin of the issue: ===================== The flow goes as follows, create a new mass mailing, click outside the editable will trigger commitChanges, now we click again inside the editable, `activeSnippet` is called which will add some item to the list of snippetEditors in `SnippetsMenu`. Now clicking on discard will goes as follows, `onWillUnmount` will be called and we find the record dirty because the commited changes have already been cleared from `record.data` so we have 2 flows going in parallel , one for the commitChanges and one for the destroy which will be called in this order while running, commitChanges -> destroy -> observerUnactive -> observerFlush -> observerApply -> contentChanged -> updateCurrentSnippetEditorOverlay -> cover -> `ownerDocument.defaultView` but the docuemnt doesn't have a window anymore so its value is null thus the traceback. Solutions: ========== We add check on the default view to make sure it's not null before accessing it. task-3857016 Forward-Port-Of: odoo/odoo#166233 Forward-Port-Of: odoo/odoo#161845
Steps to reproduce: ------------------- - create a product: - service - based on timesheet - create on order: project & task - create a sale order with this product - confirm the sale order - go on the created task - add timesheets with an employee - go to timesheet - validate created timesheets - go to the project settings - in invoicing tab, change de sale order item for the employee Issue: ------ The sale order item linked to the validated timesheets are mo
Original PR description
Steps to reproduce:
-------------------
- create a product:
- service
- based on timesheet
- create on order: project & task
- create a sale order with this product
- confirm the sale order
- go on the created task
- add timesheets with an employee
- go to timesheet
- validate created timesheets
- go to the project settings
- in invoicing tab, change de sale order item for the employee
Issue:
------
The sale order item linked to the validated timesheets are modified.
This behaviour causes negative side effects.
A validated timesheet should no longer be modified, but the backend logic does, which is not consistent.
Solution:
---------
Make the condition that filters timesheets to update take account of whether the timesheet is validated or not.
opw-3791062
Forward-Port-Of: odoo/odoo#166162
Forward-Port-Of: odoo/odoo#162558When uploading a file, the activity ID is now sent to the server. This will help (for example) to avoid creating a second document if the file is uploaded in the context of an existing activity. ENT PR: https://github.com/odoo/enterprise/pull/59796 opw-3458850 Forward-Port-Of: odoo/odoo#165286 Forward-Port-Of: odoo/odoo#159943
Original PR description
When uploading a file, the activity ID is now sent to the server. This will help (for example) to avoid creating a second document if the file is uploaded in the context of an existing activity. ENT PR: https://github.com/odoo/enterprise/pull/59796 opw-3458850 Forward-Port-Of: odoo/odoo#165286 Forward-Port-Of: odoo/odoo#159943
Description of the issue/feature this PR addresses: Improve versatility of `_get_cart_qty` method for 'product.product' model. As of now, this method automatically returns zero, for all products that allow ordering when out-of-stock. This bit of logic is only necessary in one place (to generate combination info to display in `website_sale_stock.product_availability` view), making the method effectively useless in other places, like community modules. This commit simplifies the `_get_cart_qty`
Original PR description
Description of the issue/feature this PR addresses: Improve versatility of `_get_cart_qty` method for 'product.product' model. As of now, this method automatically returns zero, for all products that…
Description of the issue/feature this PR addresses: Improve versatility of `_get_cart_qty` method for 'product.product' model. As of now, this method automatically returns zero, for all products that allow ordering when out-of-stock. This bit of logic is only necessary in one place (to generate combination info to display in `website_sale_stock.product_availability` view), making the method effectively useless in other places, like community modules. This commit simplifies the `_get_cart_qty` method logic, to make it more usable, and delegates the removed check only to the `_get_additionnal_combination_info` override. This also allows the method to be used in `_get_cart_and_free_qty`, to avoid needing to override cart quantity acquisition logic in multiple places. Current behavior before PR: The `_get_cart_qty` method, automatically returns zero, for all products, that allow ordering out-of-stock, preventing acquisition of cart quantity using this method, for these products. Desired behavior after PR is merged: Being able to get the current cart quantity for all products, using this method. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#164785
This was currently defined in `crm_enterprise` which made impossible to run QUnit tests dependent on this model in community. runbot-65889 https://github.com/odoo/enterprise/pull/63056 Forward-Port-Of: odoo/odoo#166475
Original PR description
This was currently defined in `crm_enterprise` which made impossible to run QUnit tests dependent on this model in community. runbot-65889 https://github.com/odoo/enterprise/pull/63056 Forward-Port-Of: odoo/odoo#166475
When the user tries to delete the toppings, a traceback appears. Steps to reproduce the error: - Go to Lunch > Configuration > Vendors > Open any vendor - Now add extra 2 (topping 2) > Save - Delete that extra 2 (topping 2) > Save Traceback: ``` IndexError: list index out of range File "odoo/http.py", line 2251, in __call__ response = request._serve_db() File "odoo/http.py", line 1827, in _serve_db return self._transactioning(_serve_ir_http, readonly=ro) File "odoo
Original PR description
When the user tries to delete the toppings, a traceback appears. Steps to reproduce the error: - Go to Lunch > Configuration > Vendors > Open any vendor - Now add extra 2 (topping 2) > Save - Delete…
When the user tries to delete the toppings,
a traceback appears.
Steps to reproduce the error:
- Go to Lunch > Configuration > Vendors > Open any vendor
- Now add extra 2 (topping 2) > Save
- Delete that extra 2 (topping 2) > Save
Traceback:
```
IndexError: list index out of range
File "odoo/http.py", line 2251, in __call__
response = request._serve_db()
File "odoo/http.py", line 1827, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1847, 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 1825, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1832, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2057, 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 739, 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/web/models/models.py", line 71, in web_save
self.write(vals)
File "addons/lunch/models/lunch_supplier.py", line 193, in write
topping_values = topping[2]
```
https://github.com/odoo/odoo/blob/07f6d71e4dd3fac7b4cacc545819430aa48823cd/addons/lunch/models/lunch_supplier.py#L192-L193 Here when the user deletes the extra 2 (topping 2),
"topping" will be [2,2] instead of [2,2,False].
So when it tries to access topping[2],
It will lead to the above traceback.
sentry-5203693767
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#162207**Impacted versions:** - 17.0 - 16.0 **Description of the issue/feature this PR addresses:** The addition of `request._post_init()` in #104573, introduced the possibility that `_request_stack.pop()` is not called after `_request_stack.push(...)` was called before. This would happen in the case if request._post_init() raised an Exception. Even though with the standard `SessionStore` this is extremely unlikely to happen the possibility remains. In any case, one shouldn't set the ex
Original PR description
**Impacted versions:** - 17.0 - 16.0 **Description of the issue/feature this PR addresses:** The addition of `request._post_init()` in #104573, introduced the possibility that `_request_stack.pop()`…
**Impacted versions:** - 17.0 - 16.0 **Description of the issue/feature this PR addresses:** The addition of `request._post_init()` in #104573, introduced the possibility that `_request_stack.pop()` is not called after `_request_stack.push(...)` was called before. This would happen in the case if request._post_init() raised an Exception. Even though with the standard `SessionStore` this is extremely unlikely to happen the possibility remains. In any case, one shouldn't set the expectation that `request._post_init()` isn't allowed to raise, therefore by moving the function call into the try block, it makes sure that `_request_stack.pop()` is called in the finally block. **Current behavior before PR:** If `request._post_init()` raises an Exception, `_request_stack` is left in a polluted state. This can cause issues during RPC-Calls, since during an RPC-Call, the request in `_request_stack` is borrowed with the expectation that `_request_stack` is empty. This can cause issues further down the line for completely separate requests which may break here: https://github.com/odoo/odoo/blob/4b6dea23a04d7b5317a94e75c8a670de82762276/odoo/addons/base/models/ir_qweb.py#L879 It breaks because, `request` will not be `None` (as would be expected due to borrowing) but `session` is not set on the `Request` object since that only happens if `_post_init()` succeeds. This results in the following error for completely unrelated requests going forward: ``` AttributeError: 'Request' object has no attribute 'session' ``` As a side-note, in our environment this happened likely due to using [camptocamp/odoo-cloud-platform/session_redis](https://github.com/camptocamp/odoo-cloud-platform/tree/16.0/session_redis). I did a write-up of the specific issue I ran into myself and reproduction steps here: https://gist.github.com/Jenjen1324/81d3547e5713ba253b67970bc8388147 I'm also not sure if there might be any security implications leaving a *partially* constructed object in this stack. **Desired behavior after PR is merged:** It is no longer possible to have a broken request hanging on in `_request_stack`, be it in stock Odoo or with customizations. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#166524
Fix the section subtotal on the 'report_saleorder_document' to consider the lines displayed on the report ('lines_to_report') instead of all the sale order lines --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#166558
Original PR description
Fix the section subtotal on the 'report_saleorder_document' to consider the lines displayed on the report ('lines_to_report') instead of all the sale order lines
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#166558When company is not passed as parameter, take the company from the environment by consistency with 'retrieve_partner'. Also, search for a product explicitely linked to the company in priority. enterprise PR: https://github.com/odoo/enterprise/pull/61741 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#165631 Forward-Port-Of: odoo/odoo#163938
Original PR description
When company is not passed as parameter, take the company from the environment by consistency with 'retrieve_partner'. Also, search for a product explicitely linked to the company in priority. enterprise PR: https://github.com/odoo/enterprise/pull/61741 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#165631 Forward-Port-Of: odoo/odoo#163938
Steps to reproduce the bug: - Create a storable product “P1” with BoM: - Component: 1 unit of C1 - By-product: 1 unit of C2 - Create a manufacturing order to produce 2 unit of P1 - Confirm the MO - Set the qty producing to 1 unit and mark it as done Problem: The quantity displayed for the byproduct is the quantity to produce (product_uom_qty) instead of the quantity produced (Quantity) https://github.com/odoo/odoo/blob/a94f3f4dcb24e08cd4db7fd50ea704e9a065fd83/addons/mrp/re
Original PR description
Steps to reproduce the bug:
- Create a storable product “P1” with BoM:
- Component: 1 unit of C1
- By-product: 1 unit of C2
- Create a manufacturing order to produce 2 unit of P1
- Confirm the MO
- Set the qty producing to 1 unit and mark it as done
Problem:
The quantity displayed for the byproduct is the quantity to produce (product_uom_qty) instead of the quantity produced (Quantity)
https://github.com/odoo/odoo/blob/a94f3f4dcb24e08cd4db7fd50ea704e9a065fd83/addons/mrp/report/mrp_report_mo_overview.py#L434
opw-3903182
Forward-Port-Of: odoo/odoo#165612Versions -------- - 17.0+ Steps ----- 1. Ensure debug mode is off; 2. go to Employees / Configuration / Employee / Working Schedules; 3. select a schedule and switch it to a 2 week calendar; 4. try to reorder one of the rows. Issue ----- Row resets to original place. Cause ----- Commit a9b804b1ad6c added a `default_order` to the view, its values get passed to the `_sort` function of `StaticList`, which then compares them to the `activeFields` of the loaded model. One of th
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Ensure debug mode is off; 2. go to Employees / Configuration / Employee / Working Schedules; 3. select a schedule and switch it to a 2 week calendar; 4. try…
Versions -------- - 17.0+ Steps ----- 1. Ensure debug mode is off; 2. go to Employees / Configuration / Employee / Working Schedules; 3. select a schedule and switch it to a 2 week calendar; 4. try to reorder one of the rows. Issue ----- Row resets to original place. Cause ----- Commit a9b804b1ad6c added a `default_order` to the view, its values get passed to the `_sort` function of `StaticList`, which then compares them to the `activeFields` of the loaded model. One of the fields given to `default_order` is `week_type`, which isn't included in the `activeFields` of the loaded model unless you're in developer mode. This is a consequence of being assigned to the group `base.group_no_one`. Because of this mismatch, it assumes the model isn't loaded yet, and creates a new one with the `week_type` field in order to sort them, leaving the original records (the ones in view) unchanged. Solution -------- Remove the `groups` attribute from `week_type`, and make it an optional field. Also switch `editable` from `top` to `bottom` to make the line appear right above the `Add a line` line. opw-3773432 Forward-Port-Of: odoo/odoo#165113
If you have "repeat interval" set to "0" in the Maintenance request, and if you go to the Maintenance calendar, then the system crashes. Adding a validationError to avoid the crash. To Reproduce on Runbot: 1. Go to Maintenance Request 2. Make a new request with Maintenance type as Preventive, Recurrent checked, and Repeat Every to 0. 3. Save it 4. Go to Maintenance Calendar 5. The system crashes opw-3859966 Description of the issue/feature this PR addresses: Current behavior bef
Original PR description
If you have "repeat interval" set to "0" in the Maintenance request, and if you go to the Maintenance calendar, then the system crashes. Adding a validationError to avoid the crash. To Reproduce on Runbot: 1. Go to Maintenance Request 2. Make a new request with Maintenance type as Preventive, Recurrent checked, and Repeat Every to 0. 3. Save it 4. Go to Maintenance Calendar 5. The system crashes opw-3859966 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#164091
`action_view_carryover_lines` calls account.report._get_date_bounds_info which is only defined in `account_reports`, and is itself only called from `account_reports`. It wouldn't have worked anyway for anyone who would have tried to call it without account_reports installed. So we take the liberty of moving it to account_reports in stable. See https://github.com/odoo/odoo/pull/155614#discussion_r1609626035 for context Forward-Port-Of: odoo/odoo#166586 Forward-Port-Of: odoo/odoo#166545
Original PR description
`action_view_carryover_lines` calls account.report._get_date_bounds_info which is only defined in `account_reports`, and is itself only called from `account_reports`. It wouldn't have worked anyway for anyone who would have tried to call it without account_reports installed. So we take the liberty of moving it to account_reports in stable. See https://github.com/odoo/odoo/pull/155614#discussion_r1609626035 for context Forward-Port-Of: odoo/odoo#166586 Forward-Port-Of: odoo/odoo#166545
Currently the analytic distribution is applied to the journal items of the invoice but not to the ones of the cash basis entries. This leads to the following problem. The journal items of the invoice (may) contain transfer / transitional accounts. For each payment a crash basis entry is created (on the date of the payment). The cash basis entries "move" the amounts from the transfer accounts to the "real" accounts. Thus currently the analytics are only applied to the transfer accounts and
Original PR description
Currently the analytic distribution is applied to the journal items of the invoice but not to the ones of the cash basis entries. This leads to the following problem. The journal items of the invoice…
Currently the analytic distribution is applied to the journal items of the invoice but not to the ones of the cash basis entries. This leads to the following problem. The journal items of the invoice (may) contain transfer / transitional accounts. For each payment a crash basis entry is created (on the date of the payment). The cash basis entries "move" the amounts from the transfer accounts to the "real" accounts. Thus currently the analytics are only applied to the transfer accounts and not to the "real" accounts. After this commit: Consider the creation of a new cash basis entry for an invoice. The analytic distribution from the journal items of the invoice will now also be applied to the lines of the new cash basis move. A test was replaced. The old test checked that the base lines are duplicated for different analytic distributions. The newer test is more detailled and also covers the old test. task-3340797 Forward-Port-Of: odoo/odoo#166540 Forward-Port-Of: odoo/odoo#155696
Steps to reproduce: - Create an expense - Add a product (with units) - Save - Add an attachement - Change the units Issue: The price unit will change to match the total Cause: We wanted to avoid using the _price_compute in case of the OCR Solution: We are making sure that the price unit is only recomputed when using the OCR enterprise: https://github.com/odoo/enterprise/pull/62425 opw-3869104 Forward-Port-Of: odoo/odoo#165352
Original PR description
Steps to reproduce: - Create an expense - Add a product (with units) - Save - Add an attachement - Change the units Issue: The price unit will change to match the total Cause: We wanted to avoid using the _price_compute in case of the OCR Solution: We are making sure that the price unit is only recomputed when using the OCR enterprise: https://github.com/odoo/enterprise/pull/62425 opw-3869104 Forward-Port-Of: odoo/odoo#165352
- Before this commit The "debug" word in the command palette should display the item to activate the debugging feature. The problem is that the command palette still applies the fuzzy search to this item's name. If the lokked up string does not fuzzily match the letters "debug", the item will not get displayed. - After this commit The debug command name will now always have the `debug` word as a non translated part. opw-3889254 Forward-Port-Of: odoo/odoo#165756 Forward-Port-Of: o
Original PR description
- Before this commit The "debug" word in the command palette should display the item to activate the debugging feature. The problem is that the command palette still applies the fuzzy search to this item's name. If the lokked up string does not fuzzily match the letters "debug", the item will not get displayed. - After this commit The debug command name will now always have the `debug` word as a non translated part. opw-3889254 Forward-Port-Of: odoo/odoo#165756 Forward-Port-Of: odoo/odoo#165224
This test was not working on Debian Bookworm and Ubuntu Noble. This is probably because they use `werkzeug 3.0.1`, which seems to be ordering the routing map differently. Results in the test with current requirements.txt: ``` [ {'loc': '/forum/testforum-18'}, {'loc': '/forum/testforum-18/renameit-37', 'lastmod': FakeDate(2023, 5, 31)} ] ``` Results in the test with werkzeug 3.0.1 and some tweaks to be close to Noble: ``` [ {'loc': '/forum/testforum-17/renameit-35', 'lastmod'
Original PR description
This test was not working on Debian Bookworm and Ubuntu Noble. This is probably because they use `werkzeug 3.0.1`, which seems to be ordering the routing map differently. Results in the test with…
This test was not working on Debian Bookworm and Ubuntu Noble. This is probably because they use `werkzeug 3.0.1`, which seems to be ordering the routing map differently.
Results in the test with current requirements.txt:
```
[
{'loc': '/forum/testforum-18'},
{'loc': '/forum/testforum-18/renameit-37', 'lastmod': FakeDate(2023, 5, 31)}
]
```
Results in the test with werkzeug 3.0.1 and some tweaks to be close to Noble:
```
[
{'loc': '/forum/testforum-17/renameit-35', 'lastmod': FakeDate(2023, 5, 31)},
{'loc': '/forum/testforum-17'}
]
```
You see that the forum post route is added in a different order. The code then simply crash when doing `list(locs)[1]['lastmod']`
Step to reproduce:
- Install/run python3.12
- Tweak a bit the requirements.txt
- Comment the 2 `greenlet` lines
- replace the 2 lxml lines by
```
lxml==4.6.5; python_version < '3.12' # min version = 4.5.0 (Focal - with security backports)
lxml==5.2.1; python_version >= '3.12' # (Noble - removed html clean)
lxml-html-clean; python_version >= '3.12' # (Noble - removed from lxml, unpinned for futur security patches)
```
- replace werkzeug line by `Werkzeug==3.0.1`
- Install a db with `website_forum`
- Run the `test_01_forum_sitemap` test
- It will crash:
```
Traceback (most recent call last):
File "/data/build/odoo/addons/website_forum/tests/test_sitemap.py", line 23, in test_01_forum_sitemap
self.assertEqual(list(locs)[1]['lastmod'].strftime("%Y-%m-%d"), datetime)
~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: 'lastmod'
```
runbot-65289
Forward-Port-Of: odoo/odoo#165988Description of the issue this PR addresses: Previously, if a mouseup event occured outside the editable area, `currentMouseState` remained as mousedown, causing unnecessary calls to `_handleSelectionInTable` and some other functions such as `getDeepRange`, `getDeepestPosition`, `ancestors`, `closestElement`, etc., during mousemove in editable area. This commit makes sure that when a mouseup event happens outside the editable area, `currentMouseState` is updated to mouseup, preventing these un
Original PR description
Description of the issue this PR addresses: Previously, if a mouseup event occured outside the editable area, `currentMouseState` remained as mousedown, causing unnecessary calls to `_handleSelectionInTable` and some other functions such as `getDeepRange`, `getDeepestPosition`, `ancestors`, `closestElement`, etc., during mousemove in editable area. This commit makes sure that when a mouseup event happens outside the editable area, `currentMouseState` is updated to mouseup, preventing these unnecessary calls. Forward-Port-Of: odoo/odoo#166342
This PR aims to decrease a bit the contrast of placeholder textin order to avoid confusion with regular text. Prior to this PR, placeholder texts were using a gray value from the grayscale, which was very similar to the `$body-color` in some context. To fix that issue, the color of the placeholder has been reduced to make it lighter, even though it doesn't meet `3.5:1` contrast ratio. task-3686510 - requires https://github.com/odoo/enterprise/pull/62029 Forward-Port-Of: odoo/odoo#1665
Original PR description
This PR aims to decrease a bit the contrast of placeholder textin order to avoid confusion with regular text. Prior to this PR, placeholder texts were using a gray value from the grayscale, which was very similar to the `$body-color` in some context. To fix that issue, the color of the placeholder has been reduced to make it lighter, even though it doesn't meet `3.5:1` contrast ratio. task-3686510 - requires https://github.com/odoo/enterprise/pull/62029 Forward-Port-Of: odoo/odoo#166581 Forward-Port-Of: odoo/odoo#164510
[FIX] web_editor: fix the translation of invisible elements Steps to reproduce: - Add a second language and enable the "Cookies Bar" in your website settings. - Go to a website page (in translation mode) > Traceback. The implementation from [1] allowed to use text options (text animations & text highlights) in the translation mode by only creating snippet editors if the target is a text option snippet. This code unintentionally prevented editor creation for invisible snippets,
Original PR description
[FIX] web_editor: fix the translation of invisible elements Steps to reproduce: - Add a second language and enable the "Cookies Bar" in your website settings. - Go to a website page (in translation…
[FIX] web_editor: fix the translation of invisible elements Steps to reproduce: - Add a second language and enable the "Cookies Bar" in your website settings. - Go to a website page (in translation mode) > Traceback. The implementation from [1] allowed to use text options (text animations & text highlights) in the translation mode by only creating snippet editors if the target is a text option snippet. This code unintentionally prevented editor creation for invisible snippets, which was required to correctly add entries for every invisible snippet in the sidebar box (see [2] and [3]). The goal of this commit is to fix this behavior by forcing the editor's creation to consider "invisible" elements. A small adaptation of the `_activateSnippet()` method is also required to prevent activating invisible snippets when their related sidebar buttons are clicked. [1]: https://github.com/odoo/odoo/commit/3a149e36f7e6deaf156a7ee35e654aad61cf2e5d [2]: https://github.com/odoo/odoo/commit/e9096a3844459b271cecbcc5e50df4a18c4c3d2a [3]: https://github.com/odoo/odoo/commit/f45a6ea38553566ff35cde3eceb2e4220075205d opw-3941516 (main one) Marked as similar: opw-3936669 opw-3939855 opw-3940168 opw-3940210 opw-3940218 opw-3940224 opw-3940407 opw-3940776 opw-3940845 opw-3940982 opw-3941047 opw-3941333 opw-3941377 opw-3941986 opw-3942480 opw-3944506 opw-3944641 opw-3944862 opw-3944893 opw-3945094 opw-3945589 Forward-Port-Of: odoo/odoo#166380
l10n_br_edi_services defines l10n_br_property_service_code_origin_id on product.template. It's a property field, so to ensure it's read correctly by ir_cron_account_move_send that runs as OdooBot we explicitly set the company for the entire flow. Although not strictly needed in l10n_br_edi, fixing it here is the cleanest and most complete. The *_services modules will be merged into the main ones anyway. task-3887264 Forward-Port-Of: odoo/enterprise#63110
Original PR description
l10n_br_edi_services defines l10n_br_property_service_code_origin_id on product.template. It's a property field, so to ensure it's read correctly by ir_cron_account_move_send that runs as OdooBot we explicitly set the company for the entire flow. Although not strictly needed in l10n_br_edi, fixing it here is the cleanest and most complete. The *_services modules will be merged into the main ones anyway. task-3887264 Forward-Port-Of: odoo/enterprise#63110
The payment acquirer must always be linked to a single journal, one per company. It's currently an hard constraint So after the duplication, both are always linked to the same journal but only one appear on it. This "fix" is improving that allowing the duplication of an existing acquirer and to be able to link them to diffe opw-3704407 Forward-Port-Of: odoo/enterprise#62989 Forward-Port-Of: odoo/enterprise#62744
Original PR description
The payment acquirer must always be linked to a single journal, one per company. It's currently an hard constraint So after the duplication, both are always linked to the same journal but only one appear on it. This "fix" is improving that allowing the duplication of an existing acquirer and to be able to link them to diffe opw-3704407 Forward-Port-Of: odoo/enterprise#62989 Forward-Port-Of: odoo/enterprise#62744
Steps to reproduce: ------------------- - create a product: - service - based on timesheet - create on order: project & task - create a sale order with this product - confirm the sale order - go on the created task - add timesheets with an employee - go to timesheet - validate created timesheets - go to the project settings - in invoicing tab, change de sale order item for the employee Issue: ------ The sale order item linked to the validated timesheets are mo
Original PR description
Steps to reproduce:
-------------------
- create a product:
- service
- based on timesheet
- create on order: project & task
- create a sale order with this product
- confirm the sale order
- go on the created task
- add timesheets with an employee
- go to timesheet
- validate created timesheets
- go to the project settings
- in invoicing tab, change de sale order item for the employee
Issue:
------
The sale order item linked to the validated timesheets are modified.
This behaviour causes negative side effects.
A validated timesheet should no longer be modified, but the backend logic does, which is not consistent.
Solution:
---------
Make the condition that filters timesheets to update take account of whether the timesheet is validated or not.
opw-3791062
Forward-Port-Of: odoo/enterprise#62928
Forward-Port-Of: odoo/enterprise#61122Since the commit https://github.com/odoo/enterprise/pull/52348/commits/5c11c94b972d1993de4147d96fc3faaaaddc7c57 a test has been added that check the cloc result it stored on a ICP. But the result can be a bit different then expected during custom build if custom module are installed prior mail_enterprise. Solution: Check only the value of odoo/studio module that give the custom line in database that should be always empty during installation Forward-Port-Of: odoo/enterprise#63108 Forward-
Original PR description
Since the commit https://github.com/odoo/enterprise/pull/52348/commits/5c11c94b972d1993de4147d96fc3faaaaddc7c57 a test has been added that check the cloc result it stored on a ICP. But the result can be a bit different then expected during custom build if custom module are installed prior mail_enterprise. Solution: Check only the value of odoo/studio module that give the custom line in database that should be always empty during installation Forward-Port-Of: odoo/enterprise#63108 Forward-Port-Of: odoo/enterprise#62909
**Steps to reproduce:** - Install `documents_project` module (for test purposes) - Create a new activity type with: - `action`: `Upload Document` - `folder_id`: `Internal` - `model_id`: `Task` - Go to settings and enable `Centralize files attached to projects and tasks` (from 16.0, set a default folder on the project) - Go to any task and add a new activity with the new activity type - Click on `Upload Document` and select a file **Issue:** Access right error message.
Original PR description
**Steps to reproduce:** - Install `documents_project` module (for test purposes) - Create a new activity type with: - `action`: `Upload Document` - `folder_id`: `Internal` - `model_id`: `Task` - Go…
**Steps to reproduce:** - Install `documents_project` module (for test purposes) - Create a new activity type with: - `action`: `Upload Document` - `folder_id`: `Internal` - `model_id`: `Task` - Go to settings and enable `Centralize files attached to projects and tasks` (from 16.0, set a default folder on the project) - Go to any task and add a new activity with the new activity type - Click on `Upload Document` and select a file **Issue:** Access right error message. **Cause:** Simple explanation: 2 documents are created (one on the activity creation and one on the attachment upload) and the attachment is linked to the second document. When trying to fisrt unlink the second document and then link the attachment to the first document, the attachment is already unlinked. Detailed explanation: When creating the activity, if a folder_id is set on the activity, an empty document is first created with the request_activity_id. https://github.com/odoo/enterprise/blob/a23a18681bddc5995c5dac8cacfb074c06fc5ea8/documents/models/mail_activity.py#L46 When uploading the file, if the related record model is an inherit of `documents.mixin` model and the documents settings (in this case `Document Project Settings`) are activated, it will create the document with the attachment. https://github.com/odoo/enterprise/blob/2df654e8cb08d528976d5f1d24397574798a5cad/documents/models/ir_attachment.py#L63 Then, in the action done, we will unlink the last document record created and try to link it's attachment (already unlinked) to the first document record (with the `request_activity_id`). https://github.com/odoo/enterprise/blob/2df654e8cb08d528976d5f1d24397574798a5cad/documents/models/mail_activity.py#L33 Since the following commit, when unlinking a document, it unlink also it's attachment: https://github.com/odoo/enterprise/commit/a999f2c32ab542ca7aa44cf34970dc7cca4fdaf8 **Solution:** Override the upload route (`/mail/attachment/upload`) so that it skip the creation of the second document (by adding `no_document` to the context) if an activity ID is available and that a document with a `request_activity_id` with the same activity ID already exists. COM PR: https://github.com/odoo/odoo/pull/159943 opw-3458850 Forward-Port-Of: odoo/enterprise#62400 Forward-Port-Of: odoo/enterprise#59796
Steps to reproduce: - Install `stock_barcode` - Create two product "aaa" and "bbb" with both of them being tracked by lots with the same lot number "123" - Open the Inventory app and go to Configuration > Operation Types > Delivery Orders - Enable Product in the Barcode App - Go to the barcode app > Operations > Delivery Orders and click on New - Scan 123 - Scan aaa (or bbb it probably depends on order of creation of product) - Scan 123 Issues: bbb has been added even though we
Original PR description
Steps to reproduce: - Install `stock_barcode` - Create two product "aaa" and "bbb" with both of them being tracked by lots with the same lot number "123" - Open the Inventory app and go to…
Steps to reproduce: - Install `stock_barcode` - Create two product "aaa" and "bbb" with both of them being tracked by lots with the same lot number "123" - Open the Inventory app and go to Configuration > Operation Types > Delivery Orders - Enable Product in the Barcode App - Go to the barcode app > Operations > Delivery Orders and click on New - Scan 123 - Scan aaa (or bbb it probably depends on order of creation of product) - Scan 123 Issues: bbb has been added even though we never scanned it. The reason for this bug is that when we scan 123 we don't have it in the cache as such we make an RPC and store 123 in `missCache`. https://github.com/odoo/enterprise/blob/ed30bde4af5d77261f3a44ba4235fd435153c7ce/stock_barcode/static/src/lazy_barcode_cache.js#L184-L185 After this when we scan aaa we retrieve the record, and add the line as intended. The problem arise when we scan 123, since it's already in our cache. https://github.com/odoo/enterprise/blob/ed30bde4af5d77261f3a44ba4235fd435153c7ce/stock_barcode/static/src/lazy_barcode_cache.js#L130 However that record is not right since this lot is linked to the wrong product bbb. https://github.com/odoo/enterprise/blob/ed30bde4af5d77261f3a44ba4235fd435153c7ce/stock_barcode/static/src/lazy_barcode_cache.js#L135-L138 We will try to retrieve again the right record, however we will once again get a hit on the cache. As such no RPC call will be made to retrieve the lot we're looking for. We will go in the function once again, where we will have the same problem this time in the `if (model)` condition. https://github.com/odoo/enterprise/blob/ed30bde4af5d77261f3a44ba4235fd435153c7ce/stock_barcode/static/src/lazy_barcode_cache.js#L112-L115 Later in the execution we will get to this line where we call the function without a filters which will allow the wrong record to be added. https://github.com/odoo/enterprise/blob/ed30bde4af5d77261f3a44ba4235fd435153c7ce/stock_barcode/static/src/models/barcode_model.js#L943 The root of this problem lies in the way we set the key to the cache, since two product can share the same barcode we need a more precise cache key to differentiate them. The proposed solutions is to cache result based on the provided arguments to the function. This means fewer hit if we retrieve the same record with different filter for example, however it's safer as when we hit we are sure to get the right record. opw-3862263 Forward-Port-Of: odoo/enterprise#61844
This PR fixes two issues with the portal web client of Knowledge: - When a portal user opens an article and clicks on an article of the sidebar, the article id specified in the route url and the session are not updated. The router only updates the url params of the url. When the user loads the page, the client script will load the article specified in the session. As the session is not updated when switching article, the script can load an incorrect article when reloading the page. This PR ai
Original PR description
This PR fixes two issues with the portal web client of Knowledge: - When a portal user opens an article and clicks on an article of the sidebar, the article id specified in the route url and the…
This PR fixes two issues with the portal web client of Knowledge: - When a portal user opens an article and clicks on an article of the sidebar, the article id specified in the route url and the session are not updated. The router only updates the url params of the url. When the user loads the page, the client script will load the article specified in the session. As the session is not updated when switching article, the script can load an incorrect article when reloading the page. This PR aims to fix that issue by ensuring that the client script will load the article with the id specified in the url params of the url. - When a portal user opens an article, clicks on an article of the sidebar and presses the back button, the system updates the url params and set the right id but it doesn't load the corresponding article in the view. This PR aims to fix that issue by ensuring that the web client load the article whenever the url changes. task-3743416 Forward-Port-Of: odoo/enterprise#62861 Forward-Port-Of: odoo/enterprise#60845
This was currently defined in `crm_enterprise` which made impossible to run QUnit tests dependent on this model in community. runbot-65889 https://github.com/odoo/odoo/pull/166475 Forward-Port-Of: odoo/enterprise#63056
Original PR description
This was currently defined in `crm_enterprise` which made impossible to run QUnit tests dependent on this model in community. runbot-65889 https://github.com/odoo/odoo/pull/166475 Forward-Port-Of: odoo/enterprise#63056
Add a setup allowing you to easily create xmls at today date and switch from external to standard mode. That way, in external mode, the XMLs are really send to the SAT in order to ensure their validity. community PR: https://github.com/odoo/odoo/pull/163938 Forward-Port-Of: odoo/enterprise#62561 Forward-Port-Of: odoo/enterprise#61741
Original PR description
Add a setup allowing you to easily create xmls at today date and switch from external to standard mode. That way, in external mode, the XMLs are really send to the SAT in order to ensure their validity. community PR: https://github.com/odoo/odoo/pull/163938 Forward-Port-Of: odoo/enterprise#62561 Forward-Port-Of: odoo/enterprise#61741
Fixed typo for `cdfi` that not generates the section for bank accounts on the PDF for payment complement, and with this fix was improved the way to get the values from the dict, because not in all the cases are assigned all the values. https://github.com/odoo/enterprise/blob/17.0/l10n_mx_edi/models/account_move.py#L392 Forward-Port-Of: odoo/enterprise#62836
Original PR description
Fixed typo for `cdfi` that not generates the section for bank accounts on the PDF for payment complement, and with this fix was improved the way to get the values from the dict, because not in all the cases are assigned all the values. https://github.com/odoo/enterprise/blob/17.0/l10n_mx_edi/models/account_move.py#L392 Forward-Port-Of: odoo/enterprise#62836
`action_view_carryover_lines` calls account.report._get_date_bounds_info which is only defined in `account_reports`, and is itself only called from `account_reports`. It wouldn't have worked anyway for anyone who would have tried to call it without account_reports installed. So we take the liberty of moving it to account_reports in stable. See https://github.com/odoo/odoo/pull/155614#discussion_r1609626035 for context Forward-Port-Of: odoo/enterprise#63114 Forward-Port-Of: odoo/enterpr
Original PR description
`action_view_carryover_lines` calls account.report._get_date_bounds_info which is only defined in `account_reports`, and is itself only called from `account_reports`. It wouldn't have worked anyway for anyone who would have tried to call it without account_reports installed. So we take the liberty of moving it to account_reports in stable. See https://github.com/odoo/odoo/pull/155614#discussion_r1609626035 for context Forward-Port-Of: odoo/enterprise#63114 Forward-Port-Of: odoo/enterprise#63092
To reproduce the issue, on a runbot with the demo data: 1) Setup a prefix group threshold of 2 on the Partner Ledger 2) Open the Partner Ledger ==> The lines created for the prefix groups show "0.0" in the columns supposed to contain non-number values. Instead, these columns should contain empty values on those lines. The bug originates in the common helper called to generate the prefix group lines, so it does not only impact the Partner Ledger. We fix it and modify the test a little bi
Original PR description
To reproduce the issue, on a runbot with the demo data: 1) Setup a prefix group threshold of 2 on the Partner Ledger 2) Open the Partner Ledger ==> The lines created for the prefix groups show "0.0" in the columns supposed to contain non-number values. Instead, these columns should contain empty values on those lines. The bug originates in the common helper called to generate the prefix group lines, so it does not only impact the Partner Ledger. We fix it and modify the test a little bit to check that behavior as well. Forward-Port-Of: odoo/enterprise#63052 Forward-Port-Of: odoo/enterprise#62740
Steps to reproduce: - Create an expense - Add a product (with units) - Save - Add an attachement - Change the units Issue: The price unit will change to match the total Cause: We wanted to avoid using the _price_compute in case of the OCR Solution: We are making sure that the price unit is only recomputed when using the OCR community: https://github.com/odoo/odoo/pull/165352 opw-3869104 Forward-Port-Of: odoo/enterprise#62425
Original PR description
Steps to reproduce: - Create an expense - Add a product (with units) - Save - Add an attachement - Change the units Issue: The price unit will change to match the total Cause: We wanted to avoid using the _price_compute in case of the OCR Solution: We are making sure that the price unit is only recomputed when using the OCR community: https://github.com/odoo/odoo/pull/165352 opw-3869104 Forward-Port-Of: odoo/enterprise#62425
The commit 0c84f2d86b982d1b244622f2d86ca474f0ba496b fixes the fact than users could scan any locations as the source, even if the scanned location is not related to the picking's source location. But for immediate transfer, it is not very wise to limited which location the user can scan because they have no way to set source or destination for picking created on the fly from the Barcode app. This commit fixes this issue. How to reproduce: - Inventory -> Settings -> Enable "Multi-Step Routes
Original PR description
The commit 0c84f2d86b982d1b244622f2d86ca474f0ba496b fixes the fact than users could scan any locations as the source, even if the scanned location is not related to the picking's source location. But…
The commit 0c84f2d86b982d1b244622f2d86ca474f0ba496b fixes the fact than users could scan any locations as the source, even if the scanned location is not related to the picking's source location. But for immediate transfer, it is not very wise to limited which location the user can scan because they have no way to set source or destination for picking created on the fly from the Barcode app. This commit fixes this issue. How to reproduce: - Inventory -> Settings -> Enable "Multi-Step Routes"; - Go to your warehouse and choose 3 steps for incoming and/or outgoing shipments; - Go to the Barcode App > Operations > Internal Transfers > New; - In the newly created transfer, try to scan who is not a sublocation of WH/Stock (WH/input for example, barcode: WH-INPUT) - :arrow_right: An error message is displayed because you are not allowed to scan this location. The exact same issue happens for destination too since 61d378b0a49ba734cff84a39aa2693fe4226225d. Also, fix a minor unrelated bug where locations on the barcode line are not correctly written when there name include the picking's defaut location's name (eg.: WH/Stock 2 when the default location is WH/Stock.) [OPW-3843358](https://www.odoo.com/web#id=3843358&cids=1&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#62733 Forward-Port-Of: odoo/enterprise#62480
0 lines are still included in exported report when Hide lines at 0 is toggled Steps to reproduce: - Open a report, e.g. Balance Sheet (Accounting > Reporting > Balance Sheet) - In options, toggle 'Hide lines at 0' - Click in PDF to export a PDF version of the report - 0 lines are included in the PDF file When "Hide lines at 0" is toggled, lines at 0 are still included in the PDF/XLSX report, despite being hidden in the report view. This leads to a difference between what the user sees
Original PR description
0 lines are still included in exported report when Hide lines at 0 is toggled Steps to reproduce: - Open a report, e.g. Balance Sheet (Accounting > Reporting > Balance Sheet) - In options, toggle 'Hide lines at 0' - Click in PDF to export a PDF version of the report - 0 lines are included in the PDF file When "Hide lines at 0" is toggled, lines at 0 are still included in the PDF/XLSX report, despite being hidden in the report view. This leads to a difference between what the user sees and what is printed. Another reason to hide lines at 0 from the printed report is that lines with Hide if Zero checked does impact the PDF. This means the two options (Hide lines at 0 and Hide if Zero) have similar impacts in the user view but different behavior in printed reports. This commit implements the function _filter_out_0_lines to remove lines at 0 from printed report if "Hide lines at 0" is toggled, and adds a test. task-3888290 Forward-Port-Of: odoo/enterprise#63000
In certain scenarios, the `_compute_l10n_mx_edi_idccp()` method does not assign a value to its related field. This omission results in a traceback because non-stored computed fields must be assigned a value by the end of their compute method's execution. opw-3923109 Forward-Port-Of: odoo/enterprise#62533
Original PR description
In certain scenarios, the `_compute_l10n_mx_edi_idccp()` method does not assign a value to its related field. This omission results in a traceback because non-stored computed fields must be assigned a value by the end of their compute method's execution. opw-3923109 Forward-Port-Of: odoo/enterprise#62533
Steps to reproduce: - go to planning app - choose a month for a user without any planned or open shifts - publish - go to frontend via the email link - error raised Source: - many attributes like default_start are not present in planning_get reponse, trying to accessing default_start = undefined and converting it to a valid date that can be used to display the calendar raises an error. Solution: - when no_data = True, start function in fullcalendar should not compute anything as the
Original PR description
Steps to reproduce: - go to planning app - choose a month for a user without any planned or open shifts - publish - go to frontend via the email link - error raised Source: - many attributes like default_start are not present in planning_get reponse, trying to accessing default_start = undefined and converting it to a valid date that can be used to display the calendar raises an error. Solution: - when no_data = True, start function in fullcalendar should not compute anything as there are no data to display. task-3906551 task-3186609 Forward-Port-Of: odoo/enterprise#61866
This PR aims to decrease a bit the contrast of placeholder textin order to avoid confusion with regular text. Prior to this PR, placeholder texts were using a gray value from the grayscale, which was very similar to the `$body-color` in some context. To fix that issue, the color of the placeholder has been reduced to make it lighter, even though it doesn't meet `3.5:1` contrast ratio. task-3686510 - requires https://github.com/odoo/odoo/pull/164510 Forward-Port-Of: odoo/enterprise#631
Original PR description
This PR aims to decrease a bit the contrast of placeholder textin order to avoid confusion with regular text. Prior to this PR, placeholder texts were using a gray value from the grayscale, which was very similar to the `$body-color` in some context. To fix that issue, the color of the placeholder has been reduced to make it lighter, even though it doesn't meet `3.5:1` contrast ratio. task-3686510 - requires https://github.com/odoo/odoo/pull/164510 Forward-Port-Of: odoo/enterprise#63111 Forward-Port-Of: odoo/enterprise#62029