For example: https://abc.def:8080
It is already allowed for the printer in main point_of_sale module.
Apply the same schemes in pos_restaurant.
Closes#13769
When the kitchen ticket is printed, the order lines appear jumbled in
comparison to what is displayed on the PoS interface. This is an issue
since the kitchen cannot link main and side dishes for a given guest.
For example, the following order:
- Steak
- Fries
- Salmon
- Pasta
- Chicken
- Salad
On the kitchen ticket, this could appear as:
- Salmon
- Salad
- Chicken
- Steak
- Fries
- Pasta
The order actually depends on the product id.
The fix is to use the order line id instead of the product id in the
resume dictionary. Although a dictionary is an unordered collection,
most browsers keep the dictionary ordered. For example:
```
var a = {"18": "18", "1": "1", "21": "21", "14": "14"};
for(var i in a) { console.log(i) };
1
14
18
21
```
opw-680796
- Current pos restaurant with offline mode, when you delete the table from
floor screen, it would stop everything (you won't be able to create an order
further) untill your server start again, that is not good indeed.
Instead we should show the error popup, just like you will get when you click
on '+' for adding a new table on offline mode.
- Slightly improve the other relevant warning messages.
- Only pos managers can edit the floor screen.
Before this pos user were allowed to access the edit button (pencil
icon on floor screen), but they could never update the table detail
as lack of permission so in this we have prohibited the pos user
from accessing an edit button(pencil icon).
Before this the table edit handles where quite small. This was no
problem when editing a floor layout with a mouse or perhaps with a
stylus on a touchscreen. It was however very difficult to do with your
finger on a touchscreen.
This increases the size of the handles by a factor of 3. To make room
for this the 4 handles on the sides (non-corner ones) have been removed
on square tables since you can technically do any operation you want
with just the corner handles. The only functionality we lose is resizing
a table while constraining it's width/height, but if such fine grained
control is needed then the tables can still be edited in the backend.
pos_restaurant creates temporary orders when splitting the bill. This
ensures those are never saved to persistent storage. As soon as the user
clicks on the pay button, the order is not considered temporary anymore
and will be saved.
Closes#10767Fixes#10350
opw-666141
When overriding a method that calls its super later on, it's important
that arguments is used to correctly pass all arguments to the super.
Consider the following:
// module 1 (not correct)
method: function(a) {
return _super.call(this, a);
}
// module 2 (correct)
method: function(a, b) {
return _super.apply(this, arguments);
}
If the method of module 1 gets called first it will throw away the b
argument when it calls _super. Therefore the b argument will never
arrive in method of module 2.
On iOS (at least version 8.3 and up), both Chrome (at least 47 and up)
and Safari emit ghost clicks [1] that added the product normally
rendered under the table widget to the order. So when selecting a table
without any orders you would end up with the table selected, and the
product under the table in the order after just tapping the table.
The issue is that on the table selection screen we listen to touchend
events. On the product selection screen we listen to click
events. Mobile browsers will usually emit both, first the touchend
event, then a small delay, and then the click event. The small delay is
platform dependent. Also, depending on a bunch of circumstances,
browsers adjust this delay time (see [1] for more info).
On Android this never caused issues because there the click is fired
pretty fast after the touchend and more importantly, the click event
still has the table widget as it's target. We don't listen to click on
the table widget so it gets correctly ignored.
On iOS there is a longer delay, and the click event is emitted with
whatever target is currently under the coordinates of the click.
In order to stop this from happening we'll just bind to click when not
editing. When we are editing the floor layout we'll do what we did
before.
We also bind to dragend because on touch devices it is sometimes not
easy to click, especially on small elements. You have to touch and
release the screen without moving your finger. Because the table
selection screen hides overflow there are no downsides to doing this,
and it makes selecting a table much easier and less likely to fail due
to accidental dragging.
Calling preventDefault on the touchend event is another option but did
not work on Android running Firefox 43.
[1] http://ariatemplates.com/blog/2014/05/ghost-clicks-in-mobile-browsers/
Before this the only thing that would ever be printed was 'Guests: ',
because it was only added when receipt.customer_count evaluated to
false. Another issue is that receipt.customer_count doesn't exist in the
point_of_sale module. It is created by pos_restaurant, so there's where
it should be added to the receipt.
Before this, transferring an order to a table which already contains an
order triggered the change on the order already on the table, Not the newly
transferred order. This fixes that by instead explicitly calling
save_to_db() on the transferred order instead.
On square tables we graphically display how many people are currently on
the table by making part of the table on the floor screen darker. On
round tables we didn't do this.
Replace deprecate controllers like /web/binary/image, /web/binary/saveas...
Use ETag for all content with 'unique' option to cache the content if the content is never changed.
Commit 0fd51c2e6 changed the unit rounding from units from 1 to 0.001,
it was done mainly because it's the default unit and in the interface we
see quantities with 3 decimals after the floating point, so people might
expect to be able to set floating point quantities.
This change caused an issue when splitting a bill in the pos restaurant,
instead of a click being a piece of the product, it was 0.001 part of a
product.
This fix overrides the rounding of units in this case.
closes#6780
opw-639865
The module system needs to know the dependencies of a given module
before executing the function. This is why the dependencies were
defined once in an array, and then were described one more times in the
call to require.
But a trick can simplify this: the boot function can parse the string
representation of the module and extract the calls to require from it.
It is more work for the processor, but it leads to simpler module
definitions.