Commit Graph
118215 Commits
Author SHA1 Message Date
Christophe Simonis f7d442a2f6 [MERGE] forward port branch saas-15 up to cf18c9bae1 2019-06-26 19:28:52 +02:00
Christophe Simonis cf18c9bae1 [MERGE] forward port branch saas-14 up to 2a89adef2a 2019-06-26 19:26:58 +02:00
Christophe Simonis 2a89adef2a [MERGE] forward port branch 10.0 up to 7b16abbae1 2019-06-26 19:26:33 +02:00
Nicolas Martinelli 98a590b359 [FIX] l10n_fr_fec: remove new line
- Make a SO with a product that have a carriage return in its
description
- Export FEC report

The CSV contains new lines and is not correctly formatted. This is due
to c712231745.

opw-2026861

closes odoo/odoo#34386

Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2019-06-26 12:54:28 +00:00
Nicolas Martinelli aad824067c [FIX] l10n_fr_fec: wrong forwart-port
Incorrect forward-port of commit cd26eb8e7c

opw-2026861
2019-06-26 12:53:20 +00:00
Goffin Simon 06375de3bc [FIX] crm: Wrong opportunities_count in Sales Channels
Steps to reproduce:
- Go to CRM > Reporting > Sales Channels
- Click on link Open Opportunities,

Bug:

It displayed all the opportunities instead of just the open opertunities.

opw:2009808

closes odoo/odoo#34365

Signed-off-by: Simon Goffin (sig) <sig@openerp.com>
2019-06-26 14:41:42 +00:00
Christophe Simonis d65953124c [MERGE] forward port branch saas-14 up to 61a51a8651 2019-06-26 11:15:32 +02:00
Christophe Simonis 61a51a8651 [MERGE] forward port branch 10.0 up to ea4ddff117 2019-06-26 11:12:36 +02:00
Goffin Simon 87685fc9b3 [FIX] stock: Inventory of one product only
Steps to reproduce:
- Enable serial numbers
- Create two products P1 and P2 tracked by lots
- Create an inventory adjustment and specify inventory of one product only
- Select P1 and create a serial number for it
- Save the adjustment and change P1 to P2, adapt the quantity to 10 and
validate the inventory adjustment

Bug:
Go to Lots and serial numbers and the created lot was linked to P1 intead of P2

opw:2010934

closes odoo/odoo#34373

Signed-off-by: Simon Goffin (sig) <sig@openerp.com>
2019-06-26 09:10:06 +00:00
Christophe Simonis e7fb3e2f1a [MERGE] forward port branch saas-14 up to a7ad19d7fd 2019-06-20 12:05:26 +02:00
Christophe Simonis a7ad19d7fd [MERGE] forward port branch 10.0 up to c5c955db7a 2019-06-20 12:04:52 +02:00
Christophe Simonis 7b16abbae1 [IMP] core: add support for multi-version migration scripts
A special folder named `0.0.0` can contain scripts that are run on
upgrade of any version.
They are useful to make some sanity checks or other verifications to
ensure database consistency.

The first version of this patch used the more eye-catching `any` for
the migration folder, but it was problematic for upgrading from an older
version that doesn't contain this patch.

Using a version "number" containing two dots is required to avoid it
being prefixed with the server version (see `convert_version` method) and
resulting in a version like `10.0.any`.
Such version would have been executed, even without this patch, when
upgrading from an older major server version (9.0.1.0 < 10.0.any).

closes odoo/odoo#34268

Signed-off-by: Christophe Simonis <chs@odoo.com>
2019-06-20 10:01:31 +00:00
Nicolas Martinelli ea4ddff117 [FIX] point_of_sale: apply fiscal position
- Create 2 included taxes: 21 % and 6 %
- Create a product A with 21 % as default tax
- Create a fiscal position to map the tax 21 % to tax 6 %
- Allow the fiscal position in the POS
- Add product in a POS order
- Apply the fiscal position

The subtotal is not recomputed correctly. On the other hand, if the
fiscal is first set then the product added, there is no problem.

