Commit Graph
236 Commits
Author SHA1 Message Date
Christophe Simonis 97073e2a73 [MERGE] forward port of branch saas-6 up to 51040b6 2015-07-28 13:56:16 +02:00
Christophe Simonis 9d6786bc43 [MERGE] forward port of branch 8.0 up to 5e6ec89 2015-07-27 14:56:49 +02:00
Christophe Simonis af9393d505 [FIX] orm: access error due to prefetch of indirectly referenced records.
The new-api record prefetching algorithm attempts
to load data for all known records from the requested
model (i.e. all IDs present in the environment cache),
regardless of how indirectly/remotely they were
referenced. An indirect parent record may therefore
be prefetched along with its directly browsed children,
possibly crossing company boundaries involuntarily.

This patch implements a fallback mechanism when
the prefetching failed due to what looks like an
ACL restriction.

The implementation of `_read_from_database` handle
ACL directly and set an `AccessError` as cache value
for restricted records.

If a model (like `mail.message`) overwrites `read` to
implements its own ACL checks and raises an `AccessError`
before calling `super()` (which will then call
`_read_from_database`), the cache will be not fill,
leading to an unexpected exception.

If this commit messae looks familiar to you, that's
simply because this is the new-api counterpart of
b7865502e4
2015-07-24 14:01:09 +02:00
Christophe Simonis 2cf91d16a5 [MERGE] forward port of branch saas-6 up to 63e92cb 2015-07-22 16:17:54 +02:00
Christophe Simonis 4a2aee45be [MERGE] forward port of branch 8.0 up to 9654b54 2015-07-10 17:12:57 +02:00
andreparames 067fd2f342 [FIX] models: don't assume ids are ints in sorted()
Some models (e.g. calendar.event), use "virtual" ids which are not represented
as integers. It was not possible to use sorted method on those models as calling
int() is failing.

This commit fixes the method, making it agnostic to the type of the
'id' member variable.

Fixes #7454
2015-07-08 15:00:32 +02:00
Christophe Simonis fe92deaa1d [MERGE] forward port of branch 8.0 up to 2de301d 2015-07-07 18:13:57 +02:00
Xavier Morel 95e56a109d [ADD] doc: new theme
Pretty much completely rewritten theme with custom HTML translator and a
few parts of the old theme extracted to their own extensions.

Banner images thought not to be that huge after all, and not worth the
hassle of them living in a different repository.

co-authored with @stefanorigano
2015-07-07 11:22:50 +02:00
Raphael Collet 2ba2cbca5f [IMP] translations: synchronize terms when English value of field is modified
Also adapt the insertion of missing translations when clicking on the translation icon.
2015-07-06 16:58:03 +02:00
Raphael Collet 8ddfb1888b [IMP] models, fields: handle the case where field.translate is a callable
Using `field.translate(callback, value)` returns the translation of the given
field value by using the function `callback` to translate simple terms in
`value`.  In practice, the function `callback` uses a translation mapping
retrieved from `ir.translation`.
2015-07-06 16:58:03 +02:00
Raphael Collet d5a1d7b6ae [IMP] models: improve reflection of fields into ir.model.fields
* add missing columns in base.sql
* add missing fields 'help', 'readonly', 'required', 'selectable' in reflection
* add field 'help' in `ir.model.fields` views
* do not patch registry with translated field string and help upon `ir.model.fields` update
2015-07-06 16:58:03 +02:00
Raphael Collet 848c220180 [IMP] ir_model: use ir.model.fields to store translations of fields string and help
* add the necessary fields in `ir.model.fields`
* when loading translations, convert types 'field', 'help' into 'model'
* add specific methods to retrieve translations of field string and help
2015-07-06 16:58:03 +02:00
Raphael Collet ab452d00f8 [IMP] models: remove deprecated methods read_string and write_string 2015-07-06 16:58:03 +02:00
Leonardo Donelli 207cf92a0c [DOC] openerp: add missing parameter for search method
The `search` method of models has an additional keyword parameter, `count`.

