[MERGE] from stw
authorFrédéric van der Essen <fva@openerp.com>
Tue, 21 Aug 2012 12:11:23 +0000 (14:11 +0200)
committerFrédéric van der Essen <fva@openerp.com>
Tue, 21 Aug 2012 12:11:23 +0000 (14:11 +0200)
bzr revid: fva@openerp.com-20120821121123-ingbtoedurmt6h48

addons/point_of_sale/point_of_sale.py
addons/point_of_sale/point_of_sale_view.xml
addons/point_of_sale/static/src/js/models.js
addons/point_of_sale/static/src/js/screens.js
addons/point_of_sale/static/src/js/widgets.js

index 414ff1c..f4d3298 100644 (file)
@@ -60,11 +60,9 @@ class pos_config(osv.osv):
              help="Accounting journal used to post sales entries."),
         'iface_self_checkout' : fields.boolean('Self Checkout Mode',
              help="Check this if this point of sale should open by default in a self checkout mode. If unchecked, OpenERP uses the normal cashier mode by default."),
-        'iface_led' : fields.boolean('Help Notification'),
         'iface_cashdrawer' : fields.boolean('Cashdrawer Interface'),
         'iface_payment_terminal' : fields.boolean('Payment Terminal Interface'),
         'iface_electronic_scale' : fields.boolean('Electronic Scale Interface'),
-        'iface_barscan' : fields.boolean('BarScan Interface'), 
         'iface_vkeyboard' : fields.boolean('Virtual KeyBoard Interface'),
         'iface_print_via_proxy' : fields.boolean('Print via Proxy'),
 
index c45cedb..6487eeb 100644 (file)
                         <group string="Material Interfaces" >
                             <group>
                                 <field name="iface_self_checkout" />
-                                <field name="iface_led" />
                                 <field name="iface_cashdrawer" />
                                 <field name="iface_payment_terminal" />
                             </group>
                             <group>
                                 <field name="iface_electronic_scale" />
-                                <field name="iface_barscan" />
                                 <field name="iface_vkeyboard" />
                                 <field name="iface_print_via_proxy" />
                             </group>
index 03e37b8..a1f6def 100644 (file)
@@ -28,12 +28,6 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
             this.db = new module.PosLS();                       // a database used to store the products and categories
             this.db.clear('products','categories');
 
-            // pos settings
-            this.use_scale              = false;
-            this.use_proxy_printer      = false;
-            this.use_virtual_keyboard   = false;
-            this.use_barcode_scanner    = false;
-
             // default attributes values. If null, it will be loaded below.
             this.set({
                 'nbr_pending_operations': 0,    
@@ -54,6 +48,8 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
                 'taxes':            null,
                 'pos_session':      null,
                 'pos_config':       null,
+                'units':            null,
+                'units_by_id':      null,
 
                 'selectedOrder':    undefined,
             });
@@ -63,10 +59,9 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
             // We fetch the backend data on the server asynchronously. this is done only when the pos user interface is launched,
             // Any change on this data made on the server is thus not reflected on the point of sale until it is relaunched. 
 