This is because the `fix_tax_included_price` is only called by
`add_product` and not when changing the fiscal position.

opw-2020755

closes odoo/odoo#34260

Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2019-06-20 08:16:10 +00:00
Xavier Morel c5c955db7a [FIX] core: work around ir_logging deadlock
DROP CONSTRAINT (even with IF EXISTS is specified) acquires an ACCESS
EXCLUSIVE lock on the table, preventing e.g. inserts in an other
transaction, so ir_logging would systematically deadlock if configured
to the same database and a warning would be triggered during install
or update (if that ran ir.logging's init).

1. hand-roll the "IF EXISTS" bit, to avoid taking an ACCESS EXCLUSIVE
lock on the table if the problematic constraint does not exist and
thus doesn't need to be dropped (which by now should be the vast
majority of cases).

Replacing DROP CONSTRAINT with DISABLE TRIGGER does not fix the
issue as *that* acquires SHARE ROW EXCLUSIVE. While that's less
constraitning than ACCESS EXCLUSIVE, it still conflicts with an
insert's ROW_EXCLUSIVE.

2. add a timeout to the logging INSERT anyway, the deadlock is still
an issue if we're updating a database which does have the
problematic constraint, and we want to preclude the possible
eventual introduction of new deadlocks in the future.

closes odoo/odoo#34243

Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
2019-06-19 13:43:53 +00:00
Christophe Simonis ec8cfd5624 [MERGE] forward port branch saas-14 up to 249d09068a 2019-06-18 10:56:48 +02:00
Christophe Simonis 249d09068a [MERGE] forward port branch 10.0 up to 455714c7bf 2019-06-18 10:56:06 +02:00
Yoshi Tashiro 455714c7bf [FIX] base: set cureency position "before" for JPY
As a convention, JPY currency symbol normally shows before the amount.

closes odoo/odoo#34113

Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2019-06-17 14:16:42 +00:00
Nans Lefebvre c6ae7eea03 [FIX] stock: do not update moves when writing quantities lower than UoM precision
Suppose product P has UoM U with rounding R, and the stock move has quantity Q.
Edit the quantity done to be Q + e, with e << R.
By the semantic of the UoM rounding, this should mean that no change has been
done.
However no such check was done, so a message was posted in chatter, of the form:
The done move line has been corrected.
P:
Quantity : 1000.0 -> 1000.0000000000001

opw 2006831

closes odoo/odoo#34124

Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
2019-06-14 11:26:16 +00:00
Nans Lefebvre a5a4b154ee [FIX] stock_account: round quantities to UoM precision when updating moves
Have a product P values in FIFO, create an incoming stock move.
Suppose P has UoM U with rounding R, and the stock move has quantity Q.
Edit the quantity done to be Q + e, with e << R.
By the semantic of the UoM rounding, this should mean that no change has been
done. However no such check was done, so the move was updated.
As a result, this would mess up the valuation of P.

opw 2006831
2019-06-14 11:25:56 +00:00
Nicolas Martinelli 963475bcfd [FIX] stock: use float_compare
Use proper `float_compare` method when comparing floats.

opw-1958608

closes odoo/odoo#34370

Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2019-06-26 07:46:19 +00:00
Bohdan Lisnenko 7742887e96 [FIX] http_routing: slugify_lib - max_length param should be int
closes odoo/odoo#33858

Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>

closes odoo/odoo#34363

Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
2019-06-25 12:15:37 +00:00
Goffin Simon 3d27337f6d [FIX] account: correct communication when registering payment for multiple invoices
When registering a payment against multiple vendor bills and change the memo,
the memo must be populated to all the payments. This behavior has been introduced
with the following commit in stable 11.0: c04065abd8

opw:2024652

closes odoo/odoo#34322

Signed-off-by: Simon Goffin (sig) <sig@openerp.com>
2019-06-24 11:29:08 +00:00
Jorge Pinna Puissant 49b949759f [FIX] crm: change team with the default one
Backport from 12.0 to 11.0 (commit: 3cbdfe8807)

