Current behaviour before commit:
In v16.0 and above clear format button was missing from
snippet toolbar.
Desired behaviour after commit:
Now clear format button is getting appeared in snippet
toolbar.
task-3638147
closesodoo/odoo#150620
X-original-commit: 701bbe40554ea9b6867171a755124fe5b635988b
Signed-off-by: Antoine Guenet (age) <age@odoo.com>
Issue:
Main attachments on expense sheets was never correctly set, leading
to missing attachment previous in the hr.expense.sheet form view,
and unnecessary RPC requests to `register_main_attachment`, because
the attachment was never set.
Steps to reproduce:
- Install Expenses
- Create 2 different expenses with different attachments
- Create a report from those 2 expenses, save it
- Notice there is nothing in the preview for the attachments, but if
you zoom in or zoom out the page, then you can see it. Also
swiping on the list of attachments isn't persistent, once you
refresh the page, the main attachment we selected lastly is lost.
Cause:
There are 2 main issues:
- `hr.expense.sheet` has `message_main_attachment_id`, but it's
never set.
- When writing an attachment via `register_main_attachment`, we
pass only the id of the attachment. Then in the backend, the
related record is based on the model of the attachment, but the
attachment is linked to `hr.expense`, not `hr.expense.sheet`.
Therefor we re-write the same attachment on the record we read the
attachment from. And then the frontend will continue to call
`register_main_attachment` everytime it tries to find the
attachments linked to the sheet, but it's never done.
Fix:
- Add a compute to initially set the value of the
`message_main_attachment_id` based on the spec "we take the first
line that has a main attachment (attachment if no main attachment)
and we set it on the sheet"
- The `hr.expense.sheet` now maintains a copies of the attachments
linked to it's expenses, for proper ACL and functionality of
`register_main_attachment`.
Affected versions:
16.0 up to master = saas-17.1
Reference:
task-3572440
closesodoo/odoo#150501
X-original-commit: 2e02a05838ab62e48c65ba90980bd9e21b677019
Signed-off-by: Cedric Snauwaert <csn@odoo.com>
Signed-off-by: Piryns Victor (pivi) <pivi@odoo.com>
Versions
--------
- 17.0+
Steps
-----
1. Go to Employees app as admin;
2. clear the "Working Hours" field & save;
3. go to Time Off app.
Issue
-----
Odoo Server Error.
Cause
-----
Commit 8f87e102a9 added the
`_get_consumed_leaves` method to `hr.employee`, which calls on
`resource.calendar` methods with `ensure_one()` active. The
`resource_calendar_id` is not a required field for employees, so an
error occurs when these methods are called on an empty record.
Solution
--------
Default to `company_id.resource_calendar_id` where a calendar is
expected.
Also fixes a potential issue in `hr_contract` when getting attendances
between a time interval that includes multiple contracts using different
calendars.
opw-3665412
closesodoo/odoo#149908
Signed-off-by: Bertrand Dossogne (bedo) <bedo@odoo.com>
Before this commit, if the user tried to settle a sale order
in PoS restaurant, then went back to floor and then returned
to the table, the sale order reference will disappear.
The problem is that the `sale_order_origin_id` is not loaded.
opw-3550351
closesodoo/odoo#149262
X-original-commit: 13db10c1c73418ce4eabc52ef2415a1f27f1e24e
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
Signed-off-by: Pedram Bi Ria (pebr) <pebr@odoo.com>
Instead of changing the type of lists to make an ormcache that works,
we'v extracted the function that call the server apps.odoo.com to pass
it the payload in json (as it will be sent to the server), and use the
payload value as ormcache
closesodoo/odoo#149015
Signed-off-by: Pierre Masereel (pim) <pim@odoo.com>
Issue:
For the Chilean localisation of POS, all orders generates the pdf of the invoices,
sadly this is a slow process (generating the pdf for 1 invoice takes around 4-5secs)
Cause:
A wkhtmltopdf bottleneck, since odoo/odoo@19916059c5
we "Send and Print" the newly created invoices, which generates the pdf.
Some localizations have this as a requirement, but Chili apparently is not one of them.
Fix:
There are 2 types of invoices (boleta/factura), but the POS button "to_invoice" at order
checkout was used as a toggle between the types of invoices,
instead of a choice to invoice or not. And since the generation of the invoice is strongly coupled
with the generation of the pdf, I've added a context key to skip the pdf generation during POS checkout.
The user can still "Send & Print" the invoice from the backend.
The key is present when we *don't* select the invoice option at checkout (so for boleta invoices),
for factura the invoice's pdf is created in sync.
Affected versions:
17.0 up to master
Reference:
opw-3610333
closesodoo/odoo#148159
Related: odoo/enterprise#53655
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
Prior to this commit, there was no `title` attributes in the accordions
of the filters.
They are also added in the `website_event.pot` file
task-3626957
closesodoo/odoo#145064
Signed-off-by: Jérémy Hennecart (jeh) <jeh@odoo.com>
Prior to this commit, the design of all the `off-canvas filters` was wrong.
It was `list-group` with a `dropdown-item` class on the elements inside.
Also there was a wrong `border-top` class on the `accordion button`,
causing display issues on `hover.
`Aria-control` was also missing from the `categories filters`.
Checkboxes and radio buttons are also added to increases the usability.
task-3626957
Part-of: odoo/odoo#145064
Prior to this commit, the position of the `<li>` and `t-foreach` was not
correct.
They needed to be swapped, because we had single `<li>` with multiples
`<a>` inside, instead of multiples `<li>` with a single `<a>`.
task-3626957
Part-of: odoo/odoo#145064
Prior to this commit, the `countries` filter was not appearing in the
off-canvas filters on mobile.
The `date` filter was also appearing all the time in the off-canvas, even
when it was not supposed to.
task-3626957
Part-of: odoo/odoo#145064
Prior to this commit, the `countries dropdown` filter was still a `li`
on desktop.
The spacing between the `dropdowns` was also wrong.
The `countries filter` was showing after the `searchbar`, so the template
position is modified.
`is_active` value is set to ease classes conditions on the dropdowns links.
task-3626957
Part-of: odoo/odoo#145064
After https://github.com/odoo/odoo/pull/109736, we started rendering all day
events in the all day slot. However, some calendar views don't have an all day
slot, so these events weren't being shown. Therefore, this commit adds an all
day slot to the hr_holidays module to show multiple day events. Therefore, we
add a new last_several_days computed field in hr leave.
task-3566710
closesodoo/odoo#150980
X-original-commit: cdd8b2fb6b5b3c6a7b1d163368eef791d3d14b3a
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Before this PR, a race condition could occur when restarting the
chatbot: if the rpc returned before the restart message reception
on the bus, the chat would not restart. This was due to the message
being inserted twice. Since the id is used as an unique `t-key` in
the thread template, any duplicate would lead to an error.
This PR fixes the issue by checking that the message is not already
present before adding it to the thread messages.
Steps to reproduce the issue:
- Go to the contact us page
- Start a chat with the bot and proceed until the end
- Put your network in slow 3g mode
- Click on the restart button
- The chatbot is not restarting as expected
closesodoo/odoo#150975
X-original-commit: 6c535bb71edc40aaf3fa75bab702fb9be4a24779
Signed-off-by: Matthieu Stockbauer (tsm) <tsm@odoo.com>
Steps to Reproduce:
- Activate packaging
- Create a storable product update on hand qty 1 package: "PACK6"
- Create a sale order with the product qty 1
- Confirm the order, picking will have a package already assigned
- Edit the sale order and set the product quantity to 0
Bug:
a new move will be created with negtaive quantity and merged with original
(correct behaviour)
but when the picking is confirmed an extra move will be created due to the
picking still having a package level set
Fix:
unlink the package level when its last linked SML is unlinked
opw-3597188
closesodoo/odoo#150939
X-original-commit: 4983923973bacbff84d67cdd442d4b6985f33577
Signed-off-by: William Henrotin (whe) <whe@odoo.com>
Signed-off-by: Walid Hanniche (waha) <waha@odoo.com>
Steps to reproduce:
- open project updates of any project by clicking three dots
- add some update of project
- switch to mobile view
Issues:
- in kanban cards of project update, no spaces between progress bar and date
Solution:
- add some space between progress bar and date to have better experience
Task:3633405
closesodoo/odoo#145774
Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
If the user selects a branch and deactivates the parent company, he
will not be able to create any LC.
Explanations: Since the company field is a related one that targets
the company of the journal, and since the journal belongs to the parent
company, the LC created in the branch actually belongs to the parent
company, which triggers an access error.
Asking users to create branch-specific journals would just cancel
all the benefits of the company branch feature.
OPW-3651022
closesodoo/odoo#150972
X-original-commit: 915b2e2b8401db937db4162e32e84cf968728072
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
Signed-off-by: Adrien Widart (awt) <awt@odoo.com>
For the indian case, when facing two percent price-included taxes having the same percentage,
both need to produce the same tax amounts.
task_id: 3410529
closesodoo/odoo#150971
X-original-commit: 235347db954495b8c0a1bf3bfd0cd408aec7ef0f
Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <jbw@odoo.com>
Signed-off-by: Laurent Smet (las) <las@odoo.com>
Steps to reproduce:
- Create the following subkits boms
F-> SK1 -> A
-> B
SK2 -> C
-> D
- Set all these products to be available in pos and have AVCO automated
valuation with A,B,C and D having a cost of 5$
- Sell F in pos creaing an invoice
- In accounting check the expense account (cost of goods) wrong cost
Bug:
´comp[1]['product']´ referrs to the kit product of the last children boms
(SK1 and SK2 in this case) which would then each be counted twice
instead use ´comp[0].product_id´ (the components of the child boms)
also fixed total_cost computation for pos lines which would filter out
all the subkits moves
opw-3538285
closesodoo/odoo#150937
X-original-commit: d6a513355ee0ae4b02e38baacdde760cc35fb873
Signed-off-by: William Henrotin (whe) <whe@odoo.com>
Signed-off-by: Walid Hanniche (waha) <waha@odoo.com>
Steps to reproduce:
- install timesheets module
- install all related timesheets bridge modules
- open timesheets module
- click on configuration
- click on settings
- under the timeoff, create a new project and click on create and edit
Issue:
- the current company is not set by default on the newly created record
Cause:
- the project id did not have any default company id attribute
Solution:
- if we gave a default attribute to the project id field then the issue
will be solved
task-3607053
closesodoo/odoo#150675
X-original-commit: 61a6ad35280dcca0e03dc0ca7ad3923ae1a12027
Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
How to reproduce:
- Create a new quotation.
- Add a product 'Event Booth'.
- Select an Event, and select any available booth category.
- From the available booths, select some of them.
- Click 'Ok' and manually save the quotation.
- Now, edit the same SO line, and select 'Event Booth' again(similar or different).
- Confirm the SO.
Before this commit:
Users can now see the incorrect total event booth count as 'Booths' on the
stat-button.
Issue:
While editing the booths in the configurator, the new selection does not get
updated in the 'event_booth_registration' table.
After this commit:
The records in the 'event_booth_registration' table are updated with the user
selection of event booths. Users can now see the correct event booth count in
the stat-button.
Task-3309218
closesodoo/odoo#150974
X-original-commit: 1b077436fcb09d9a8cbf3d81e9978b696900924e
Signed-off-by: Warnon Aurélien (awa) <awa@odoo.com>
issue:
- calendar mobile view (month) > pressing on a day or timeframe to create a task doesn't work
if the view does not have the "day" calendar scale set up
Fix:
- We are removing the condition preventing the renderer to use the createRecord callback when
the view is Mobile and in monthly scale
So now a record will be directly created when a user clicks on a timeframe in monthly view even
if he's in mobile view
Task-3677216
closesodoo/odoo#150624
X-original-commit: da23aa3d68e0f8b833d085c09bcf81d8aa2a4285
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Since [1] `model.clear_cache` is no longer recommended.
Most models were changed besides the function responsible
for regenerating asset bundles. This leads to a deprecation warning
when pressing the button in the debug menu in 16.4+
1: #119813
opw-3694331
closesodoo/odoo#150948
X-original-commit: ef0db39416c678a3a3e53ddb97971f87e912f44c
Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
Signed-off-by: Andrew Gavgavian (andg) <andg@odoo.com>
When a 'scheduled_date' is given to posting API notifications are delayed.
They are send using a cron running on a schedule model. However SMS are
not respecting this parameter. This is now fixed.
We also use sql.now() instead of datetime.now() when checking notification
delay. This leads to values that are consistent through the transaction
and avoid non deterministic behavior.
This leads to fixing a global mock of "cr.now" that has unexpected side
effects in composer tests. Indeed now that the scheduled notification checks
cursor now instead of datetime now this global mock leads to some notification
not being sent. We now mock cr.now() only for creating records, allowing
to effectively test templates using create_date for dynamic scheduled date
computation.
closesodoo/odoo#150911
Related: odoo/enterprise#55052
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Since 1be6866b15, when VAT can't be
edited, the country_id select field is disabled.
Disabled fields aren't submitted in the POST query, which causes an
error `Some required fields are empty`, with the Country field being
highlighted even if a value is selected.
With this commit, when the user cannot edit their country, the value is
forced into the POST data so that it is found.
closesodoo/odoo#150909
Signed-off-by: Paul Morelle (pmo) <pmo@odoo.com>
Before this commit, the cropper tool was opened by a closure that spawned the Cropper
tool aside from the editable document.
This was anoying as the editable document can be in an iframe, hence the Cropper would have
been virtually unusable.
This commit factorizes the code in a method to allow overrides. Which is done in
web_studio:ReportEditorWysiwyg.
opw-3484065
closesodoo/odoo#150904
Related: odoo/enterprise#55049
Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
To load images in an iframe, the web_editor code expected the iframe to have an src
attribute and built an URL for the image on the basis of that url.
With the srcdoc attribute, there is no need for an src, making the code crash.
After this commit, if an iframe only has srcdoc, we build images' url on the basis of
the main window.
opw-3484065
Part-of: odoo/odoo#150904
Before this commit, the image processing code always added a listener on the load event
of an image before opening the Cropper tool.
If the image was already loaded, the promise did not resolve at all.
After this commit, an image can be already loaded without any Promise not to be resolved.
Part-of: odoo/odoo#150904
Before this commit, the Picking Operation report's texts were small and the layout
was somewhat odd.
This was because of [1]:
- an oe_structure div was added in a bootstrap row that was already filled (all bootstrap cols were used)
This did not play nice in wkhtmltopdf and made the texts size very small.
- a scalar t-field add a default content which was rendered if the field's value was False
(which can happen when the field is unset)
opw-3668900
[1]:567b8d676b3b6dc747df4d9bf10e7a91b4cb61bb
closesodoo/odoo#150905
X-original-commit: 2a511bc5cd105e2e59d797886efa192bb821f6aa
Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
The change introduced in 72f7c0d7d16a1b avoids recomputes
when there is nothing that needs to be written on a pos.config.
However, starting v17 the way x2many are managed changed and
while the command to assign values on x2many from settings was
[(6, 0, ids)], in v17 it's [[4,id],...,[4,id]]. The set command
was replaced by the link command. This changes the returned value
of the convert_to_cache method and made it impossible to change
pos_config.x2many values in v17 because of the changes in 72f7c0d7d16a1b.
To fix that, move the _keep_new_vals method from res_config_settings
to pos_config and use _preprocess_x2many_vals_from_settings_view
to change link commands to unlink + link commands.
Steps to reproduce:
- Install point_of_sale
- Go to Settings > Point of Sale
- Remove a payment method
- Save
- The payment method is still set on the pos.config.
opw-3692150
closesodoo/odoo#150900
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
In portal chatter, user could be authenticated with `access_token` or `hash and
pid`. The problem is that `portal_avatar()` only checks the access_token, so if
it doesn't have the access token but the hash and pid, it misses the user's
avatar (PR #141414).
This commit adds these two parameters to `portal_avatar` controller to cover all
cases of authentication in portal chatter messages.
closesodoo/odoo#150878
X-original-commit: ab932abc3b3fd814b21282dd863fe44bfb177eb8
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
- Improved the UX of the product configurator.
- Display of attribute name in orderline name.
Previously, the user had to click on the checkbox or radio to select
the option, clicking on the label didn't work.
The attribute name was not displayed in the orderline name, only the
values.
Now the input has been replaced by a button, making it easier to use
on touch-screen devices.
The attribute name is displayed in the orderline name in the format
`Size: M, Fabric: Leather`.
closesodoo/odoo#147744
Taskids: 3638192 & 3633555
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
This commit simply changes the title of the skills resume wizard for
clarity.
task-3660000
closesodoo/odoo#146294
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Before this commit:
Sometimes applying bulletlist does not produce the expected bullet list
formatting .This issue arises when the selection is on an emptyTextNode(""), and
the traversal of nodes using getTraverseNodes results in the same
emptyTextNode(""). In the toggleList function, we typically remove the
emptyTextNode(""), leaving no appropriate node for creating a bullet list.
After this commit:
Now it will create bullet list because we move the selection to its parent when
it is on an emptyTextNode(""), similar to what we have done with the "BR" element.
task-3547574
closesodoo/odoo#150854
X-original-commit: d5380742b05c64ced7eee92fcf520f208e33819e
Signed-off-by: Geelen Sébastien (sge) <sge@odoo.com>
We give preference to the bom in the stock moves for the sale order lines
If there are changes in BOMs between the stock moves creation and the
invoice validation a wrong price will be taken
closesodoo/odoo#150506
X-original-commit: 855727eccb4ba9a2af72350b6ab9cc40ba7e50d9
Signed-off-by: William Henrotin (whe) <whe@odoo.com>
After
https://github.com/odoo/odoo/commit/54a6f1688fb8d15b662848b03cecbe8236292d07,
the `TestConfigureShops.test_should_not_affect_other_pos_config` and
`TestConfigureShops.test_is_header_or_footer_to_false` started to fail randomly
in runbot. This is because when res.config.settings form initializes, it may
start with `pos_config_id` that contains pricelists that are not compatible to
the currency of the pos_config that will be selected in the form.
This commit makes sure that when the `pos_config_id` is changed to something
that doesn't use pricelist, the `pos_available_pricelist_ids` field is updated
accordingly.
Runbot Errors: 31294, 31293
closesodoo/odoo#150454
X-original-commit: f271b0e373b29b7d708c4fab454318776e1bee91
Signed-off-by: Vlad Stroia (vlst) <vlst@odoo.com>
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
Before this commit, when no conversation was selected in the
Discuss app, folding a category such as "Channels" results in
a crash.
This happens because `store.discuss.thread` is `undefined`, so it
must be properly guarded in the template of discuss sidebar category.
closesodoo/odoo#150828
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
__Current behavior before commit:__
If `child` is not an `Element` (like a Text or a Comment node), the call
to `querySelectorAll` at the following line will crash.
__Description of the fix:__
End the current loop iteration if `child` is not an `Element` to avoid
calling `querySelectorAll` on it.
__Steps to reproduce the issue on runbot:__
In 15.0:
- Open Email Marketing > Mailings > Create > Second template
- Drag and drop a `Comparisons` block
- Display source code
- Write some text under the `<div class="card ...">`
- Save --> Traceback
In 16.0+:
- Open Email Marketing > Mailings > New > `Start From Scratch`
- Drag and drop an `Event` block
- Replace one of the image (a comment node will be added [here][1])
- Save --> Traceback
opw-3682469
opw-3689181
[1]: https://github.com/odoo/odoo/blob/df1b43a6de5ad15a8fee3713de7d8ec926c61f12/addons/web_editor/static/src/js/backend/convert_inline.js#L715closesodoo/odoo#150752
X-original-commit: 3d1c95d9d143df35320e97abf898f673f4bb1a68
Signed-off-by: Antoine Guenet (age) <age@odoo.com>
Signed-off-by: Julien Launois (jula) <jula@odoo.com>
Steps to reproduce:
- Setup easypost delivery
- Create a service product and publish it on the website
- Add that product alone to the cart and proceed to payment
Bug:
Error raised because total weight of the order is null
Fix:
no delivery will be created so we should skip the check if no deliverable
product is present on the order
note: on "_get_shop_payment_errors" switched the order to short circuit
"_get_delivery_methods"
opw-3647420
closesodoo/odoo#150735
X-original-commit: 3108339921dd7af65daacf60dc0104713116557b
Signed-off-by: Walid Hanniche (waha) <waha@odoo.com>
Problem:
In some places I think it is necessary to use sudo to avoid permission
errors when creating actions or something else from a other model.
For example, I have a picking created from PO attached to MO. When
receiving inventory in a smaller quantity than actual quantity, will
create activity schedule on MO. But if you don't have the rights, you
will get an error
closesodoo/odoo#150697
X-original-commit: ac1862ddc2dec0269a156d5470b940a7d85cc078
Signed-off-by: William Henrotin (whe) <whe@odoo.com>
In https://github.com/odoo/odoo/pull/105119, new accounts were added
to represent employee-related expenses. Based on the non-official
document https://swissdec.ch/document/share/295/4cc46aca-8b47-49e9-882a-03c37eb8dea3
we used account codes 2990 and 2999 for accounts 'Indemnities' and
'Company Car Correction'.
However, these accounts have no place with the equity accounts in 29xx,
since they are not equity but rather expense accounts. Examples of CoAs
that include employee indemnity accounts place them under account group
5 with the other employee-related expenses.
(e.g. https://plancompta.com/plan-comptable-suisse-pcg-2021/)
As such, we move accounts 2990 Indemnities -> 5840
and 2999 Company Car Correction -> 5031.
Fixing this in stable will not cause any in-database corruption, since
the updated code is only executed when the CoA is loaded/reloaded.
However, users will need to reload the CoA in order to take advantage
of the fix.
This also ensures that the Swiss Balance Sheet is balanced.
taskid:3060790
closesodoo/odoo#150692
Related: odoo/enterprise#54941
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Bug
===
The decimal property crash when added in a list view, if some records
have False as a value.
Technical
=========
Since fe797a03285ec9c81d29ed631839c91e2b9957a4 , we use the wrong
Formatter in the Float field.
Task-3698415
closesodoo/odoo#150682
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Install mass_mailing with demo data, send a mailing using the "Thank
you for joining us" template. Inside your mail client, click on the
LOGIN button, this open your web browser on a link-tracker URL but the
page fails to load because "The page isn't redirecting properly".
Inside the template of that "Thank you for joining us" mail, the logging
button is basically defined as follow: `<a href="#">LOGIN</a>`, a URL
with a fragment that is empty, a redirection to the current page.
Upon rendering that template and send it to the recipients, all links
are wrapped inside a link-tracker for well tracking purpose, this
created a link `/r/xyz` targeting `#`. Upon accessing that `/r/xyz` URL
the client would be redirected to `#` which in that context is actually
`/r/xyz#`: the link-tracker itself. The browser detects that there is a
redirecting loop and show an error instead.
The problem is solved by saving an absolute link with the link-tracker
instead of a relative one.
Task-3603607
closesodoo/odoo#150678
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Signed-off-by: Julien Castiaux (juc) <juc@odoo.com>
It was technically possible to register a link that would loop on itself
by abusing the query and fragment parts of the URL. It was possible to
register a link targetting `#` and get the following HTTP exchange which
enter an infinite loop.
GET /r/bAd HTTP/1.0
HTTP/1.0 301 Redirect
Location: #
GET /r/bAd# HTTP/1.0
Prevent such links from being registered and highlight flaws inside the
`validate_url` method with unittests.
Part-of: odoo/odoo#150678