For textual attachments (like assets), the indexed content is the
content itself. Avoid prefetching this potential huge field.
When deleting attachments, only delete files once.
Previous implementation was expecting exactly the same number of
attachments than the number of assets in a bundle. However it's
possible that duplicated assets are created due to concurrent first
generation.
This duplication cannot be avoid, but is cleaned upon next bundle
regeneration.
Joint work with @sle-odoo and @odony
Allow easy modification of ClientListScreenWidget by other modules. If
you get creative you can actually get to it without this, but it's not
clean and needlessly complicated.
opw-669686
On deletion of a pricelist,
the pricelist items were not deleted.
Meaning, if you deleted a pricelist,
and this pricelist was used in the product pricing,
the line with the pricing remained, but without any
pricelist set. Besides, as the field is required
in the view, this prevented to edit anything without
correcting the pricing line first.
opw-669652
Rather than trust the user-controlled mimetype or extension of imported
files which may be incorrect (because the user is lying, because the
system is misconfigured, because software is not installed, because
software is registering non-standard mimetypes, etc...), start by trying
to guess the mimetype *then* fallback on trying the type/ext.
Of note: CSV is becoming less and less great as it's nigh impossible to
guess for it.
* move guess_mimetype from ir_attachment to a misc submodule so it can
be used outside of attachments (in base_import in this case)
* fix the broken detection of zip and OpenDocument files (would all be
detected as msword files)
* correctly implement detection of OOXML files (including returning the
right MIME type)
* attempt to correctly detect OLECF Excel files (.xls)
* add PPT detection (untested)
* remove duplicate patterns in GIF detection
If the user provides a known mimetype which doesn't actually match the
file as far as we're concerned, warn and fallback on extension rather
than blow up.
This comes up when a user installs Excel on Windows: it associates CSV
files with itself and sets their mime type to application/vnd.ms-excel,
which is not correct and leads to us trying to load a CSV with xlrd (an
excel-parsing library).
Fixes#9779
DO NOT FORWARD-PORT TO MASTER
When the user wants to edit the translation of a view, a JS traceback
appears. The reason is that the `WebClient.DebugManager.View` tries to
access `view.controller.fields_view.view_id` before the fields_view_get
is actually resolved.
The issue is that the DebugManager is loaded when the dialog is opened.
However, the dialog is opened before its content is actually loaded. The
proper fix would be to open the dialog only when the content is ready.
Since this might imply side effects, this fix will be done in master
branch, not in the stable saas-7.
The workaround is to open the translation window in the current window,
not in a dialog window.
opw-669140
The unsubscribe URL is used within the `mass_mailing` module,
e.g. in `_get_unsubscribe_url` & `send_get_email_dict`.
Basically, there is the possibility to add the unsubscription
link in the mass mailings while having only
`mass_mailing` installed.
But, the unsubscription route is defined within
the module `website_mass_mailing`.
Therefore, if you added the unsubscription link
within your mailings while not having
`website_mass_mailing` installed, trying
to follow the unsubscription link leaded to
a `404 Not Found` page.
We therefore define the route within `mass_mailing`
directly, which does the basic stuff (the basic
unsubscribe and confirmation), and override this route
in `website_mass_mailing`, where the advanced stuff is done
(the mailing lists list unsubscription and the better
looking page).
opw-669425
The button 'mark all as read' used to mark all messages as read, which
is not usually what the user wants when there is an active filter in the
search view. This commit make sure that the domain is send to the
server and used correctly.
The copied textarea used in autoresize was a valid target for focus when
using the tab key. This is a major issue in editable list views,
because when the user leaves a textarea, the list view jumps up, with no
visible focused field.
The link to open the merging partners wizard was duplicated
in the action menu:
- Once as "Deduplicate Contact",
- Once as "Merge selected contacts".
This is due to the revision 30a7ef8,
converting the
`<record model="ir.actions.act_window"...`
to an
`<act_window`
which creates an action binding automatically.
No action binding must be created for this window
action, as there is already another one,
the link to this wizard is already in the
partners action menu, thanks to the `act_window`
`action_partner_merge`.
Besides, the `'default_state': 'option'` seems useless,
as this is the default value set in the model directly.
On the opposite, removing the `active_test` (as done in
the revision mentioned above) could be armful. We
therefore re-set it.
opw-669688
When the database_or_uri is not a URI, rather than generate a dsn string
just collect the various psycopg2.connect keyword arguments in a
dictionary, and return that. This way psycopg2/libpq is the one doing
any necessary processing on the various parameters.
Fixes#3865 and fixes#6958 in a more resilient manner than manually
escaping dsn-injected values so database names or passwords containing
spaces or non-ascii characters work correctly.
In case a URI is provided to the dsn() function, return it as the `dsn`
keyword to get the same behaviour as previously.
Since we're checking dsns by equality, a dict should work just as well
as a string.
The algorithm for matching analytic accounts based
on search term is only meant to be used for
simple, positive operators.
In other cases the results will not be what the user
expects. Falling back to the default name_search
behavior will be more useful.
It was like that for the date field, which is taken into account for the forecast quantity,
but in the view the scheduled date field is shown. We put the scheduled date equal to the date.
That way it is clear to the user when the products are foreseen to be consumed.
When a tax with an amount of 0 percent was linked to an invoice line,
this tax didn't appear in the tax details in the bottom of the invoice
report.
opw669162
By calling directly the method `fields.Datetime.now`,
the default order date was the datetime at which
the server is started or the worker created,
while, it should be the current datetime, not
the datetime at which the registry has been
loaded.
opw-668278
The revision 29bd622521
aimed to improve the performance by changing
the view index, to use a BIGINT instead of a text.
It was assumed that the index used
(`stock_move.id`) could not appear
multiple times with the JOINs and
group bys defined.
This was in fact possible, if a
stock move is associated to
several quants with different costs,
because of the JOIN on the many2many table
`stock_quant_move_rel`
linking quants to moves,
and the GROUP BY
`price_unit_on_quant`
that caused the different moves/quants association
not to be merged within one unique line
if the costs on the quants are different.
Instead of the group by, we now aggregate the quants
costs, using the weighted average, so the index
used can be unique, as expected.
From now, the inventory value per line in
this report view can therefore
be different than what can be found on the quants,
but this report view is based on the stock moves
rather than the stock quants, and this is therefore accepted.
In other words, the inventory value is computed for the stock move
rather than for the stock quant.
opw-658903
Ogone responses comes from direct s2s calls or form feedback;
not necessarily in that order. The behaviour of the system should
be the same in both cases. This commit add payment_methode creation
when a s2s response contains the necessary information, juste like
the form feedback methods.
Ideally these methods should be merged to share the same code,
this will be done in master (v10).
In a SO line, the price unit is taken from function "_product_price"
set on the product(model: "product.product"), this is why the variable
new_list_price has to be taken on the product too. In this way, the right
discount can be computed. Before the fix, new_list_price was equal to
the price set on the product template(list_price) then if the product template had
several variants with several sale price, the discount was wrongly computed.
opw:668636