[WIP] point_of_sale, pos_discount: action buttons + adapt the pos_discount code after pos refactor

This commit is contained in:
Frédéric van der Essen
2014-12-31 15:34:32 +01:00
parent f56693279c
commit c1eb6d608c
3 changed files with 78 additions and 21 deletions
@@ -794,6 +794,49 @@ openerp.point_of_sale.load_screens = function load_screens(instance, module){ //
},
});
/* -------- The Action Buttons -------- */
// Above the numpad and the actionpad, buttons
// for extra actions and controls by point of
// sale extensions modules.
module.action_button_classes = [];
module.define_action_button = function(classe, options){
options = options || {};
var classes = module.action_button_classes;
var index = classes.length;
if (options.after) {
for (var i = 0; i < classes.length; i++) {
if (classes[i].name === options.after) {
index = i + 1;
}
}
} else if (options.before) {
for (var i = 0; i < classes.length; i++) {
if (classes[i].name === options.after) {
index = i;
break;
}
}
}
classes.splice(i,0,classe);
};
module.ActionButtonWidget = module.PosBaseWidget.extend({
template: 'ActionButtonWidget',
label: _t('Button'),
renderElement: function(){
var self = this;
this._super();
this.$el.click(function(){
self.button_click();
});
},
button_click: function(){},
});
/* -------- The Product Screen -------- */
module.ProductScreenWidget = module.ScreenWidget.extend({
@@ -824,6 +867,20 @@ openerp.point_of_sale.load_screens = function load_screens(instance, module){ //
product_list_widget: this.product_list_widget,
});
this.product_categories_widget.replace(this.$('.placeholder-ProductCategoriesWidget'));
this.action_buttons = {};
var classes = module.action_button_classes;
for (var i = 0; i < classes.length; i++) {
var classe = classes[i];
if ( !classe.condition || classe.condition.call(this) ) {
var widget = new classe.widget(this,{});
widget.appendTo(this.$('.control-buttons'));
this.action_buttons[classe.name] = widget;
}
}
if (_.size(this.action_buttons)) {
this.$('.control-buttons').removeClass('oe_hidden');
}
},
click_product: function(product) {
@@ -93,6 +93,12 @@
<div>There are pending operations that could not be saved into the database, are you sure you want to exit?</div>
</t>
<t t-name="ActionButtonWidget">
<div class='control-button'>
<t t-esc='widget.label' />
</div>
</t>
<t t-name="ActionpadWidget">
<div class="actionpad">
<button class='button set-customer'>
+15 -21
View File
@@ -5,30 +5,24 @@ openerp.pos_discount = function(instance){
QWeb.add_template('/pos_discount/static/src/xml/discount.xml');
module.PosWidget.include({
build_widgets: function(){
var self = this;
this._super();
if(!this.pos.config.discount_product_id){
return;
module.DiscountButton = module.ActionButtonWidget.extend({
template: 'DiscountButton',
button_click: function(){
var order = this.pos.get_order();
var product = this.pos.db.get_product_by_id(this.pos.config.discount_product_id[0]);
var discount = - this.pos.config.discount_pc/ 100.0 * order.get_total_with_tax();
if( discount < 0 ){
order.add_product(product, { price: discount });
}
var discount = $(QWeb.render('DiscountButton'));
discount.click(function(){
var order = self.pos.get_order();
var product = self.pos.db.get_product_by_id(self.pos.config.discount_product_id[0]);
var discount = - self.pos.config.discount_pc/ 100.0 * order.get_total_tax_included();
if( discount < 0 ){
order.add_product(product, { price: discount });
}
});
discount.appendTo(this.$('.control-buttons'));
this.$('.control-buttons').removeClass('oe_hidden');
},
});
module.define_action_button({
'name': 'discount',
'widget': module.DiscountButton,
'condition': function(){
return this.pos.config.discount_product_id;
},
});
};