It not being specified in the docs could lead people to inherit `search`
without defining it, which would result in a `TypeError` when called with
`count=`.

Closes #7451
2015-07-06 14:26:46 +02:00
Christophe Simonis 4c2a1de75a [MERGE] forward port of branch 8.0 up to 22bd3bd 2015-07-01 18:11:32 +02:00
Martin Trigaux 2758aaa6f8 [IMP] models: sanitize error messages in import
Revert 83282f2d for a cleaner sanitizing earlier in the generation of the error
message.

If the import is failing, the error message contains the value that is
problematic. Escape this value in case it contains '%'
2015-07-01 17:04:48 +02:00
Christophe Simonis b16fd16e90 [MERGE] forward port of branch 8.0 up to 7d01029 2015-06-30 15:29:03 +02:00
Mohammad Alhashash 83282f2dea [FIX] models: Escape % characters from error messages of a failed import
To prevent susbtituion exception when creating use error message
e.g. No matching record found for external id 'fo%o' in field 'Bar'
Fixes #5933
2015-06-29 16:50:33 +02:00
Christophe Simonis a304194936 [MERGE] forward port of branch saas-6 up to 81b5c60 2015-06-25 00:26:31 +02:00
Raphael Collet b026fe7611 [IMP] models: method read() now uses JOIN to retrieve field translations 2015-06-17 13:32:17 +02:00
Raphael Collet ff3d1fce1f [FIX] models: make method _read_from_database use query parameters correctly 2015-06-17 13:32:17 +02:00
Denis Ledoux 9593a2930f [IMP] model, query: implement sort on translatable fields
The methods `BaseModel._inherits_join_calc` and `BaseModel._generate_order_by`
are modified to add a JOIN to the translation table for translated fields, so
that the translation value is directly accessible in the query itself.

For the JOIN with the translation table to work, the method `Query.add_join` is
extended to take extra conditions in the join clause, together with parameters.
2015-06-17 13:32:17 +02:00
Raphael Collet 44efcf8066 [IMP] models: improve API of some model methods that need the context
The following methods have been decorated with `@api.model` so that they can
carry the context: `_generate_order_by`, `_generate_m2o_order_by`,
`_inherits_join_calc`, `_read_group_prepare`, `_read_group_process_groupby`.
2015-06-17 13:32:17 +02:00
Christophe Simonis 4647778758 [MERGE] forward port of branch 8.0 up to ea59856 2015-06-15 12:28:32 +02:00
Thomas Groutars 5c0bfaafd1 [IMP] ir_model: enable the creation of transient custom models
Rename the field 'osv_memory' on 'ir.model' into 'transient', and make it a
regular field instead of a computed one.  When instantiating a custom model,
use its value to make transient models.

This commit alone will make your server crash on an existing database.  A small
database migration is needed: simply add a boolean column `transient` (with
default value false) in table `ir_model`.
2015-06-15 12:19:52 +02:00
Raphael Collet 4a5e2fe99e Merge pull request #5618 from acsone/8.0-fix-5616-ir_model_fields-from-fields
[FIX] model: use self._fields instead of self._columns to populate ir.model.fields
2015-06-09 09:51:49 +02:00
Olivier Dony 0bd4545348 [LEGAL] Use global LICENSE/COPYRIGHT files, remove boilerplate text
- Preserved explicit 3rd-party copyright notices
- Explicit boilerplate should not be necessary - copyright law applies
  automatically in all countries thanks to Berne Convention + WTO rules,
  and a reference to the applicable license is clear enough.
