In the method `xml_node_to_string` in `qweb2.js`,
which is used when extending XML templates,
such as this extend of the template `PaymentScreen-Paymentlines`
the method `(new XMLSerializer()).serializeToString(node)`
magically escapes the double quotes `"` in Internet Explorer and Edge,
while this is not the case in other browsers,
therefore converting, for instance,
`this.removeAttr("class");`
to
`this.removeAttr("e;class"e;);`
whhich made the rendering of the template fails.
As this method is quite critical, we do not dare
editing it to use an alternative to `XMLSerializer.serializeToString`
in a stable release
Instead, as a workaround, we just avoid the use of the double
quotes.
opw-708296
- Install accounting module
- Create new tax, keep note of its ID
- Go to Settings > Technical > User-Defined Defaults
- Change the value of 'taxes_id' to the ID of the tax created
- Create a new product => crash
The issue is that the value of 'taxes_id' is saved as a string, not as a
list. Therefore, once retrieved, it crashes.
opw-709906
When deleting an hr_timesheet_sheet.sheet, the linked analytic lines are
dropped too.
This was introduced in 8.0 at 5f45e7ca
The initial bug, reported at #5326, was targeting the analytic lines created
independantly, directly from the timesheet encoding.
In version 8, the timesheets were encoded via project.task.work and the unlink
on the hr_timesheet_sheet.sheet had no effect on the works.
In version 10, this model no longer exists and it needs to be filtered to avoid
removing independant timesheets.
Fixes#15741
Since revision
731356a155
and the fact `mail.mass_mailing.campaign` inherits (with s)
from `utm.source`, and the name of the mass mailing
is took from this `utm.source` linked to the mass mailing,
a mass mailing user requires the write access on the model `utm.source`
to be able to change the subject of a mass mailing.
As a side node, I notice there is no group applied on the
base `access_utm_source` access rule of the module UTM,
meaning a portal user can create `utm.source`.
I am not sure if this is wanted or not.
opw-710525
During installation of demo data and while running tests, the
system should not actually connect to a real SMTP server.
This allows installing new demo/test databases on a system
with no working SMTP server.
Simplifies the code and makes sure we are calling the connect()
method in the same way we do for normal deliveries, and that
all parameters are processed in the same fashion.
When procurements are created, they are automatically run. Avoid this
behavior, to run all procurements at the end of the process and used the
optimized JIT behavior.
opw-710007
When procurements are created, they are automatically run. Avoid this
behavior, to run all procurements at the end of the process and used the
optimized JIT behavior.
opw-710007
Fine tuning of this commit: a7cd820
When clicking on button "Duplicates" it printed "Duplicate + number". Now it prints
" Duplicate invoice + number" if the customer invoice is of type out_invoice.
opw:708440
For the purpose of fighting spam, many abuse/spam-fighting
services provide redacted message IDs. Because we use a UNIX
timestamp as the prefix for all message IDs, a redacted
message ID of the form 1234XXXXX@domain.com is generally
useless to find a `flagged` message's origin, because it
matches most of the messages sent that day.
Narrowing it down with the help of the approximate time
of delivery does not help much, as there will still be
dozens/hundreds of possible matches on a busy server.
By swapping around the random token and the timestamp in
the message ID, we should improve the uniqueness and
"greppability" of our message IDs, once redacted.
Passlib's consteq() function only works when both values are
of the same type.
`_unsubscribe_token` uses hmac.hexdigest() which always returns
byte-strings, so we need to ensure that the token passed in GET
parameters is cast to byte-string too.
In addition, _unsubscribe_token() is expected to always derive
the same token for the same list, res_id and email. It already
takes care of ID passed as strings/int, but failed to make sure
that the email can be passed as a byte-string or unicode-string.
Forcing it to unicode before deriving the token takes care of that.
Make sure the _send() method propagates the provided smtp_session
to benefit from the speedup obtained by avoiding multiple SMTP
sessions.
Cfr 00bd7274c4
Fix some dead code. This is a fallback for linking mail attachment with
its data. The issue was not reported since a long time since this just
disable a fallback which in my tests was not used anyway.
opw-710502
Work around performance issue when sending large mass-mailing:
1. Processing a large email queue would crash with MemoryError.
-> The queue agent will now browsing the emails 1 by 1 during
delivery to avoid filling the memory.
-> The agent will not select more than 10k emails per delivery.
The delivery rate can be increased by waking it more often.
2. Reopening a connection to the SMTP server every time is slow.
-> ir.mail_server.send_email() now accepts an extra `smtp_session`
optional parameter. When passed, that session will be used and will
not be disconnected after the delivery. The queue processing agent
prepares batches of emails to be sent to the same outgoing mail
server, and uses a persistent smtp_session to avoid the multiple
reconnection.
To account for MTA that would refuse to process a large number
of emails in the same session (that should be rare), a system
parameter can be used to set the batch size (default: 1000).
3. As a bonus, the ir.mail_server.connect() method is now
responsible for resolving the actual mail server parameters,
rather than having half of the logic in the send_email() method.
Warning: this commit drops support for "maildir:/" format in
outgoing mail servers hostnames. This feature is deprecated,
unused, untested, and was meant for debugging only.
Add a 3 use cases with tests that were failing before.
datetime filters were not working correctly on stop filters
The `_get_recurrent_date_by_event` was only computing recurrency on the start
field of an event which can make a difference. A recurring event
start=2017-01-01 09:00:00; stop=2017-01-01 10:00:0
was not matched in a search ('stop', '>', '2017-01-01 09:30:00')
The filter != was not handled in the recurring use cases.
e.g. making the search 'start is set' in the web client is equal to
('start', '!=', False)
Searching with only a start filter matching recurring events but not the
first ("real") occurence, was returning no result if no stop filter was present.
start=2017-01-01 09:00:00; count=5
had no result in a search ('start', '>', '2017-01-02')
- Switch order of 'Unread Messages' and 'Won' filters
to group them by relevance
- 'Won' filter does not depend on the state property of
stage, since the 'Won' stage is not folded by default.
The mailing._unsubscribe_token() method expected the record ID
as an integer, but accepted strings and generated a different
token for the string representation of an integer (!)
The unsubscribe controller was passing a string by mistake.
mailing._unsubscribe_token will still expect integers but if
the string representation of an integer is passed it will be
silently cast to an integer, and will generate the same token.
If `product_move` is an empty browse record
`produce_move.product_id.tracking` is `False`, not `none`,
and therefore
`produce_move.product_id.tracking != 'none'` returns True,
and it therefore asked to provide a lot for no reason.
opw-710748
- Install a language different from English, set it to your user
- Merge two opportunities
The merge message which summarizes the operation contains the name of
the fields in English.
opw-708381
When clicking on button "Invoices"(below "Print") on a refund
customer invoice, it prints "Refund + number". But when clicking
on button "Duplicates" it printed "Duplicate + number". Now it prints
" Duplicate refund + number" if the customer invoice is of type out_refund.
opw:708440
To reproduce:
- Get a slow connection, e.g. activate throttling in debug mode of the
browser.
- Create an invoice with at least one tax.
- Change a price unit.
- Click on 'Save' then repeatedly on 'Validate'
The tax lines are duplicated.
The issue comes from two identical `write` calls whose purpose is to
delete the existing tax line and create a new tax line.
The two calls are issued by the click on 'Save' and the click on
'Validate', which triggers a 'Save' since it doesn't consider the form
as being saved yet.
There were several issues:
- The buttons from the statusbar were not disabled
- The buttons were enabled too soon. They should be enabled again when
the form is reloaded, otherwise the call to 'Validate' doesn't
consider the form saved.
This is an extension of commit
https://github.com/odoo/odoo/commit/bbbf3db581b5cf883
opw-710642
Abandoned carts are those with lines, not linked to public user, still
in draft mode and having more than one hour of lifetime.
By the way imp typo, abandonned abandoned one n.
Steps to reproduce the bug:
1.Create a new company
2.Set a user in this company
3.Go to Helpdesk > All tickets > Create
It raised a traceback because stage_id was not defined
opw:710084
IE 11.0 doesn't support `Childnode.remove`:
http://caniuse.com/#feat=childnode-remove
As a workaround, we use `Node.removeChild`,
which is more widely supported.
opw-710617
The current user was used to generate the sitemap. So if a user with
more permissions than `public user` goes on the sitemap, he could
generate it (if he is the first to see it or the last generation was
more than 12 hours ago (by default)) and have pages unavailables for
a user with lower permission in the sitemap (until the sitemap is
generated again).
The issue was solved in 8.0 with d08facdcb but was introduced back in
10.0 with fd09ddb6f because the `uid` argument was dropped from
`generate` method on `ModelConverter`.
Ths fix add the `uid` parameter back.
opw-708456
Add a new button to generate the ISR and remove the "double generation" of reports on 'Print invoice' button. This modification brings the code back to its original version and hence fixes the javascript bugs that occured with less than 3 workers running on the server and with Google Chrome when triggering multiple downloads simultaneously.
[ADD] account
Add a identifier to the 'register payment' button in order to reference it more easily and add the 'Print ISR' next to it.
[FIX] l10n_ch
The module did not install itself anymore, an import was missing.
Report generation was crashing due to a function's suppression.
When a backorder is created from an outgoing picking, a message is posted,
linking to the related sale orders as source of the original picking.
If the initial picking was not created from a sale, the resulting backorder
group was `False`.
The domain ('procurement_group_id', '=', False) matches many unrelated
(e.g. unconfirmed) sale orders.
Avoid trying to find the origin SO for pickings with no SO
Closes#15693
The file
`/web/static/src/js/services/session.js`
is not required for the livechat to works,
and with it it fails on external websites because it makes
RPC calls to the relative URLs:
`/web/webclient/bootstrap_translations`
`/web/webclient/qweb`
opw-710049
Closes#15518
- Create a SO with a new product configured as service, Track Service
"Create task and create hours" and link to "Internal - GAP Analysis".
- Confirm the SO
- Add a new line for the same product in the SO and save
A Odoo Server Error (Validation Error) appears "Error, a partner cannot
follow twice the same object"
It seems that the value of the related field `res_model` is not
correctly computed in the cache. As a workaround, we can use the
`res_model_id`.
Courtesy of @mart-e
opw-709790
Fixes#15589
7544c22de9 refactored the handling of
exchange rate entries when unreconciling entries.
However it did not preserve the piece of code that prevented loops
during this operation (`full_rec_lookup` context key).
This could cause the unreconciliation of entries with an exchange rate
difference to fail with a confusing error claiming that the user is
trying "to reconcile some entries that are already reconciled!".
The double reconciliation was caused by a recursive attempt to reverse
the exchange rate entry.
The current user was used to generate the sitemap. So if a user with
more permissions than `public user` goes on the sitemap, he could
generate it (if he is the first to see it or the last generation was
more than 12 hours ago (by default)) and have pages unavailables for
a user with lower permission in the sitemap (until the sitemap is
generated again).
The issue was solved in 8.0 with d08facdcb but was introduced back in
10.0 with fd09ddb6f because the `uid` argument was dropped from
`generate` method on `ModelConverter`.
From 10.0 up to saas-14 the fix introduced is to use a `use_public_user`
key in `request.context` but in master we will keep the fd09ddb6f fix
by adding uid to the `generate` method.
opw-708456
note: to forward-port only up to saas-14
Up to now, it opened the lead form view instead
of the opportunity form view.
Most-likely, a new / lead should be added to
the dashboard in addition to the new opp,
as this is the case with the view lead/opportunity
but it doesn't seem it was expected up to now
so I leave it like it is.
opw-710583