[WIP] need to merge some fix
[odoo/odoo.git] / addons / locadis / static / src / js / main.js
1 openerp.locadis = function(instance){
2
3     var module = instance.point_of_sale;
4     var QWeb = instance.web.qweb;
5
6     console.log('PosModel?', module.PosModel);
7
8     module.PosModel = module.PosModel.extend({
9         // all this copy paste just to load the product.dont_vidange field ... :(
10         load_server_data: function(){
11             console.log('loading');
12             var self = this;
13
14             var loaded = self.fetch('res.users',['name','company_id'],[['id','=',this.session.uid]]) 
15                 .pipe(function(users){
16                     self.set('user',users[0]);
17
18                     return self.fetch('res.company',
19                     [
20                         'currency_id',
21                         'email',
22                         'website',
23                         'company_registry',
24                         'vat',
25                         'name',
26                         'phone',
27                         'partner_id',
28                     ],
29                     [['id','=',users[0].company_id[0]]]);
30                 }).pipe(function(companies){
31                     self.set('company',companies[0]);
32
33                     return self.fetch('res.partner',['contact_address'],[['id','=',companies[0].partner_id[0]]]);
34                 }).pipe(function(company_partners){
35                     self.get('company').contact_address = company_partners[0].contact_address;
36
37                     return self.fetch('res.currency',['symbol','position'],[['id','=',self.get('company').currency_id[0]]]);
38                 }).pipe(function(currencies){
39                     self.set('currency',currencies[0]);
40
41                     return self.fetch('product.uom', null, null);
42                 }).pipe(function(units){
43                     self.set('units',units);
44                     var units_by_id = {};
45                     for(var i = 0, len = units.length; i < len; i++){
46                         units_by_id[units[i].id] = units[i];
47                     }
48                     self.set('units_by_id',units_by_id);
49                     
50                     return self.fetch('product.packaging', null, null);
51                 }).pipe(function(packagings){
52                     self.set('product.packaging',packagings);
53
54                     return self.fetch('res.users', ['name','ean13'], [['ean13', '!=', false]]);
55                 }).pipe(function(users){
56                     self.set('user_list',users);
57
58                     return self.fetch('account.tax', ['amount', 'price_include', 'type']);
59                 }).pipe(function(taxes){
60                     self.set('taxes', taxes);
61
62                     return self.fetch(
63                         'pos.session', 
64                         ['id', 'journal_ids','name','user_id','config_id','start_at','stop_at'],
65                         [['state', '=', 'opened'], ['user_id', '=', self.session.uid]]
66                     );
67                 }).pipe(function(sessions){
68                     self.set('pos_session', sessions[0]);
69
70                     return self.fetch(
71                         'pos.config',
72                         ['name','journal_ids','shop_id','journal_id',
73                          'iface_self_checkout', 'iface_led', 'iface_cashdrawer',
74                          'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard',
75                          'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'],
76                         [['id','=', self.get('pos_session').config_id[0]]]
77                     );
78                 }).pipe(function(configs){
79                     var pos_config = configs[0];
80                     self.set('pos_config', pos_config);
81                     self.iface_electronic_scale    =  !!pos_config.iface_electronic_scale;  
82                     self.iface_print_via_proxy     =  !!pos_config.iface_print_via_proxy;
83                     self.iface_vkeyboard           =  !!pos_config.iface_vkeyboard; 
84                     self.iface_self_checkout       =  !!pos_config.iface_self_checkout;
85                     self.iface_cashdrawer          =  !!pos_config.iface_cashdrawer;
86
87                     return self.fetch('sale.shop',[],[['id','=',pos_config.shop_id[0]]]);
88                 }).pipe(function(shops){
89                     self.set('shop',shops[0]);
90
91                     return self.fetch('pos.category', ['id','name','parent_id','child_id','image'])
92                 }).pipe(function(categories){
93                     self.db.add_categories(categories);
94
95                     return self.fetch(
96                         'product.product', 
97                         ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13', 
98                          'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type', 
99                          'description_sale', 'description','dont_vidange'],
100                         [['pos_categ_id','!=', false],['sale_ok','=',true]],
101                         {pricelist: self.get('shop').pricelist_id[0]} // context for price
102                     );
103                 }).pipe(function(products){
104                     self.db.add_products(products);
105
106                     return self.fetch(
107                         'account.bank.statement',
108                         ['account_id','currency','journal_id','state','name','user_id','pos_session_id'],
109                         [['state','=','open'],['pos_session_id', '=', self.get('pos_session').id]]
110                     );
111                 }).pipe(function(bank_statements){
112                     self.set('bank_statements', bank_statements);
113
114                     return self.fetch('account.journal', undefined, [['user_id','=', self.get('pos_session').user_id[0]]]);
115                 }).pipe(function(journals){
116                     self.set('journals',journals);
117
118                     // associate the bank statements with their journals. 
119                     var bank_statements = self.get('bank_statements');
120                     for(var i = 0, ilen = bank_statements.length; i < ilen; i++){
121                         for(var j = 0, jlen = journals.length; j < jlen; j++){
122                             if(bank_statements[i].journal_id[0] === journals[j].id){
123                                 bank_statements[i].journal = journals[j];
124                                 bank_statements[i].self_checkout_payment_method = journals[j].self_checkout_payment_method;
125                             }
126                         }
127                     }
128                     self.set({'cashRegisters' : new module.CashRegisterCollection(self.get('bank_statements'))});
129                     self.log_loaded_data();
130                 });
131             
132         
133             return loaded;
134         },
135     });
136     module.ProductListWidget = module.ProductListWidget.extend({
137         template_empty: 'ProductEmptyListWidget',
138         get_category: function(){
139             return this.getParent().product_categories_widget.category;
140         },
141         renderElement: function(){
142             var ss = this.pos_widget.screen_selector;
143             console.log('ss',ss);
144             if(this.get_category().name === 'Root' && ss && ss.get_user_mode() === 'cashier'){
145                 this.replaceElement(_.str.trim(QWeb.render(this.template_empty,{widget:this})));
146             }else{
147                 this._super();
148             }
149         },
150     });
151 };
152             
153         
154