`update_list` is an expensive operation and could be avoided when no modules are
updated. Particually, it speeds up initial theme installation on website, which
has following code:
```
themes.filtered(lambda m: m.state == 'installed').button_upgrade()
```
Benchmark for Odoo 15: `/website/configurator_apply` spends 1.3 sec for unneeded
`update_list` call.
closesodoo/odoo#75140
X-original-commit: 82ba4994e54fc46cc55a463629727e840349bb6e
Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Signed-off-by: Ivan Yelizariev // IEL <yelizariev@users.noreply.github.com>
Backport of 14.0 PR odoo/odoo#73082 with some slight changes.
Backport of master PR odoo/odoo#62083.
Improve stock.picking._compute_state by computing pickings new state conditions
beforehand. This avoids looping through picking.move_lines for each
condition for each picking.
opw-2613931
closesodoo/odoo#75125
X-original-commit: dca7119f6fe4f9e66c3ecc58f204420e2ad805cd
Signed-off-by: Rémy Voet <ryv-odoo@users.noreply.github.com>
Signed-off-by: William Henrotin <Whenrow@users.noreply.github.com>
On BoM, a component line can be filter out depending
of the product variant to manufacture
(with "Apply on Variant" field).
Extend this feature to operation and byproduct line.
task-2614126
closesodoo/odoo#74973
Signed-off-by: William Henrotin <Whenrow@users.noreply.github.com>
Add reference of the traceability report's origin (production.lot,
manufacturing order, picking, ...) to the end of the
report.
Change the layout a bit so the data isn't squashed by
the border.
Task-2467686
closesodoo/odoo#74120
Signed-off-by: William Henrotin <Whenrow@users.noreply.github.com>
when we have wh1 resupply form wh2, two transfers will be created. One
delivery from wh2 to transit location, one receipt from transit location
to wh1. Both transders don't have receive from/deviver to. In this
commit, we set the corresponding warehouse address as receive
from/deliver to.
Task 2334764
When do a manual replenishment, we set the responsible persion of the
product to be the partner of the procurement group. Then this parnter_id
is propagated to stock.move and then stock.picking. So the responsible
person will be shown on the picking form as contact person.
To fix, remove it when creating procuremnet group.
Task-2334764
PR #67776
The fields dict maps field names to their description. Before this
commit, the field name wasn't specified in the description, meaning
that we could never manipulate the field description without its
key, which would often be convenient.
closesodoo/odoo#75121
Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Some templates contain empty <li> elements for styling purposes
only and should be blacklisted in the context of Odoo editor hints
as these elements are not editable.
task-2550858
closesodoo/odoo#74944
Signed-off-by: Antoine Guenet <Zinston@users.noreply.github.com>
If the active element is an Odoo field (ie. a field with the
`data-oe-model` attribute) it means the content should not be
considered html, unless its type is specifically `html`.
If the Odoo field is of the `html` type, the Powerbox should only
be triggered if the active element is _within_ that field rather
than _being_ the field itself.
task-2550858
Fine tuning of 02d9b51e43904420afe31e1f65ea455e3ed2c8ea
Steps:
- Install l10n_fr_pos_cert
- Open POS session with French company
- Add product
- Hit backspace: set new quantity to 0
- Hit backspace again
Error will be shown. This occur because `event.detail.buffer` might be null
closesodoo/odoo#74852
X-original-commit: ba5acd2822784a3ac5e517574ba76f5b350337af
Signed-off-by: agr-odoo <agr-odoo@users.noreply.github.com>
Bug
===
1. Login as "Portal"
2. Go to "/my/opportunity"
3. Create an opportunity
4. Edit this opportunity from the frontend and set the probability empty
=> Save, an error is raised
Technical
=========
The probability is set to "None" and not to "False", therefor the
verification "probability >= 100" in the write method of the lead will
raise an error.
By using False instead of None, this verification will work.
Task-2613208
closesodoo/odoo#75100
X-original-commit: e58048350b670b88c31c88cc57cdf6cc38b22f80
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
In the xml file of the list view, it is possible to define a button that
will be placed in a new column. When the user clicks on a button from a
list view, the script will execute the action linked to the corresponding
button. Unfortunately, all the buttons of the list views are not necessary
linked to an action: This is for example the case for the trophy icon of
the survey module. An exception can hence be thrown if the user clicks on
such button.
To solve the issue, we will add the 'disabled' property support for the
buttons and we will add that property to the buttons that do not have
an action. With this property, the script will bind no listener to the
button and it will hence not call the listener causing the error.
task-2612033
closesodoo/odoo#75096
X-original-commit: c698d589e7dfa6fe3df8b4014fe30627693e9043
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Steps to reproduce the bug:
- Website in another language than English
- Go to Courses (elarning) and share a title by email
- The "Thank you" message is in English no matter what the language of the website is
opw:2574385
closesodoo/odoo#75062
X-original-commit: b158846d6264befc8e0ba46da839d50319e85d80
Signed-off-by: Simon Goffin (sig) <sig@openerp.com>
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
The zoom feature of Image Widget expects a field `image_` being present
in the view to check if a zoomable image is available or not.
Since #69819 the image field was replaced by an avatar one thus breaking
the zoom.
This commit also puts the Chat icon on kanban cards of
hr.employee.public in the bottom right.
closesodoo/odoo#75099
Taskid: 2622671
X-original-commit: ae8a4b51e801a06d9d7a13be3658d5b6828da7e9
Signed-off-by: Kevin Baptiste <kba@odoo.com>
Automatically activate `group_multi_currency` if there is more than one active currency,
deactivate it if there is only one active currency
retain sale/pos feature of activating group_product_pricelist
adapt tests accordingly
Task 2610735
closesodoo/odoo#74396
Related: odoo/enterprise#20106
Signed-off-by: Laurent Smet <smetl@users.noreply.github.com>
Users will now have a quick way to add images on their products in batches, allowing fast visual identification of them.
task-2518519
closesodoo/odoo#70198
Signed-off-by: Antoine Vandevenne (anv) <AntoineVDV@users.noreply.github.com>
Purpose
=======
The global purpose of this PR is to improve the score of the emails sent by
Odoo as well as allowing to authenticate the Odoo server with SSL certificate.
SSL authentication
==================
We want to be able to authenticate our servers with a certificate for the
entire domain name instead of using an username and a password. That way
we will be able to configure an SMTP relay (on Office 365 e.g.) based on an
SSL certificate instead of an hard-coded IP address.
The host name of the server is defined in the MX DNS record on your domain.
The certificate must be valid for your domain name.
e.g.
> Host: openerp-org.mail.protection.outlook.com
Port: 25
Username: \<keep it blank>
Password: \<keep it blank>
Security: STARTTLS
Email: admin@odoobe.com
No spoofing
===========
Before, we were spoofing the FROM headers all the times. E.g., if someone has
an email address outside of the current email server (e.g. `test@gmail.com`)
we sent it using the default mail server and we spoofed the FROM. This causes
some issues, because emails may be marked as spam by the email clients. A
small fix for stable was merged at odoo/odoo#69218 and will be reverted as this merge
improves that behavior.
Now, we try to *not* spoof the mail from in the SMTP protocol. For that purpose
we define a default email address which is used when no mail server is
available for the sender email address. In that case, the email address
of the sender will be "encapsulated" in the default email address
(e.g. `"Admin (admin@gmail.com)" <notifications@odoo.com>`).
To know for which email address an outgoing mail server can be used, we use a
field "`from_filter`" which can be either an complete email address or a
domain name.
The headers are changed following this heuristic
1. We first look for a mail server which match the entire mail FROM
in that case, we do not change the email header (not needed)
2. If not found, we search a mail server which match the domain name of
the mail from (do not need to change the headers in that case)
3. If not found, find the mail server linked to the "notifications"
email (defined in the system parameter). Then change the FROM header
to the notifications email, and put the old one in the name part of
this header.
e.g.
Initial mail from: "Admin" < admin@example.com >
Final mail from: "Admin (admin@odoo.com)" < notifications@odoo.com >
4. If no notifications email is configured or if no mail server are
found for the notifications email, fallback to the old system and
spoof the FROM header. In that case we do not have the choice if we
want to send the email, he will probably be marked as spam.
LINKS
Task-2367946
closesodoo/odoo#61853
Related: odoo/upgrade#1903
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Purpose
=======
If the partner was removed after the user open the email on the Gmail
side, return a clean error message instead of raising a traceback.
Add translations for the new strings in the plugin.
Links
=====
Task-2567566
Followup of odoo/odoo#73653
See odoo/mail-client-extensions#15closesodoo/odoo#75076
X-original-commit: e782c85b95aed30dd38bd30c29e57a9acc540a49
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Purpose
=======
Now that we try to not spoof the FROM SMTP headers, we want to improve
the default mail FROM used in mailing. By default, it's the email of
the current user, but if no mail server is configured for it, we will
use the notification email instead and encapsulate the email of the
user in it.
e.g.:
Original: "Admin" < admin@odoo.com >
Final: "Admin (admin@odoo.com)" < notifications@odoo.com >
Show a warning message if the configured mail server can not be used
for the email from.
Task-2367946
odoo/odoo#61853odoo/upgrade#1903
PURPOSE
=======
We want to increase the score of the emails sent by Odoo and we want to
avoid them to be marked as spam by the mail clients (gmail, outook...).
SPECIFICATIONS
===============
From filter
-----------
Add a new field on the "ir.mail_server" which is "from_filter". This
field defines the email address for which the outgoing email server can
be used.
The "from_filter" can either define an email address or a domain name.
Use the system parameter "mail.default.from" which allow us to define
a default email address which is used to encapsulate the emails
(default: notifications@<catch.all.domain>).
Mail server priorities
----------------------
When sending an email, we read the FROM header and,
- We first look for a mail server which match the entire mail FROM
in that case, we do not change the email header (not needed)
- If not found, we search a mail server which matches the domain name of
the mail from (do not need to change the headers in that case)
- If not found, find the mail server linked to the "notifications"
email (defined in the system parameter). Then change the FROM header
to the notification email, and put the old one in the name part of
this header.
E.g.
Initial mail from: "Admin" < admin@example.com >
Final mail from: "Admin (admin@odoo.com)" < notifications@odoo.com >
- If no notification email is configured or if no mail server are
found for the notification email, fallback to the old system and
spoof the FROM header. In that case we do not have the choice if we
want to send the email, he will probably be marked as spam.
Sending method priority
-----------------------
In the mail server models, we defined some priorities,
1. Forced SMTP session
2. Forced mail server
3. Try to find the best mail server (see "Mail server priorities")
4. If not found, read the odoo-bin arguments
Bounce
------
As there's no standard for bounce address, we put it in the envelope
(smtp_from). But in some case, it might be considered as spoofing. So,
we use the bounce address ONLY if the mail server is configured for the
entire domain name.
One behavior which might be broken is the following; we send an email as
"std@gmail.com" and the bounce address is on the domain "odoo.com".
Before we received the bounce notifications but we were spoofing the
local part and the domain.
Now
- if a mail server is configured for GMAIL, we do not use the bounce
address (and we might not receive the bounce notification)
- if no mail server is configured for GMAIL, but one is configured for
"odoo.com"
- the FROM header will be "notifications@odoo.com"
- the FROM envelope will be the bounce address
=> In this situation we are spoofing only the local part of the email
but it's allowed as the mail server is configured for the entire
domain name
LINKS
=====
Task-2367946
odoo/odoo#61853odoo/upgrade#1903
Purpose
=======
Split the code of "send_email" in "ir.mail_server" so the changes will
be easier to review.
Task-2367946
odoo/odoo#61853odoo/upgrade#1903
PURPOSE
=======
We want to be able to authenticate our servers with a certificate
for the entire domain name instead of using a username and a password.
SPECIFICATIONS
==============
Add 2 fields on the `ir.mail_server`, which are
- the SSL certificate
- the SSL private key
When we uploaded both files, we use them to authenticate the client of
the SSL connection.
Add 2 options on the Odoo binary, so we can provide the filenames of both
files (like we do for the SMTP username/password).
SETTINGS
========
Note that this type of authentication doesn't work locally for Microsoft
office 365. It seems like Microsoft is blocking non-static IP address
(not able to ping the host locally, but it works on the server).
The host name of the server is defined in the MX DNS record. Then, on
Office 365 you must create an SMTP relay based on a certificate and not
based on a hard coded IP address. The certificate must be valid for your
domain name.
e.g.
Host: openerp-org.mail.protection.outlook.com
Port: 25
Username: <keep it blank>
Password: <keep it blank>
Security: STARTTLS
Email: admin@odoobe.com
New Python dependence
=====================
The standard SSL python library only takes a filename to the certificate
/ private key.
But, we do not want to use attachments and take the full path to the
file (in the filestore) or to create temporary file.
So, we need to use a new library "PyOpenSSL" which allows you to load
a certificate / private key from a byte array.
To make this library work with SMTPLIB we use a wrapper developed
in urllib3 (PyOpenSSLContext).
LINKS
=====
Task-2367946
odoo/odoo#61853odoo/upgrade#1903
Purpose
=======
Revert the commit a757cab857
because the rewriting of the FROM of the emails sent will
be done in a smarter way in master.
Task-2367946
odoo/odoo#61853odoo/upgrade#1903
This commit improves the form view of 'Mailing List Contacts'. It will:
- Add a color picker on the tag ('tag_ids').
- Make the bouncing counter ('message_bounce') unmodifiable.
- Make the creation date ('create_date') and the bouncing counter
('message_bounce') invisible when the user creates a new record.
task-2611112
closesodoo/odoo#74440
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Currently,when merging opportunities, they are sorted by "confidence level",
which has following criterion for sorting:
- type (active opportunity is best, inactive opportunity is better)
- stage sequence (higher is better)
- ID (older is better)
For better sorting, this commit improves the confidence level by adding
probability as a third criterion, and so now criterion for sorting is:
- type (active opportunity is best, inactive opportunity is better)
- stage sequence (higher is better)
- probability (higher is better)
- ID (older is better)
This commit also adapts the test cases accordingly which now considers
probability as a factor for calculating confidence level.
Task-2198562
PR odoo/odoo#51893
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Purpose of this merge is to force some probabilities on leads used as data
in various tests. That way when dealing with probabilities changes in tests
are easier to spot and understand.
Also fix some docstrings about stage sequence which were incorrect.
No tests has been changed, purpose was to set probabilities that do not
change any test output.
Task-2198562
PR odoo/odoo#51893
Steps to reproduce the bug:
- Create a storable product, e.g:”Product A”, with a AVCO + Automated category
- Make sure to assign an account in the price difference account field
- Create an RFQ with the “Product A”
- Confirm RFQ and receive the product
- Create the vendor bill and edit to change the unit cost from 55 to 56
- Post the bill
- Check journal items
Problem:
Price difference accounts have no partner_id
opw-2616388
closesodoo/odoo#75085
X-original-commit: 75b45e736bde32e264e7e660b4626142d8f05df2
Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
reserved_availability is expressed in move uom
forecast_availability must be in product base uom
closesodoo/odoo#75077
X-original-commit: fa9abcc1b105c07e1eaf6bdd3010abe19a056088
Signed-off-by: Rémy Voet <ryv-odoo@users.noreply.github.com>
Steps to reproduce:
Step 1: make a MO and create less than the quantity to produce
Step 2: Mark As Done (with no backorder)
Step 3: duplicate the MO and try to change the quantity to produce
Expected result: qty to produce changes as expected
Actual result: server error
Issue is due to the copied MO's `move_finished_ids` including a copy
of the cancelled finished move (i.e. the qty not backordered) so there
were 2 `move_finished_ids` for the product to produce. This resulted in
an access error since the onchange to update the `move_finished_ids`
only expects 1 move for the product to produce and results in a
singleton error.
Note we copy cancelled move_raw_ids because otherwise we wouldn't be
able to duplicate cancelled MOs without losing all of its components.
Issue 2 of Task: 2618962
closesodoo/odoo#75073
X-original-commit: 456c337534427db1296030b004ae061b47d8db79
Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
Signed-off-by: Tiffany Chang <tic@odoo.com>
In subcontracting, there wasn't a way to make
the subcontracting resupply delivery plan before
the subcontracting receipt.
Now the hidden subcontracted MO, take in account
(in his planning) the `produce_delay` (in days) of
the product which is automatically plan the
subcontracting resupply delivery correctly.
task-2486811
closesodoo/odoo#75072
X-original-commit: 829369d3ca0530f1aad0599fbb1598810a928cc3
Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
Signed-off-by: Rémy Voet <ryv-odoo@users.noreply.github.com>
Old shortcut (ctrl+K) was conflicting with the new command palette feature, so we change it to CTRL+M.
task-2593213
closesodoo/odoo#75069
X-original-commit: 0371fe2b9e54ff557265a8f8fc919d351ed6a7d5
Signed-off-by: Antoine Guenet <Zinston@users.noreply.github.com>
Currently, empty screen of the settings is not very beautiful
without proper action helper and decoration. It displays only
'no record found' string when no setting is found for the
search string.
With this commit, we make the no content helper for the settings
consistent with other apps. It now displays empty folder and
proper helper message.
TaskID-2588387
closesodoo/odoo#74570
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit hides "other" tracks/rooms and exhibitor sections if there is only
a single record for these.
Purpose is:
Allow users to handle events that do not have a ton of things happening at the
same time without showing empty sections.
Example: I use Odoo events to broadcast my concert/zoom conference/... online
and want my website to look neat.
Task-2531084
closesodoo/odoo#71600
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Steps to reproduce the bug:
When making a payment intent from Adyen terminal with the POS, the payment intent was validated by Adyen
but Odoo stopped polling because a connection failure happened and then on retry it made second payment
even if the first one was successful.
Fix:
Now after a failure, it will try to poll again the last transaction (with get_latest_adyen_status)
and set the payment as successful or cancelled based on the last response.
opw:2587625
closesodoo/odoo#75053
X-original-commit: dcb1e2b4823c917f4c547d2cad604187f893948d
Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
Co-authored-by: nle-odoo <nle@odoo.com>
Step to follow
Create a sale order for a kit with a quantity of one and Dozens as a unit of
measure
Confirm and validate the delivery
The delivered quantity will be 12 instead of 1
Cause of the issue
The delivered quantity wasn't recomputed in relation to the sales order
quantity
opw-2535193
closesodoo/odoo#75044
X-original-commit: 5ce39d13d1364df3d9c9638fce7f9d374f1c9b72
Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
RATIONALE
Currently, editing a mail feels a little claustrophobic because of the boxes
within boxes within boxes design. Purpose of this task is to improve
layout of mailing form view when being in Email Marketing, notably displaying
editor in full width.
SPECIFICATIONS
In this task we remove the chatter and the sheet from the form view so that
the mail editor takes up more horizontal space. The chatter is then moved into
one of the notebook's tabs.
Mass mailing form view currently has a scrollbar for the contents of the
editor: one for the form view itself and one for the sidebar. In consequence
we sometimes end up with three scrollbars side by side, which is ugly and
confusing. In this task we ensure the height of the iframe is always the same
as its contents so there is no need for a scrollbar.
Note that SMS Marketing is untouched as it keeps the old layout. Indeed there
is no need of such changes as it does not use the HTML editor. Actions that
are generic (systray, list view, ...) also use the old display..
LINKS
Task-2545445
closesodoo/odoo#71511
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Before this commit: when typing something on many2many_tags widget and clicking
on 'Create and Edit' from many2many_tags widget shows form dialog, now clicking
on the 'Save & new' button shows the old value in the name field instead of the
blank value it is because of default context passed, clicking 'Save & New' will
pass old context due to which name field will have old value, this will create
issue when there is unique name constraint, pressing 'Save & New' and then
again clicking 'Save & New' will raise constraint.
After this commit: clicking on the 'Save & new' button will shows the blank
value in the name field, to fix this issue, we removed 'default_name' key from
context.
TaskID-2323194
closesodoo/odoo#75052
X-original-commit: 6e33a4a073acd6d4dc64743d010a8d754ad8a2ff
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Co-authored-by: Mohammed Shekha <msh@odoo.com>