-            var user_def = fetch('res.users',['name','company_id'],[['id','=',this.session.uid]]) 
+            var loaded = fetch('res.users',['name','company_id'],[['id','=',this.session.uid]]) 
                 .pipe(function(users){
-                    var user = users[0];
-                    self.set('user',user);
+                    self.set('user',users[0]);
 
                     return fetch('res.company',
                     [
@@ -79,147 +74,109 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
                         'phone',
                         'partner_id',
                     ],
-                    [['id','=',user.company_id[0]]])
+                    [['id','=',users[0].company_id[0]]]);
                 }).pipe(function(companies){
-                    var company = companies[0];
-                    self.set('company',company);
-                    fetch('res.partner',['contact_address'],[['id','=',company.partner_id[0]]])
-                        .then(function(partner){
-                            company.contact_address = partner[0].contact_address;
-                        });
-                    return fetch('res.currency',['symbol','position'],[['id','=',company.currency_id[0]]]);
-                }).pipe(function (currencies){
-                    self.set('currency',currencies[0]);
-                });
+                    self.set('company',companies[0]);
+
+                    return fetch('res.partner',['contact_address'],[['id','=',companies[0].partner_id[0]]]);
+                }).pipe(function(company_partners){
+                    self.get('company').contact_address = company_partners[0].contact_address;
 
+                    return fetch('res.currency',['symbol','position'],[['id','=',self.get('company').currency_id[0]]]);
+                }).pipe(function(currencies){
+                    self.set('currency',currencies[0]);
 
-            var uom_def = fetch(    //unit of measure
-                'product.uom',
-                null,
-                null
-                ).then(function(result){
-                    self.set({'units': result});
+                    return fetch('product.uom', null, null);
+                }).pipe(function(units){
+                    self.set('units',units);
                     var units_by_id = {};
-                    for(var i = 0, len = result.length; i < len; i++){
-                        units_by_id[result[i].id] = result[i];
+                    for(var i = 0, len = units.length; i < len; i++){
+                        units_by_id[units[i].id] = units[i];
                     }
-                    self.set({'units_by_id':units_by_id});
-                });
-
-            var pack_def = fetch(
-                'product.packaging',
-                null,
-                null
-                ).then(function(packaging){
-                    self.set('product.packaging',packaging);
-                });
-
-            var users_def = fetch(
-                'res.users',
-                ['name','ean13'],
-                [['ean13', '!=', false]]
-                ).then(function(result){
-                    self.set({'user_list':result});
-                });
-
-            var tax_def = fetch('account.tax', ['amount','price_include','type'])
-                .then(function(result){
-                    self.set({'taxes': result});
-                });
-
-            var session_def = fetch(    // loading the PoS Session.
-                    'pos.session',
-                    ['id', 'journal_ids','name','user_id','config_id','start_at','stop_at'],
-                    [['state', '=', 'opened'], ['user_id', '=', this.session.uid]]
-                ).pipe(function(result) {
-
-                    // some data are associated with the pos session, like the pos config and bank statements.
-                    // we must have a valid session before we can read those. 
+                    self.set('units_by_id',units_by_id);
                     
-                    var session_data_def = new $.Deferred();
-
-                    if( result.length !== 0 ) {
-                        var pos_session = result[0];
-
-                        self.set({'pos_session': pos_session});
-
-                        var pos_config_def = fetch(
-                                'pos.config',
-                                ['name','journal_ids','shop_id','journal_id',
-                                 'iface_self_checkout', 'iface_led', 'iface_cashdrawer',
-                                 'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard',
-                                 'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'],
-                                [['id','=', pos_session.config_id[0]]]
-                            ).pipe(function(result){
-                                var pos_config = result[0]
-                                
-                                self.set({'pos_config': pos_config});
-                                self.use_scale              = pos_config.iface_electronic_scale  || false;
-                                self.use_proxy_printer      = pos_config.iface_print_via_proxy   || false;
-                                self.use_virtual_keyboard   = pos_config.iface_vkeyboard         || false;
-                                self.use_barcode_scanner    = pos_config.iface_barscan           || false;
-                                self.use_selfcheckout       = pos_config.iface_self_checkout     || false;
-                                self.use_cashbox            = pos_config.iface_cashdrawer        || false;
-
-                                return fetch('sale.shop',[], [['id','=',pos_config.shop_id[0]]])
-                            }).pipe(function(shops){
-                                self.set('shop',shops[0]);
-                                return fetch('pos.category', ['id','name', 'parent_id', 'child_id', 'image'])
-                            }).pipe( function(categories){
-                                self.db.add_categories(categories);
-                                return fetch( 
-                                    'product.product', 
-                                    ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13', 'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type'],
-                                    [['pos_categ_id','!=', false]],
-                                    {pricelist: self.get('shop').pricelist_id[0]} // context for price
-                                );
-                            }).pipe( function(products){
-                                self.db.add_products(products);
-                            });
-
-                        var bank_def = fetch(
-                            'account.bank.statement',
-                            ['account_id','currency','journal_id','state','name','user_id','pos_session_id'],
-                            [['state','=','open'],['pos_session_id', '=', pos_session.id]]
-                            ).then(function(result){
-                                self.set({'bank_statements':result});
-                            });
-
-                        var journal_def = fetch(
-                            'account.journal',
-                            undefined,
-                            [['user_id','=',pos_session.user_id[0]]]
-                            ).then(function(result){
-                                self.set({'journals':result});
-                            });
-
-                        // associate the bank statements with their journals. 
-                        var bank_process_def = $.when(bank_def, journal_def)
-                            .then(function(){
-                                var bank_statements = self.get('bank_statements');
-                                var journals = self.get('journals');
-                                for(var i = 0, ilen = bank_statements.length; i < ilen; i++){
-                                    for(var j = 0, jlen = journals.length; j < jlen; j++){
-                                        if(bank_statements[i].journal_id[0] === journals[j].id){
-                                            bank_statements[i].journal = journals[j];
-                                            bank_statements[i].self_checkout_payment_method = journals[j].self_checkout_payment_method;
-                                        }
-                                    }
-                                }
-                            });
-
-                        session_data_def = $.when(pos_config_def,bank_def,journal_def,bank_process_def);
-
-                    }else{
-                        session_data_def.reject();
+                    return fetch('product.packaging', null, null);
+                }).pipe(function(packagings){
+                    self.set('product.packaging',packagings);
+
+                    return fetch('res.users', ['name','ean13'], [['ean13', '!=', false]]);
+                }).pipe(function(users){
+                    self.set('user_list',users);
+
+                    return fetch('account.tax', ['amount', 'price_include', 'type']);
+                }).pipe(function(taxes){
+                    self.set('taxes', taxes);
+
+                    return fetch(
+                        'pos.session', 
+                        ['id', 'journal_ids','name','user_id','config_id','start_at','stop_at'],
+                        [['state', '=', 'opened'], ['user_id', '=', self.session.uid]]
+                    );
+                }).pipe(function(sessions){
+                    self.set('pos_session', sessions[0]);
+
+                    return fetch(
+                        'pos.config',
+                        ['name','journal_ids','shop_id','journal_id',
+                         'iface_self_checkout', 'iface_led', 'iface_cashdrawer',
+                         'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard',
+                         'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'],
+                        [['id','=', self.get('pos_session').config_id[0]]]
+                    );
+                }).pipe(function(configs){
+                    var pos_config = configs[0];
+                    self.set('pos_config', pos_config);
+                    self.iface_electronic_scale    =  !!pos_config.iface_electronic_scale;  
+                    self.iface_print_via_proxy     =  !!pos_config.iface_print_via_proxy;
+                    self.iface_vkeyboard           =  !!pos_config.iface_vkeyboard; 
+                    self.iface_self_checkout       =  !!pos_config.iface_self_checkout;
+                    self.iface_cashdrawer          =  !!pos_config.iface_cashdrawer;
+
+                    return fetch('sale.shop',[],[['id','=',pos_config.shop_id[0]]]);
+                }).pipe(function(shops){
+                    self.set('shop',shops[0]);
+
+                    return fetch('pos.category', ['id','name','parent_id','child_id','image'])
+                }).pipe(function(categories){
+                    self.db.add_categories(categories);
+
+                    return fetch(
+                        'product.product', 
+                        ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13', 'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type'],
+                        [['pos_categ_id','!=', false]],
+                        {pricelist: self.get('shop').pricelist_id[0]} // context for price
+                    );
+                }).pipe(function(products){
+                    self.db.add_products(products);
+
+                    return fetch(
+                        'account.bank.statement',
+                        ['account_id','currency','journal_id','state','name','user_id','pos_session_id'],
+                        [['state','=','open'],['pos_session_id', '=', self.get('pos_session').id]]
+                    );
+                }).pipe(function(bank_statements){
+                    self.set('bank_statements', bank_statements);
+
+                    return fetch('account.journal', undefined, [['user_id','=', self.get('pos_session').user_id[0]]]);
+                }).pipe(function(journals){
+                    self.set('journals',journals);
+
+                    // associate the bank statements with their journals. 
+                    var bank_statements = self.get('bank_statements');
+                    for(var i = 0, ilen = bank_statements.length; i < ilen; i++){
+                        for(var j = 0, jlen = journals.length; j < jlen; j++){
+                            if(bank_statements[i].journal_id[0] === journals[j].id){
+                                bank_statements[i].journal = journals[j];
+                                bank_statements[i].self_checkout_payment_method = journals[j].self_checkout_payment_method;
+                            }
+                        }
                     }
-                    return session_data_def;
+                    self.set({'cashRegisters' : new module.CashRegisterCollection(self.get('bank_statements'))});
                 });
 
             // when all the data has loaded, we compute some stuff, and declare the Pos ready to be used. 
-            $.when(pack_def, user_def, users_def, uom_def, session_def, tax_def, user_def, this.flush())
+            $.when(loaded)
                 .then(function(){ 
-                    self.set({'cashRegisters' : new module.CashRegisterCollection(self.get('bank_statements'))});
                     //self.log_loaded_data(); //Uncomment if you want to log the data to the console for easier debugging
                     self.ready.resolve();
                 },function(){
index d711993..738eadb 100644 (file)
@@ -276,7 +276,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
             this.pos_widget.set_left_action_bar_visible(this.show_leftpane && !cashier_mode);
             this.pos_widget.set_cashier_controls_visible(cashier_mode);
 
-            if(cashier_mode && this.pos.use_selfcheckout){
+            if(cashier_mode && this.pos.iface_self_checkout){
                 this.pos_widget.client_button.show();
             }else{
                 this.pos_widget.client_button.hide();
@@ -603,7 +603,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
 
             this.product_list_widget = new module.ProductListWidget(this,{
                 click_product_action: function(product){
-                    if(product.get('to_weight') && self.pos.use_scale){
+                    if(product.get('to_weight') && self.pos.iface_electronic_scale){
                         self.pos_widget.screen_selector.set_current_screen(self.scale_screen, {product: product});
                     }else{
                         self.pos.get('selectedOrder').addProduct(product);
@@ -620,7 +620,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
             this.product_categories_widget.reset_category();
 
             this.pos_widget.order_widget.set_numpad_state(this.pos_widget.numpad.state);
-            if(this.pos.use_virtual_keyboard){
+            if(this.pos.iface_vkeyboard){
                 this.pos_widget.onscreen_keyboard.connect();
             }
 
@@ -719,7 +719,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
             this._super();
             var self = this;
 
-            if(this.pos.use_cashbox){
+            if(this.pos.iface_cashdrawer){
                 this.pos.proxy.open_cashbox();
             }
 
@@ -753,7 +753,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
             var currentOrder = this.pos.get('selectedOrder');
 
             this.pos.push_order(currentOrder.exportAsJSON()) 
-            if(this.pos.use_proxy_printer){
+            if(this.pos.iface_print_via_proxy){
                 this.pos.proxy.print_receipt(currentOrder.export_for_printing());
                 this.pos.get('selectedOrder').destroy();    //finish order and go back to scan screen
             }else{
index f6840e4..c3bd73c 100644 (file)
@@ -875,7 +875,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
                 },
                 default_client_screen: 'welcome',
                 default_cashier_screen: 'products',
-                default_mode: this.pos.use_selfcheckout ?  'client' : 'cashier',
+                default_mode: this.pos.iface_self_checkout ?  'client' : 'cashier',
             });
 
         },