- Have two crm teams with the same team leader, and without team members
(team1, team2 as instance).
- Create a new lead, add as Salesperson the team leader, and as Sales
team the second previously created team (team2).
- Save the new lead.

Before this commit, when we save the lead, the sales team will change,
to set the default sales team for the chosen Salesperson, in this case
team1.

opw-2005924

closes odoo/odoo#33898

closes odoo/odoo#34327

Signed-off-by: Simon Goffin (sig) <sig@openerp.com>
2019-06-24 11:22:23 +00:00
Odoo Translation Bot 149783fb19 [I18N] Update translation terms from Transifex 2019-06-23 03:06:47 +02:00
Olivier Colson c0643ac918 [FIX] account: make cash basis taxes work in case several account move lines are reconciled within the same account.move
Such move lines can be created by POS, when closing a session. Because of commit https://github.com/odoo/odoo/commit/d3453f7d152d486cb5df01b4e40dbde57f59b49e , the cash basis entries are now created *after* reconciling everything (and not during reconciliation anymore). This causes multiple lines of the move created for the sessions to be reconciled together in case a refund was made (partial or not).

Solves ticket 2008085

closes odoo/odoo#34237

Signed-off-by: Cedric Snauwaert (csn) <csn@openerp.com>
2019-06-19 09:24:26 +00:00
Christophe Simonis cc3f45ae0b [MERGE] forward port branch saas-15 up to e7fb3e2f1a 2019-06-20 12:06:59 +02:00
Christophe Simonis 641ca4f7f4 [MERGE] forward port branch saas-14 up to 6a247212f8 2019-06-13 15:32:55 +02:00
Christophe Simonis 6a247212f8 [MERGE] forward port branch 10.0 up to 818d34630d 2019-06-13 15:25:43 +02:00
Nicolas Vannieuwerburgh 818d34630d [IMP] stock: noupdate on stock location
Stock.locations should be in no-update:
Limit the impact of recompute fields during the upgrade of stock module. (especially method _compute_product_availability)
Limit the impact on migration

Method _compute_product_availability is triggered during an upgrade of module and during migrations.
This may take a lot of time of big databases

closes odoo/odoo#34074

Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2019-06-13 07:09:42 +00:00
Julien Castiaux 306abd0131 [FIX] mail: send same attachment multiple times
In the Discuss app, using Chrome or IE11, try to send the same
attachment to different channels. The first attachment is correctly
detected but not the next ones.

The problem is due to a browser inconsistency, on firefox selecting the
same file in an `<input type=file>` triggers the `change` event. This is
not the case on Chrome/IE, selecting the same file doesn't triggers an
`onchange`.

opw-2006647

closes odoo/odoo#34076

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2019-06-12 14:36:03 +00:00
Christophe Simonis e14fd457b9 [MERGE] forward port branch saas-14 up to 348f3d8bbc 2019-06-12 14:35:44 +02:00
Christophe Simonis 348f3d8bbc [MERGE] forward port branch 10.0 up to 271f1ec688 2019-06-12 14:35:04 +02:00
Xavier-Do 271f1ec688 [FIX] test_new_api: move demo_data.xml in demo category
Installing test_new_api without demo will fail since demo_user
does not exists. This is a problem if we want to test migration
with all modules installed. This simple fix solve the problem.

closes odoo/odoo#34065

Signed-off-by: Christophe Simonis <chs@odoo.com>
2019-06-12 10:51:32 +00:00
Christophe Simonis 6c6e652673 [MERGE] forward port branch saas-14 up to 757846c591 2019-06-07 11:09:29 +02:00
Christophe Simonis 757846c591 [MERGE] forward port branch 10.0 up to 7746621b92 2019-06-07 11:08:13 +02:00
Nicolas Martinelliandjev-odoo b5a04fd29f [IMP] mail, website_mail, base: extra info on error messages
Display extra information on error messages:
- Access error based on ACLs: user, fields (if applies)
- Access error based on record rules: user, ids
- Missing error: model, operation, user, ids

closes odoo/odoo#33942

Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>