2015-06-02 03:16:04 +02:00
Christophe Simonis fe2b5f35a4 [MERGE] forward port of branch saas-6 up to bf1e999 2015-05-28 14:27:38 +02:00
Christophe Simonis 4a0241d6f6 [MERGE] forward port of branch 8.0 up to f722254 2015-05-18 17:35:24 +02:00
Antony Lesuisse ceb53fad6d [IMP] website: ir.http route cache for auth public
- remove useless cache clear_prefix
- add a route cache attribute when used it will save the rendered page into the
  ormcache for the specified time, this is only enabled if the user is public
  and reponse code is 200
- enable it on /page controller for 5min
2015-05-17 17:08:13 +02:00
Raphael Collet 78a20a3dba [FIX] model: wrong alias used in read query for multi-inherited field
In commit 04ba0e99, we introduced an optimization for reading inherited fields
in a single query.  There is an issue when you have more than one level of
`_inherits`.  The query looks like:

    SELECT ...
    FROM table0, table1 AS alias1, table2 AS alias2
    WHERE table0.link0 = alias1.id AND table1.link1 = alias2.id AND ...
                                       ^^^^^^
                             should be alias1

This fixes the issue, and adds a test to reproduce it.  The fix is based on
@emiprotechnologies's own proposal, but is cleaner and does not break APIs.
2015-05-12 13:42:27 +02:00
Christophe Simonis 0da722aa6a [MERGE] forward port of branch 8.0 up to bff6dff 2015-05-11 15:12:24 +02:00
Raphael Collet 0a83ee4c34 [IMP] models: allow prefetching of fields in draft mode but not in onchange mode
Change the condition to disable the prefetching in onchange mode only.  The
prefetching of fields was disabled in draft mode in order to handle the case of
onchanges on records: computed fields must to be recomputed and not fetched
from database.

This saves a few queries when computing a field.  For instance, viewing a
question on the forum takes 66 queries instead of 85.
2015-05-07 11:29:19 +02:00
Olivier Dony d7b1595ddb [IMP] models.unlink: log deletions for auditing purposes
Useful for post-mortem investigation of
spurious deletions, otherwise mostly
untraceable.
2015-05-07 00:20:45 +02:00
Denis Ledoux b7f1b9c01e [FIX] models: recompute nested old-style computed field
The `set` method of the one2many class returns a list
of the fields that require recomputation,
the computing of the function fields being delayed
for performances reasons.

Nevertheless, if the `set` method was called
through another `set` method, in other words,
nested `set` calls, the fields to recompute returned
by the second, nested, call to set were never recomputed,
the result list were simply lost.

e.g.:
```
create/write
│set
└─── create/write with recs.env.recompute set to False
    │set
        └─── create
             with recs.env.recompute set to False
```

To overcome this problem, the list of old api style
compute fields to recompute is stored
within the environment, and this list is cleared
each time the store_set_value has done its job of
recomputing all old api style compute fields.

opw-629650
opw-632624
closes #6053
2015-05-06 17:25:44 +02:00
Raphael Collet 1a535b9d87 [IMP] models: in recompute, do not store fields that should not be recomputed
Consider a new field that uses the same compute method as another existing
field.  When the field is introduced in database, its value must be computed on
existing records.  In such a case, the existing field should not be written, as
its value is not supposed to have changed.  Not writing on the existing field
can avoid useless recomputations in cascade, which is the reason we introduce
this patch.
2015-05-06 15:24:39 +02:00
Christophe Simonis 2260496879 [MERGE] forward port of branch 8.0 up to a939a27 2015-05-05 18:48:34 +02:00
Raphael Collet 0c665edb66 [FIX] models: make sure an environment is available when we access field.digits
Accessing `field.digits` can crash if no environment is available at that
point.  This happens in function `get_pg_type()`, which is called from method
`_auto_init()`.  An environment is simply created in the method's scope to be
available for `field.digits`.
2015-05-05 17:33:16 +02:00
qdp-odoo c04065abd8 [IMP] accounting v9. Yeeeeaah 2015-05-05 17:28:04 +02:00
Anthony Muschang 2925bb5c9a [FIX] models: Always use MissingError when a document is missing
As done in write and already in next version (see 0fd773a), accessing a deleted
record (through read or check access rights) should always return a MissingError
instead of the generic except_orm.
This will allow code ignoring deleted record (e.g. 'recompute' method) to safely
process the other records.
Fixes #6105
2015-05-04 13:39:21 +02:00
Sylvain Calador fa18530210 [REF] Add a hook for import fake fields
Used during records extraction phase of import (CSV)

