With a recent change in web client, the point of sale could not load
anymore, because the web_client code tried to call this.menu.reflow(),
but point of sale overrided the show_application, and this.menu is not
even instantiated.
Since the point of sale actually want a barebone web client, instead of
using the full web client, removing some of its features, and then
fixing the problems each time a change in web_client breaks it, this commit
ensure that the point of sale is started with just what it needs
By putting the shortcuts lowercase, it is easier to remember and to user.
Instead of Alt + Shift + letter, we have Alt + letter for Windows and Linus users
Instead of Control + Alt + Shift + letter, we have Control + Alt + letter for mac users
The combinations Alt + d and Alt + e are reserved to the browsers, so other letters are chosen
for these actions
- Merge debug mode in dev mode.
- Allow to select dev feature ony by one
--dev=all will active all dev tool
--dev=
xml will read template in xml file and not in db
if not updated meanwhile
reload Add a watcher to reload the server if python code is modified
qweb Allow to add t-debug in template qweb
werkzeug Active the werkeug debugger console when an exception is raised
(i)p(u)db Allow to break before that the error is raised (old --debug mode)
To NEVER uses in production, since it give a console access in frontend.
2dcbdd0778 forward-ported
534ff9dd8c from 9. In master however I
have recently decided (bbaf956328) to
remove this field and use the standard active field instead.
Lines have to be wrapped manually as nor the ESC/POS protocol, nor the
hw_escpos module will do it for us. Before this long product names where
truncated to 24 characters by hw_escpos.
This wraps the product names using available spaces in the product
name. A product name with > 24 continuous characters will still be
truncated.
The new model is now the following:
- each recordset is attached to a prefetch object: records._prefetch
- the prefetch object associates model names to record ids to prefetch:
ids = records._prefetch[model_name]
- a call to model.browse(ids) returns a recordset with a new prefetch object
- the prefetch object is passed and populated by
- iteration
- access of relational field
- with_env(), sudo(), with_context()
Make the following statements add secondary records (values of relational fields)
in the prefetching object of ``self``:
self.read(fields)
self.partner_id # implicitly invokes read()
This makes sure that traversing relational fields on records automatically
feeds the prefetching of secondary records.
The prefetching now has a more intuitive and controllable model: every
recordset is linked to a "prefetch object" that tells which record ids to
prefetch for any model. The prefetch object of a given recordset is shared
with the records obtained by iteration and relational field access. All other
operations instantiate recordsets with a fresh prefetch object.
records = model.browse(ids)
assert records._prefetch is not model._prefetch
for record in records:
assert record._prefetch is records._prefetch
assert record.relation._prefetch is record._prefetch
The cache data format has been split between a cache format and a record format
(returned by accessing a field on a record). We have the following converters:
ANY FORMAT
|
| convert_to_cache
v
CACHE FORMAT
|
| convert_to_record
v
RECORD FORMAT
|
| convert_to_read
| convert_to_write
| convert_to_onchange
| convert_to_export
| convert_to_display_name
v
OTHER FORMATS
Modify the API of the converter methods to make them uniform (pass value and
record), and adapt their documentation.
Since rev. 002660a9, form views are instantiated with their fields_view. This
had an impact in FormViewDialog as the inner form view instantiation was made
asynchronous. Unfortunately, an event handler was set on this form view in the
chatter, and it produced a traceback as the form view wasn't instantiated yet.
When opening a record from a list view, the Edit button in the control panel
sometimes bounced. This was because we listened to event 'mouseup', and
astonishingly, the 'mouseup' event of the click in the list view was catched
by the form view.
The reason why we listened to 'mouseup' instead of 'click' is that some
widgets need the event to be propagated to the body. So this fix simply makes
the form view listen to 'click' instead of 'mouseup', but removes the call to
stopPropagation() on the catched event.
Use 'display: none' instead of 'visible: hidden' for the config button in
columns' header so that the columns' title can take full width if that button
is hidden.
Bonus: if the config dropdown is open, the button remains visible.
With the pricelist, it is possible to define a pricelist just for
a variant. But in the product.product.form, only the pricelist items
linked to the product template could be displayed.
The field item_ids has been created in product.product model to display
all the pricelist applied on a product.
opw:674700
When a PO is created from a reordering rule, we should make sure to use
the purchase UoM of the product. Any PO line automatically created or
modified will be a PO line in the purchase UoM.
opw-673309
For the partner ledger report, since LEFT JOIN are used in the request
we could get NULL values which broke the following code.
note: issue reported on 7c6c188
Commit 3b19fa426b fixed a bug where the column title of kanban group
was overflowing its area when too long. However, when the column is
folded, the title is now really small (width of the folded column)
and then stopped to add the "..." ellipsis.
The solution is to let the text overflow when the column is folded.
As noted in the csv module documentation*, up to python 2.7 it is best
to used UTF-8 as input (and worst to use UTF-16 csv).
closes#11792
opw-674756
* https://docs.python.org/2/library/csv.html