Co-authored-by: jev-odoo <jev@odoo.com>
2019-06-07 06:38:06 +00:00
Christophe Simonis b4337f57d7 [MERGE] forward port branch saas-15 up to ec8cfd5624 2019-06-18 10:59:18 +02:00
Odoo Translation Bot ca8b354cc1 [I18N] Update translation terms from Transifex 2019-06-16 03:07:16 +02:00
Julien Castiaux 45bd7a58d5 [FIX] website_sale_comparison: concurrent add/delete
1) Add a 1st product to compare from the ecommerce /shop page.
2) Open the compare list pop up at the bottom.
3) Add a 2nd product to compare from the /shop page.
4) Remove the 1st product from the compare list before the rpc of the
2nd product is done.
5) Javascript error `self.product_data[res] is undefined`

The function `add_new_products` and `rm_from_comparelist` are
concurrent, they both modify the internal `comparelist_product_ids`
product list. The first one perform an RPC and delay the update once the
request is done, the second does the update immediately.

The solution has been to use a mutex to exclude the two functions.

opw-1974108

closes odoo/odoo#33302

Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2019-06-14 09:02:09 +00:00
Lucas Perais (lpe) 187b77d7b9 [FIX] product: report pricelist empty data
Try to get the report_pricelist with empty data
(Studio Report editor can)

Before this commit, it crashes because we tried to access dict keys directly
in an empty dict

After this commit, it doesn't crash

OPW 2009862

closes odoo/odoo#34118

Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
2019-06-14 08:05:33 +00:00
ThanhDodeurOdoo 66e2aeb660 [FIX] tools: image.crop_image default type fix
Backport of fa39019ee1.
If crop_image is called without a default format, it would try the default,
'PNG', to save the result and crash at save when processing non-PNG images.
For example, if a jpeg image was in CMYK colors.

Here it will still crash non-gracefully when failing to save, but the default
should almost always work; if it doesn't it means we failed to detect the format
of the stream, so it is unlikely that we could save the image anyway.

opw 2009029

closes odoo/odoo#34088

Signed-off-by: Nans Lefebvre (len) <len@odoo.com>
2019-06-13 16:05:34 +00:00
Christophe Simonis ec8c66991d [MERGE] forward port branch saas-15 up to 641ca4f7f4 2019-06-13 16:22:23 +02:00
Denis Ledoux 242e485b4a [FIX] http: Unreachable server when db_maxconn reached during registry loading
On `WebRequest` `__exit__`, when an exception occured,
(in `self.registry.signal_changes` or `self.registry.reset_changes`)
cursor were left unclosed as `self._cr.close` was not called
in such cases.

Having exceptions in the above mentioned method do not happen
often, but when it does it left unclosed and unusable cursors
in the connection pool, and in the extreme case explained below,
it left the connection pool with only unclosed and unusable cursors.
The entire server was then unusable as it no longer had working cursors.

Case:
- Start a multi-thread server with db_maxconn set to 5
- Ensure you do not send any request to the server,
not even with a left open tab on `http://localhost:8069` in your browser
- Send 6 parallel HTTP requests to `/web/login`
thanks to an external thread python script
(See below, at the end of this long commit message)