closes #6188
2015-04-29 10:42:56 +02:00
Christophe Simonis a9471c43b9 [MERGE] forward port of branch saas-6 up to e941c0f 2015-04-17 15:33:00 +02:00
Christophe Simonis 3206a35aed [MERGE] forward port of branch 8.0 up to 8ac8281 2015-04-13 12:07:58 +02:00
Raphael Collet 60ad1fec4d [IMP] fields_view_get: make it issue less queries in tree views
When method `fields_view_get` retrieves the toolbar actions, let it `browse`
the actions to check instead of `read`ing them.  This enables prefetching and
reuse of cached values.

On the list of Customers, `fields_view_get` takes 62 queries instead of 73.
2015-04-10 18:23:32 +02:00
Cedric Snauwaert 9d87d15db6 [ADD] new fields.Monetary + updated widgets
Enhance current widget="monetary" client-side feature and
convert it to a first-class type of field, allowing proper
server-side behavior.

- fields: add field.Monetary, similar to fields.Float but
  supporting a `currency_field` attribute instead of the
  decimal_precision attribute.
  `currency_field` indicates the field holding the
  related currency on the same record.
  The symbol of that currency is used when displaying
  the field, and the rounding of the currency is applied
  instead of the usual decimal precision.
- avoids application of a second decimal precision rounding,
  as was the case when the model field was a `fields.float`.
- removes the need for adding explicit boilerplate to each
  view containing a monetary field, i.e.:
    widget="monetary" options="{'currency_field': 'currency_id'}"
- res.currency: add new field decimal_places needed to round
  value at the correct decimal places
- web: cache all currencies, rounding and symbols at
  webclient startup to speedup monetary fields
- new widget monetary for list view + adapt widget monetary
  on form view

Limitations:
- if the currency_field is a related field, the server-side
  application of currency rounding will only work when the
  record already exists, not during creation (to be fixed)
- this field is only supported in the new API
2015-04-09 19:05:44 +02:00
Christophe Simonis 14fd77c132 [FIX] core: ormcache is now per regisry.
A cross-registry cache was introduced by e2ea691ce.
The initial idea was praiseworthy but sub-optimal for servers with a
lot of registries.
When there is lot of registry loaded, the cache size was huge and
clearing some entries took a lot of CPU time, increasing the chances
of timeout.

Also, the cache was not cleaned when a registry is removed from
registry LRU (this operation would also consume time).
2015-04-03 16:11:57 +02:00
Raphael Collet 9a365e83e7 [FIX] models: do not prefetch fields while the model schema is created
The following case has shown the issue: extend the model `res.company` by
adding at least two fields F and G, where F has a default value defined as:

    lambda self: self.env.user.company_id.name

If the column F is created before G in the database, the existing records will
be filled with the default value of F.  When the default value is computed, the
field `name` from a `res.company` is read, and other fields are prefetched,
including G.  This operation fails, because G does not exist in database yet!
2015-04-02 16:54:39 +02:00
Christophe Simonis fb8b970567 [MERGE] forward port of branch 8.0 up to 0ed63d7 2015-03-23 16:35:03 +01:00
Raphael Collet 93c341a52c [IMP] models: avoid using map instead of a for loop (thanks chs@odoo.com) 2015-03-23 14:36:15 +01:00
Raphael Collet f93a14e3b2 [IMP] fields: remove comments about _all_columns, and improve its docstring 2015-03-23 14:36:15 +01:00