Can use 'add' or 'remove' on attribute tag.
'add' values are stripped and add to the current value preceded with a space.
'remove' may contain more than one value separate by spaces.
'separator' by default space the string are splited by spaces.
E.g.:
<attribute name="thing">bob tata lolo</attribute>
<attribute name="thing" add="bibi" remove="tata"/>
thing contains: bob lolo bibi
- GMail caches the images contained in emails
- It seems to take the opportunity to replace `%20` by `+` in the images URLs
- Werkzeug doesn't seem to handle '+' in URL as spaces (at least not as a %20)
(See https://github.com/mitsuhiko/werkzeug/pull/756)
When inserting a fontawesome character/image,
there are spaces in the CSS color,
e.g. `rgb(255, 255, 255)`.
And window.encodeURI, doing its job, encode this as
`rgb(255,%20255,%20255)`
This, in the URL, is supported by Werkzeug.
However, Google changes this to
`rgb(255,+255,+255)`
which is not supported by Werkzeug.
The fontawesome images were therefore not available in
mass mailing sent to GMail addresses.
This revision removes the spaces from the CSS color.
This is not the best fix, but
- We cannot really ask Google to not change %20 by +
- We cannot afford to wait the support of the '+' as spaces in Werkzeug
opw-648456
Written in the new API even though the rest is in the old API, because otherwise we'd have to add an onchange in the views which may be a problem for existing custom modules.
We want this behavior because previously, in some cases the default values were only added at create() time, ie. possibily when the users close the pop-up, so they may never have an opportunity to see and adjust the default.
This rev. is related to 1c533b193f
The reason why we force the event Google internal id is
explained in the above commit.
Forcing the internal id must be done only when creating the
event in Google, not when updating, for retro-compatibility:
if the event is already in the attendee calendar, with a different
internal id then the other attendee, we must leave it like this,
otherwise Google will be lost.
This rev. is related to a9e3d74713
This new revision is about the same use case than above, except
that both Google users login doesn't match the Odoo login email.
e.g.
User A: A@agrolait.com in Odoo, A@gmail.com in Google
User B: B@agrolait.com in Odoo, B@gmail.com in Google.
When A creates an event, with B in the attendees, and
syncs his calendar to Google, B is not automatically invited
Google side, as his attendee email is B@agrolait.com, which
doesn't match any existing Google User (doesn't match B@gmail.com)
While the revision mentioned above, a9e3d74713,
expected the attendee to be automatically invited Google side, and therefore
expected the event to already exists in B's calendar.
Therefore, when B syncs his calendar in Odoo, as the event
was there in his Odoo calendar, but not in his Google Calendar,
the code actually think it's no - longer - there, and take the assumption
the event has been deleted Google side. So, it deletes the event
in Odoo side as well, for both users A & B.
To overcome this new issue, when the Google & Odoo users emails
do not match, while keeping the compatibility when the Google & Odoo
emails do match (and therefore the invitation is automatically sent
Google side, as the email matches an existing Google account, and
the event is automatically created in B's calendar without needing the
sync in Odoo), we now force the Google internal id to be the same
for all attendees of an event, event by Google side.
opw-645745
Old code was searching at the same time the xmlid with and without the module
name. But if a file contains a template for his module (without prefix module
name) and a template with the same name for an other template, the node which
are returned canbe the bad template.
Eg: in the same file from an other module than website
<template id="test">
...
</template>
<template id="website.test">
...
</template>
If you are looking for template website.test, the old code was returning the first
"test" instead of "website.test".
Now we look for the more precise xml_id (website.test), before to fallback on the
implicit name (test = without module name).
The risk was introduced by b7f1b9c.
IF _store_set_values() recall another _create() or _write(),
the recomputation mechanism enter in an infinite recursion
trying to reevaluate for each call exactly the same fields
for the same records than the previous one
This revision replaces the loop of _store_set_values()
by 2 nested loops:
- that not breaks the entire consumption
of recompute_old queue
(Tested thanks to revision a922d39),
- that allows to clear the queue
before each recomputations bundle fixing thereby the recursion
Closes#7558
`hr_timesheet_invoice.py` overrides `on_change_account_id`
of model `hr.analytic.timesheet`.
The super call wasn't done, probably because this on_change
method in the base model was trivial:
`return {'value':{}}`
Nevertheless, if another module overrides this on_change,
according to the module dependences,
this method could have been called first in the calling chain,
discarding the changes from the other overriden
`on_change_account_id` methods, preventing
any customization in this on_change according to the
current database state.
Closes#8248
Force fa size to 14px, to avoid that themes which change body size,
change the fa snippet icon size and display it on severals lines.
Add text 'Snippets are loading' while snippets template is downloading.
When we export a recurring event, there was an error since there is
virtual ids (like '{real_id}-{date_of_the_event}').
Events steming from a recurring events are in fact shown virtually. In
the database there is really only one event and a suffix is appended to
the id to target a given instance of a recurring event.
If we want to separate a recurring event from the instances, we can edit
the instance and use the link "Update only this instance", once done
this instance is separated for the recurring event.
This commit if one or more recurring events instances are selected when
an export is done, will only export one source event of each of the
events occurences.
fixes#7932closes#8262
opw-647676
Regarding _schedule_days, similar thing was done in
saas-6, @ fd5e7f2.
When the argument `days` was negative, the
returned intervals were wrong.
Regarding `get_working_intervals_of_day`,
calling this method without
`default_interval` and calendar
set crashed.
Closes#8208
Escape the currency symbol to prevent javascript errors,
for instance when reconciling a bank statement
(with the special reconciliation widget)
Closes#8216
Escape text nodes changed via the web editor before sending the content
it to the server controller.
It is done since the content is unescaped one time when being displayed,
and it is not done for inline style and script tags (which may be
injected by dropping a snippet) since that would break them.
replacing the solution in cdb900044.
When clicking on the button "Refresh Challenge" in the "gamification.challenge"
view form, all the "gamification.goal" records linked to this challenge must
be updated.
opw:647983
In bank statement reconciliation, when selecting an other partner(with the pencil),
the possible invoices to reconcile must be suggested.
opw:647210, 647885