According to your registry state (if you have a lot of modules installed or not),
and the native Python Garbage Collecting state,
you might end with
- either warnings telling some unclosed cursor were garbage collected,
and therefore closed (by a kind of luck thanks to the Python garbage collecting),
- either, a server completely blocked not accepting any other request
(you can try for instance `curl http://localhost:8069`
and you end up with a `500 Internal Server Error`

This observed issue looks to appear only in 11.0. Not 10.0 or 12.0.
This is because only 11.0 clear the cache during registry loading:
`https://github.com/odoo/odoo/blob/f1706c848d41c47646dabca771996e9b9f788241/odoo/modules/loading.py#L236`
This cache clearing doesn't happen in 10.0 nor 12.0
(in 12.0, thanks to e181f592f3)

When sending the 6 parallel requests,
it uses instantly all the 5 available cursors of the connection pool to handle these requests,
and when each request exits, in `__exit__`, it calls `self.registry.signal_changes()`
which tries to open a new cursor because of
- `self.cache_invalidated` which is True, for all the 6 requests, thanks to the call to `clear_caches`
explained above during the registry loading and the fact all requests have been treated in parallel,
- `with closing(self.cursor()) as cr:`, `self.cursor()` attempting to use a new cursor
(the `closing(...)` does not have any incidence on this issue, despite it could look like guilty)

The attempt to use a new cursor fails, as there is no more available (`db_maxconn` is reached),
raising a `PoolError('The Connection Pool Is Full')` exception.

In the request `__exit__` method, because of this exception raised when calling `signal_changes`,
`self._cr.close` is never reached, and the parallel request therefore left only unclosed
cursors in the connection pool,
therefore leaving the server in a state where it only has unusable cursors
and therefore can't do anything more.

This might look like really bad luck to land in such a state,
but we observed multiple actual case on Odoo.sh,
the one referenced in this commit (opw-2008340) was because of an Outlook client
which launched 18 parallel requests to fetch the email images,
and the server wasn't spawned, therefore neither was the registry.
The server registry was therefore just loaded when it received the 18 parallel requests,
and it therefore triggered this extreme use case.
The server was left unusable for several minutes, until a forced restart.

For reference, here is the script that has been used to trigger the 6 parallel requests:
```
import requests
import threading

threads = []
for i in range(6):
threads.append(threading.Thread(target=lambda: requests.get('http://localhost:8069/web/login')))
for thread in threads:
thread.start()

```

opw-2008340

closes odoo/odoo#34071

Signed-off-by: Denis Ledoux <beledouxdenis@users.noreply.github.com>
2019-06-12 13:10:45 +00:00
Christophe Simonis 92ef6daa19 [MERGE] forward port branch saas-15 up to e14fd457b9 2019-06-12 15:46:40 +02:00
Nicolas Martinelli b5dddce5b9 [FIX] stock: incorrect field
The field is now `quantity`. This wasn't spotted before because the
method is not used anywhere.

opw-2008491

closes odoo/odoo#34067

Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2019-06-12 11:50:44 +00:00
Nans Lefebvre f1706c848d [FIX] stock: put stored related field product_code in compute_sudo
Have a multi-company setup, with shared products.
Write the default code of a product; an access error is raised on inventory.line

On inventory.line, the field product_code is defined as related to
'product_id.default_code', and stored.
So when writing on the default_code of a product, we get the inventory lines of
other companies. For obvious reasons their access is protected by the record
rule "Inventory Line multi-company", therefore the access error is raised.

To avoid that situation stored related fields should be in compute_sudo.

Note that similarly this is necessary for product_name.
There is one more subtlety: directly writing on the product.product does trigger
the access error, but writing it on the product.template does not.

opw 2007167

closes odoo/odoo#34019

Signed-off-by: Nans Lefebvre (len) <len@odoo.com>
2019-06-12 07:58:15 +00:00
Nicolas Martinelli a25f6e1b96 [FIX] sale: recompute delivered qty
- Create a product A of type "Service", Invoice based on "Milestones",
Service Tracking "Create a task in a new project".
- Create a new SO with A, confirm.
- Go the to task associated to the SO, go to "Timesheets" tab, add an
entry
- In the SO, edit the delivered quantity
- Create invoice, validate

Back to the SO, delivered quantity is reset to 0.

We make sure to filter out SO lines which have a delivered quantity set
manually.

Introduced by d6ad22227c.

opw-1982020

closes odoo/odoo#33991

Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
2019-06-07 14:20:35 +00:00
Odoo Translation Bot 34ae29e68b [I18N] Update translation terms from Transifex 2019-06-09 03:07:58 +02:00
Christophe Simonis bdc62d8031 [FIX] test_lint: move custom pylint checkers to new module
Oversight of previous forward-port.
2019-06-07 12:08:29 +02:00
Christophe Simonis 9bf4766f3d [MERGE] forward port branch saas-15 up to 6c6e652673 2019-06-07 11:38:48 +02:00