8 changed files with 270 additions and 0 deletions
@ -0,0 +1,25 @@ |
|||
{ |
|||
'name' : 'POS Change Table', |
|||
'version': '1.0', |
|||
'category': 'POS', |
|||
'summary': "Change Table of Order in POS ", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'description': """ |
|||
|
|||
|
|||
======================= |
|||
|
|||
|
|||
""", |
|||
'depends': ['point_of_sale', 'pos_restaurant','base'], |
|||
'data': [ |
|||
'template.xml' |
|||
], |
|||
|
|||
'qweb': [ |
|||
"static/src/xml/table_change.xml", |
|||
], |
|||
'installable': True, |
|||
} |
After Width: | Height: | Size: 40 KiB |
@ -0,0 +1,17 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Change Table in POS</h2> |
|||
<h3 class="oe_slogan"></h3> |
|||
<div> |
|||
<p class='oe_mt32'> |
|||
This module allows you to change Table of an order from one to another by using 'change table' button in POS without cancelling the order. |
|||
</p><p> |
|||
</p> |
|||
</div> |
|||
<div class="oe_row_img oe_centered oe_mt32"> |
|||
<div class= oe_picture oe_screenshot"> |
|||
<img src="change_table.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
@ -0,0 +1,97 @@ |
|||
.pos .clientlist-screen .deliveryperson-list{ |
|||
font-size: 16px; |
|||
width: 100%; |
|||
line-height: 40px; |
|||
} |
|||
.pos .clientlist-screen .deliveryperson-list th, |
|||
.pos .clientlist-screen .deliveryperson-list td { |
|||
padding: 0px 8px; |
|||
} |
|||
.pos .clientlist-screen .deliveryperson-list tr{ |
|||
transition: all 150ms linear; |
|||
background: rgb(230,230,230); |
|||
} |
|||
.pos .clientlist-screen .deliveryperson-list thead > tr, |
|||
.pos .clientlist-screen .deliveryperson-list tr:nth-child(even) { |
|||
background: rgb(247,247,247); |
|||
} |
|||
.pos .clientlist-screen .deliveryperson-list tr.highlight{ |
|||
transition: all 150ms linear; |
|||
background: rgb(110,200,155) !important; |
|||
color: white; |
|||
} |
|||
.pos .clientlist-screen .deliveryperson-list tr.lowlight{ |
|||
transition: all 150ms linear; |
|||
background: rgb(216, 238, 227); |
|||
} |
|||
.pos .clientlist-screen .deliveryperson-list tr.lowlight:nth-child(even){ |
|||
transition: all 150ms linear; |
|||
background: rgb(227, 246, 237); |
|||
} |
|||
|
|||
.floor-map .table .time-value { |
|||
position: absolute; |
|||
text-align: center; |
|||
background: blue; |
|||
margin-top: 5px; |
|||
height: 20px; |
|||
line-height: 20px; |
|||
border-radius: 1px; |
|||
font-size: 16px; |
|||
z-index: 10; |
|||
top: 8px; |
|||
left: 16px; |
|||
width: 70px; |
|||
} |
|||
.floor-map .table .round-time { |
|||
|
|||
top: 50px !important; |
|||
left: 70px !important; |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
.floor-map .table .order-value { |
|||
position: absolute; |
|||
text-align: center; |
|||
background: #0D823C; |
|||
margin-top: -50px; |
|||
margin-left: -10px; |
|||
height: 17px; |
|||
line-height: 17px; |
|||
border-radius: 10px; |
|||
z-index: 10; |
|||
left: 0px; |
|||
right: 0; |
|||
font-size: 12px; |
|||
margin: 0 12px; |
|||
bottom: 26px; |
|||
|
|||
} |
|||
.floor-map .table .round-value { |
|||
height: 20px !important; |
|||
margin: 0 55px !important; |
|||
line-height: 20px !important; |
|||
bottom: 65px !important; |
|||
} |
|||
|
|||
|
|||
.floor-map .table .labels { |
|||
display: block; |
|||
max-height: 100%; |
|||
overflow: hidden; |
|||
position: relative; |
|||
bottom: 4px; |
|||
z-index: 5; |
|||
} |
|||
.pos .order-button.change-floor-button .fa { |
|||
font-size: 24px; |
|||
} |
|||
.pos .order-button.change-floor-button { |
|||
font-weight: bold; |
|||
font-size: 16px; |
|||
min-width: 128px; |
|||
padding-left: 16px; |
|||
padding-right: 16px; |
|||
} |
@ -0,0 +1,105 @@ |
|||
odoo.define('pos_change_table.floors', function (require) { |
|||
"use strict"; |
|||
var chrome = require('point_of_sale.chrome'); |
|||
var gui = require('point_of_sale.gui'); |
|||
var models = require('point_of_sale.models'); |
|||
var screens = require('point_of_sale.screens'); |
|||
var core = require('web.core'); |
|||
var QWeb = core.qweb; |
|||
var floor = require('pos_restaurant.floors'); |
|||
|
|||
// We need to modify the OrderSelector to hide itself when we're on
|
|||
// the floor plan
|
|||
chrome.OrderSelectorWidget.include({ |
|||
change_floor_button_click_handler: function(){ |
|||
this.pos.change_table = true; |
|||
this.pos.previous_order_id = this.pos.get_order(); |
|||
this.pos.set_table(null); |
|||
|
|||
}, |
|||
renderElement: function(){ |
|||
var self = this; |
|||
this._super(); |
|||
if (this.pos.config.iface_floorplan) { |
|||
if (this.pos.get_order()) { |
|||
if (this.pos.table && this.pos.table.floor) { |
|||
this.$('.orders').prepend(QWeb.render('ChangeFloorButton')); |
|||
this.$('.change-floor-button').click(function(){ |
|||
self.change_floor_button_click_handler(); |
|||
}); |
|||
} |
|||
this.$el.removeClass('oe_invisible'); |
|||
} else { |
|||
this.$el.addClass('oe_invisible'); |
|||
} |
|||
} |
|||
}, |
|||
}); |
|||
|
|||
// We need to change the way the regular UI sees the orders, it
|
|||
// needs to only see the orders associated with the current table,
|
|||
// and when an order is validated, it needs to go back to the floor map.
|
|||
//
|
|||
// And when we change the table, we must create an order for that table
|
|||
// if there is none.
|
|||
var _super_posmodel = models.PosModel.prototype; |
|||
|
|||
models.PosModel = models.PosModel.extend({ |
|||
initialize: function(session, attributes) { |
|||
this.change_table = false; |
|||
this.previous_order_id= false; |
|||
return _super_posmodel.initialize.call(this,session,attributes); |
|||
}, |
|||
|
|||
// changes the current table.
|
|||
|
|||
set_table: function(table) { |
|||
if (this.change_table){ |
|||
if (!table) { // no table ? go back to the floor plan, see ScreenSelector
|
|||
this.set_order(null); |
|||
} |
|||
else { |
|||
this.previous_order_id.table = table; |
|||
this.change_table = false; |
|||
// table ? load the associated orders ...
|
|||
this.table = table; |
|||
var orders = this.get_order_list(); |
|||
if (orders.length) { |
|||
this.set_order(orders[0]); // and go to the first one ...
|
|||
} else { |
|||
this.add_new_order(); // or create a new order with the current table
|
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
else{ |
|||
_super_posmodel.set_table.apply(this,arguments); |
|||
} |
|||
|
|||
|
|||
|
|||
if (!table) { // no table ? go back to the floor plan, see ScreenSelector
|
|||
this.set_order(null); |
|||
} |
|||
else { |
|||
if(this.change_table){ |
|||
this.previous_order_id.table = table; |
|||
this.change_table = false; |
|||
} |
|||
// table ? load the associated orders ...
|
|||
this.table = table; |
|||
var orders = this.get_order_list(); |
|||
if (orders.length) { |
|||
this.set_order(orders[0]); // and go to the first one ...
|
|||
} else { |
|||
this.add_new_order(); // or create a new order with the current table
|
|||
} |
|||
|
|||
} |
|||
}, |
|||
|
|||
|
|||
}); |
|||
|
|||
}); |
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="template" xml:space="preserve"> |
|||
|
|||
|
|||
<t t-name="ChangeFloorButton"> |
|||
<span class="order-button change-floor-button"> |
|||
<i class='fa fa-angle-double-left'/> |
|||
<span class='table-name'> |
|||
Change Table |
|||
</span> |
|||
</span> |
|||
</t> |
|||
|
|||
|
|||
|
|||
</templates> |
@ -0,0 +1,10 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<template id="assets" inherit_id="point_of_sale.assets"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/pos_change_table/static/src/js/floors.js"></script> |
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</openerp> |
Loading…
Reference in new issue