1 function openerp_pos_membership_models(instance
, module
){
2 //module.PosModel = instance.point_of_sale.PosModel.extend({})
3 module
.PosModel
= module
.PosModel
.extend({
4 initialize: function(session
, attributes
) {
5 //console.log("[pos_membership] [PosModel] [initialize]");
6 //PosModel.prototype.initialize.apply(this, arguments);
7 module
.PosModel
.__super__
.initialize
.call(this, session
, attributes
);
8 this.partner_search_string
= '';
9 this.partner_by_id
= {};
10 this.partner_list
= [];
11 this.db
.clear('partners');
13 'partners': new module
.PartnerCollection(),
14 'selectedPartner': null,
17 load_server_data: function(){
19 //console.log("[point_of_sale] [PosModel] [load_server_data]", "this.session=", this.session);
21 var loaded
= self
.fetch('res.users',['name','company_id'],[['id','=',this.session
.uid
]])
22 .then(function(users
){
23 //console.log("[point_of_sale] [PosModel] [load_server_data]", "users=", users);
24 self
.set('user',users
[0]);
26 return self
.fetch('res.company',
37 [['id','=',users
[0].company_id
[0]]]);
38 }).then(function(companies
){
39 self
.set('company',companies
[0]);
41 return self
.fetch('res.partner',['contact_address'],[['id','=',companies
[0].partner_id
[0]]]);
42 }).then(function(company_partners
){
43 self
.get('company').contact_address
= company_partners
[0].contact_address
;
45 return self
.fetch('res.currency',['symbol','position','rounding','accuracy'],[['id','=',self
.get('company').currency_id
[0]]]);
46 }).then(function(currencies
){
47 self
.set('currency',currencies
[0]);
49 return self
.fetch('product.uom', null, null);
50 }).then(function(units
){
51 self
.set('units',units
);
53 for(var i
= 0, len
= units
.length
; i
< len
; i
++){
54 units_by_id
[units
[i
].id
] = units
[i
];
56 self
.set('units_by_id',units_by_id
);
58 return self
.fetch('product.packaging', null, null);
59 }).then(function(packagings
){
60 self
.set('product.packaging',packagings
);
62 return self
.fetch('res.users', ['name','ean13'], [['ean13', '!=', false]]);
63 }).then(function(users
){
64 self
.set('user_list',users
);
66 return self
.fetch('res.partner', ['name','ean13'], [['ean13', '!=', false]]);
67 }).then(function(partners
){
68 self
.set('partner_list',partners
);
70 // NOTE: le moment du chargement des partners est important
71 // et doit être effectué vers ici,
72 // c'est pourquoi load_server_data() est recopiée en entier.
73 // BEGIN pos_membership
74 return self
.fetch('res.partner', ['name']);
75 }).then(function(partners
){
76 self
.db
.add_partners(partners
);
79 return self
.fetch('account.tax', ['amount', 'price_include', 'type']);
80 }).then(function(taxes
){
81 self
.set('taxes', taxes
);
85 ['id', 'journal_ids','name','user_id','config_id','start_at','stop_at'],
86 [['state', '=', 'opened'], ['user_id', '=', self
.session
.uid
]]
88 }).then(function(sessions
){
89 self
.set('pos_session', sessions
[0]);
93 ['name','journal_ids','shop_id','journal_id',
94 'iface_self_checkout', 'iface_led', 'iface_cashdrawer',
95 'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard',
96 'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'],
97 [['id','=', self
.get('pos_session').config_id
[0]]]
99 }).then(function(configs
){
100 var pos_config
= configs
[0];
101 //console.log("[pos_membership] config=", pos_config);
102 self
.set('pos_config', pos_config
);
103 self
.iface_electronic_scale
= !!pos_config
.iface_electronic_scale
;
104 self
.iface_print_via_proxy
= !!pos_config
.iface_print_via_proxy
;
105 self
.iface_vkeyboard
= !!pos_config
.iface_vkeyboard
;
106 self
.iface_self_checkout
= !!pos_config
.iface_self_checkout
;
107 self
.iface_cashdrawer
= !!pos_config
.iface_cashdrawer
;
109 return self
.fetch('sale.shop',[],[['id','=',pos_config
.shop_id
[0]]]);
110 }).then(function(shops
){
111 self
.set('shop',shops
[0]);
113 return self
.fetch('product.packaging',['ean','product_id']);
114 }).then(function(packagings
){
115 self
.db
.add_packagings(packagings
);
117 return self
.fetch('pos.category', ['id','name','parent_id','child_id','image'])
118 }).then(function(categories
){
119 self
.db
.add_categories(categories
);
123 ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13',
124 'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type', 'description_sale', 'description'],
125 [['sale_ok','=',true],['available_in_pos','=',true]],
126 {pricelist
: self
.get('shop').pricelist_id
[0]} // context for price
128 }).then(function(products
){
129 self
.db
.add_products(products
);
132 'account.bank.statement',
133 ['account_id','currency','journal_id','state','name','user_id','pos_session_id'],
134 [['state','=','open'],['pos_session_id', '=', self
.get('pos_session').id
]]
136 }).then(function(bank_statements
){
137 var journals
= new Array();
138 _
.each(bank_statements
,function(statement
) {
139 journals
.push(statement
.journal_id
[0])
141 self
.set('bank_statements', bank_statements
);
142 return self
.fetch('account.journal', undefined, [['id','in', journals
]]);
143 }).then(function(journals
){
144 self
.set('journals',journals
);
146 // associate the bank statements with their journals.
147 var bank_statements
= self
.get('bank_statements');
148 for(var i
= 0, ilen
= bank_statements
.length
; i
< ilen
; i
++){
149 for(var j
= 0, jlen
= journals
.length
; j
< jlen
; j
++){
150 if(bank_statements
[i
].journal_id
[0] === journals
[j
].id
){
151 bank_statements
[i
].journal
= journals
[j
];
152 bank_statements
[i
].self_checkout_payment_method
= journals
[j
].self_checkout_payment_method
;
156 self
.set({'cashRegisters' : new module
.CashRegisterCollection(self
.get('bank_statements'))});
160 push_partner: function(partner
) {
161 //console.log("[pos_membership] [PosModel] [push_partner] partner=", partner.name);
162 this.db
.add_partner(partner
);
163 this.flush_partner();
165 add_new_partner: function(attr
){
166 var partner
= new module
.PartnerCreate({pos
:this, name
:attr
.name
});
167 //console.log("[pos_membership] [PosModel] [add_new_partner] partner=", partner.get('name'));
168 this.get('partners').add(partner
);
169 this.set('selectedPartner', partner
);
171 flush_partner: function() {
172 //TODO make the mutex work
173 //this makes sure only one _int_flush is called at the same time
174 //return this.flush_mutex.exec(_.bind(function() {
175 // return this._flush_partner(0);
177 this._flush_partner(0);
179 _flush_partner: function(index
){
181 var partners
= this.db
.get_partners();
182 self
.set('nbr_pending_operations',partners
.length
);
184 var partner
= partners
[index
];
185 var selectedOrder
= self
.get('selectedOrder');
186 //console.log("[pos_membership] [PosModel] [_flush_partner] index=", index);
190 //console.log("[pos_membership] [PosModel] [_flush_partner] partner=", partner.data.name);
191 //try to push a partner to the server
192 return (new instance
.web
.Model('pos.order')).get_func('create_partner_from_ui')([partner
])
193 .fail(function(unused
, event
){
194 //don't show error popup if it fails
195 event
.preventDefault();
196 console
.error('Failed to send partner:',partner
);
197 self
._flush_partner(index
+1);
199 .done(function(args
){
200 //remove from db if success
201 //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] args=", args);
202 self
.db
.remove_partner(partner
.id
);
203 var name
= partner
.data
.name
;
204 p
= {name
:name
, id
:args
[0]};
205 //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] partner=", p);
206 self
.db
.add_partners([p
]);
207 //self.set('selectedPartner', p);
208 //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] selectedPartner=", self.get('selectedPartner').name);
209 //console.log("[pos_membership] [PosModel] [_flush_partner] [.done] selectedPartner.id=", self.get('selectedPartner').id);
210 selectedOrder
.addPartner(p
); // NOTE: set .id asynchronously..
211 self
._flush_partner(index
);
215 module
.Partner
= Backbone
.Model
.extend({
216 initialize: function(attr
, options
) {
217 this.name
= attr
.name
;
220 get_image_url: function(){
221 return instance
.session
.url('/web/binary/image', {model
: 'res.partner', field
: 'image', id
: this.get('id')});
224 module
.PartnerCollection
= Backbone
.Collection
.extend({
225 model
: module
.Partner
,
227 module
.PartnerCreate
= Backbone
.Model
.extend({
228 initialize: function(attr
){
229 Backbone
.Model
.prototype.initialize
.apply(this, arguments
);
231 this.name
= attr
.name
;
234 exportAsJSON: function() {
235 //console.log("[PartnerCreate] [exportAsJSON] name=",this.name);
241 module
.Order
= module
.Order
.extend({
242 addPartner: function(partner
, options
){
243 options
= options
|| {};
244 //console.log("[Order] [addPartner] partner=", partner.name, " partner_id=", partner.id);
245 this.set_client(partner
);
247 exportAsJSON: function() {
248 var json
= module
.Order
.__super__
.exportAsJSON
.call(this);
249 json
['partner_id'] = this.get('client') ? this.get('client').id
: undefined;
250 //console.log("[Order] [exportAsJSON] json=", json);