166
199
else: # OpenERP category exists
167
200
cat_id = cat_oscom.category_id.id
168
201
category_obj.write(cr, uid, cat_id, value)
170
204
# Updates translations
171
205
for trans, lang in zip(category[2:], oerp_langs):
172
206
#print trans, lang.code
173
207
category_obj.write(cr, uid, cat_id, {'name': trans}, {'lang': lang.code})
210
raise osv.except_osv(_('Category import done'), _('Created: %d categories\nUpdated: %d categories\n\nRefresh screen to see updates') % (created, updated))
214
def product_fields(self, info_prod):
215
"""If you want compute additional product fields you can redefine this method in your own module"""
217
#'field_name': info_prod['field_name']
222
def product_trans_fields(self, trans):
223
"""If you want compute additional product translated fields you can redefine this method in your own module"""
225
#'field_name': trans['field_name']
230
def product_extra_info(self, cr, uid, website, prod_id, prod_data):
231
"""If you want create additonal information in OpenERP objects related to product you can redefine this method in your own module"""
176
235
def product_import_create(self, cr, uid, ids, *args):
236
"""Imports products from OSCommerce and creates/updates OpenERP products"""
177
237
product_obj = self.pool.get('product.product')
178
238
esale_product_obj = self.pool.get('esale.oscom.product')
179
esale_category_obj = self.pool.get('esale.oscom.category')
180
esale_tax_obj = self.pool.get('esale.oscom.tax')
239
manufacturer_obj = self.pool.get('product.manufacturer')
240
stock_inventory_obj = self.pool.get('stock.inventory')
241
stock_inventory_line_obj = self.pool.get('stock.inventory.line')
243
created, updated = 0,0
182
244
for website in self.browse(cr, uid, ids):
183
245
server = xmlrpclib.ServerProxy("%s/openerp-synchro.php" % website.url)
184
246
website_url = website.url.split("/")
186
# Search OScommerce languages mapped to OpenERP
248
# Search esale languages mapped to OpenERP
187
249
osc_langs = [lang.esale_oscom_id for lang in website.language_ids if lang.language_id and lang.language_id.translatable]
188
oerp_langs = [lang.language_id for lang in website.language_ids if lang.language_id and lang.language_id.translatable]
189
250
if not osc_langs:
190
251
raise osv.except_osv(_('Warning'), _("First you must map OScommerce languages to OpenERP languages in the Web Shop!"))
192
products_osc = server.get_products(osc_langs)
194
for product in products_osc:
195
print "=============================================================================="
197
info_prod = product['product']
198
spec_prod = product['product_special']
199
name_prod = product['product_description'] and product['product_description'][0]['products_name'] or '-'
201
# Search mapped category. If not found the product is not added/modified
202
esale_categ_ids = esale_category_obj.search(cr, uid, [('web_id','=',website.id), ('esale_oscom_id','=',info_prod['categ_id'])])
203
if not esale_categ_ids:
205
esale_categ = esale_category_obj.browse(cr, uid, esale_categ_ids[0])
206
if not esale_categ.category_id:
210
esale_tax_ids = esale_tax_obj.search(cr, uid, [('web_id','=',website.id), ('esale_oscom_id','=',info_prod['products_tax_class_id'])])
213
esale_tax = esale_tax_obj.browse(cr, uid, esale_tax_ids[0])
214
tax = esale_tax.tax_id and [(6, 0, [esale_tax.tax_id.id])] or []
217
# info_prod['manufacturers_id'] (integer) must be placed in OpenERP 'manufacturer_id' field (creating the manufacturer if is needed)
220
'default_code': info_prod['products_model'],
221
'categ_id': esale_categ.category_id.id,
223
'list_price': info_prod['products_price'],
224
'weight': info_prod['products_weight'],
225
'product_picture': info_prod['products_image'],
226
'in_out_stock': str(info_prod['products_status']),
227
'date_available': info_prod['products_date_available'] or False,
228
'spe_price_status': 'status' in spec_prod and str(spec_prod['status']) or False,
229
'spe_price': 'specials_new_products_price' in spec_prod and spec_prod['specials_new_products_price'] or False,
230
'exp_date': 'expires_date' in spec_prod and spec_prod['expires_date']!='0000-00-00 00:00:00' and spec_prod['expires_date'] or False,
231
'oscom_url': website_url[0] + "//" + website_url[2] + "/" + website_url[3] + "/" + website_url[4] + "/" +"categories.php?cPath=" + str(info_prod['categ_id']) + "&pID=" + str(info_prod['products_id']) + "&action=new_product"
232
#'ean13': info_prod['products_model'],
233
#'type': 'Stockable product',
234
#'supply_method': 'buy',
235
#'procure_method': 'make_to_stock',
236
#'cost_method': 'standard',
238
#'purchase_ok': True,
240
#'weight_net': info_prod['products_weight'],
241
#'standard_price': info_prod['products_price'],
246
# Search in intermediate esale.oscom.product object that maps OScommerce and OpenERP products
247
esale_product_ids = esale_product_obj.search(cr, uid, [('web_id','=',website.id), ('esale_oscom_id','=',info_prod['products_id'])])
248
if esale_product_ids:
249
esale_product = esale_product_obj.browse(cr, uid, esale_product_ids[0])
251
# Creates or updates product.product and esale.oscom.product objects
252
if not esale_product_ids or not esale_product.product_id: # OpenERP product does not exist
253
prod_id = super(osv.osv, product_obj).create(cr, uid, value)
254
value_esale_product = {
256
'esale_oscom_id': info_prod['products_id'],
257
'esale_oscom_tax_id': esale_tax_ids and esale_tax_ids[0] or False,
258
'web_id': website.id,
259
'product_id': prod_id,
253
# Creates dictionary mapping esale language id -> OpenERP language
255
for lang in website.language_ids:
256
if lang.language_id and lang.language_id.translatable:
257
oerp_langs[lang.esale_oscom_id] = lang.language_id
259
# Creates dictionary mapping esale category id -> OpenERP category
261
for categ in website.category_ids:
262
if categ.category_id:
263
oerp_categs[categ.esale_oscom_id] = categ.category_id
265
# Creates dictionary mapping esale tax id -> OpenERP tax
267
for tax in website.tax_ids:
268
if tax.tax_id and tax.tax_id.active:
269
oerp_taxs[tax.esale_oscom_id] = tax.tax_id
272
'name' : "Descarga Inicial",
274
stock_init_id = stock_inventory_obj.create(cr, uid, value_stock_inv)
276
mini = server.get_min_products_id()
278
tope = server.get_max_products_id()
279
#print "Product maxi:" , tope
281
#print "Start mini loop", mini
282
#print "Start maxi loop", maxi
283
products_osc = server.get_products(osc_langs, mini, maxi)
287
for product in products_osc:
288
#print "================================product from osc=========================================="
290
info_prod = product['product']
291
spec_prod = product['product_special']
292
name_prod = product['product_description'] and product['product_description'][0]['products_name'] or '-'
293
url_manuf = product['manufacturers_url']
294
#print info_prod['products_id'], " Code " , info_prod['products_model']
296
# Search mapped category. If not found the product is not added/modified
297
if info_prod['categ_id'] in oerp_categs:
298
categ = oerp_categs[info_prod['categ_id']]
304
if info_prod['products_tax_class_id'] in oerp_taxs:
305
tax = [(6, 0, [oerp_taxs[info_prod['products_tax_class_id']].id])]
307
# Search manufacturer. If not exists, create it. Create related url for each language
308
if (len(info_prod['manufacturers_name']) > 0):
309
manuf_ids = manufacturer_obj.search(cr, uid, [('name','=',info_prod['manufacturers_name'])])
311
manuf_id = manufacturer_obj.create(cr, uid, {'name': info_prod['manufacturers_name']})
313
manuf_id = manuf_ids[0]
314
for url_manuf_el in url_manuf:
315
if url_manuf_el['languages_id'] in oerp_langs:
316
#print url_manuf_el['languages_id'], oerp_langs[url_manuf_el['languages_id']].code
317
manufacturer_obj.write(cr, uid, [manuf_id], {'manufacturer_url': url_manuf_el['manufacturers_url']}, {'lang': oerp_langs[url_manuf_el['languages_id']].code})
321
'default_code': info_prod['products_model'],
322
'categ_id': categ.id,
324
'list_price': info_prod['products_price'],
325
'weight': info_prod['products_weight'],
326
'product_picture': info_prod['products_image'],
327
'in_out_stock': str(info_prod['products_status']),
328
'date_available': info_prod['products_date_available']!='0000-00-00 00:00:00' and info_prod['products_date_available'] or False,
329
'spe_price_status': 'status' in spec_prod and str(spec_prod['status']) or False,
330
'spe_price': 'specials_new_products_price' in spec_prod and spec_prod['specials_new_products_price'] or False,
331
'exp_date': 'expires_date' in spec_prod and spec_prod['expires_date']!='0000-00-00 00:00:00' and spec_prod['expires_date'] or False,
332
'oscom_url': website_url[0] + "//" + website_url[2] + "/" +"product_info.php?cPath=" + str(info_prod['categ_id']) + "&products_id=" + str(info_prod['products_id']),
333
#'ean13': info_prod['products_model'],
334
#'type': 'Stockable product',
335
#'supply_method': 'buy',
336
#'procure_method': 'make_to_stock',
337
#'cost_method': 'standard',
338
#'weight_net': info_prod['products_weight'],
339
#'standard_price': info_prod['products_price'],
261
if not esale_product_ids:
262
esale_product_id = esale_product_obj.create(cr, uid, value_esale_product)
264
esale_product_obj.write(cr, uid, [esale_product_ids[0]], value_esale_product)
265
else: # OpenERP product exists
266
prod_id = esale_product.product_id.id
267
super(osv.osv, product_obj).write(cr, uid, [prod_id], value)
269
# Updates translations
270
for trans, lang in zip(product['product_description'], oerp_langs):
271
#print trans, lang.code
272
super(osv.osv, product_obj).write(cr, uid, [prod_id], {
341
value.update(self.product_fields(info_prod)) # Adds additional fields
342
# print "=======value======"
345
# Search in intermediate esale.oscom.product object that maps OScommerce and OpenERP products
346
esale_product_ids = esale_product_obj.search(cr, uid, [('web_id','=',website.id), ('esale_oscom_id','=',info_prod['products_id'])])
347
if esale_product_ids:
348
esale_product = esale_product_obj.browse(cr, uid, esale_product_ids[0])
350
# Creates or updates product.product and esale.oscom.product objects
351
if not esale_product_ids or not esale_product.product_id: # OpenERP product does not exist
352
prod_id = super(osv.osv, product_obj).create(cr, uid, value)
354
value_esale_product = {
356
'esale_oscom_id': info_prod['products_id'],
357
'web_id': website.id,
358
'product_id': prod_id,
360
if not esale_product_ids:
361
esale_product_id = esale_product_obj.create(cr, uid, value_esale_product)
363
esale_product_obj.write(cr, uid, [esale_product_ids[0]], value_esale_product)
364
else: # OpenERP product exists
365
prod_id = esale_product.product_id.id
366
super(osv.osv, product_obj).write(cr, uid, [prod_id], value)
369
# Updates translations
370
for trans in product['product_description']:
273
372
'name': trans['products_name'] or '-',
274
373
'description': trans['products_description'],
275
374
'description_sale': trans['products_description'],
276
375
'product_url': trans['products_url'],
277
}, {'lang': lang.code})
280
def get_payment_methods(self, cr, uid, ids, *args):
377
value_trans.update(self.product_trans_fields(trans)) # Adds additional fields
378
# print "==========trans========="
380
super(osv.osv, product_obj).write(cr, uid, [prod_id], value_trans, {'lang': oerp_langs[trans['language_id']].code})
382
self.product_extra_info(cr, uid, website, prod_id, product) # Creates additonal information in OpenERP objects related to product
383
#Creates inventory_line
384
value_inventory_line = {
385
'inventory_id': stock_init_id,
387
'product_id' : prod_id,
389
'product_qty' : info_prod['products_quantity']
391
stock_inventory_line_id = stock_inventory_line_obj.create(cr, uid, value_inventory_line)
393
raise osv.except_osv(_('Product import done'), _('Created: %d products\nUpdated: %d products\n\nRefresh screen to see updates') % (created, updated))
396
def customer_extra_info(self, cr, uid, website, customer_id, osc_customer_id):
397
"""If you want create additonal information in OpenERP objects related to customer you can redefine this method in your own module"""
401
def saleorder_import(self, cr, uid, website_id, context):
402
"""Imports sale orders from OSCommerce"""
404
def _country_info(self, cr, uid, data, context):
405
country_obj = self.pool.get('res.country')
406
data['code'] = data['code'].upper()
407
search_country = country_obj.search(cr, uid, [('code','=',data['code'])])
408
if len(search_country):
409
return search_country[0]
411
# data['esale_oscom_id'] = data['country_id']
412
del data['esale_oscom_id']
413
return country_obj.create(cr, uid, data)
415
def _state_info(self, cr, uid, data, country_id, context):
416
state_obj = self.pool.get('res.country.state')
417
data['country_id'] = country_id
418
search_state = state_obj.search(cr, uid, ['|',('code','ilike',data['code']),('name','ilike','%'+data['code']+'%'), ('country_id','=',data['country_id'])])
419
if len(search_state):
420
return search_state[0]
421
# data['esale_oscom_id'] = data['state_id']
422
del data['esale_oscom_id']
423
return state_obj.create(cr, uid, data)
425
def _add_address(self, cr, uid, data, partner_id, context):
426
address_obj = self.pool.get('res.partner.address')
427
country_id = _country_info(self, cr, uid, data['country'].copy(), context)
429
data['country_id'] = country_id
430
if type(data['state']) == type({}):
431
state_id = _state_info(self, cr, uid, data['state'].copy(), country_id, context)
432
data['state_id'] = state_id
434
search_address = address_obj.search(cr, uid, [('partner_id','=',partner_id),('esale_oscom_id','=',data['esale_oscom_id'])])
435
if len(search_address):
436
address_obj.write(cr, uid, search_address,data)
437
return search_address[0]
439
data['partner_id'] = partner_id
440
return address_obj.create(cr, uid, data)
442
partner_obj = self.pool.get('res.partner')
443
saleorder_obj = self.pool.get('sale.order')
444
saleorder_line_obj = self.pool.get('sale.order.line')
445
product_obj = self.pool.get('product.product')
446
esale_product_obj = self.pool.get('esale.oscom.product')
281
447
esale_paytype_obj = self.pool.get('esale.oscom.paytype')
282
for website in self.browse(cr, uid, ids):
283
server = xmlrpclib.ServerProxy("%s/openerp-synchro.php" % website.url)
284
payment_methods = server.get_payment_methods()
285
for payment_method in payment_methods:
287
'web_id' : website.id,
288
'esale_oscom_id' : payment_method[0],
289
'name' : payment_method[1]
291
existing = esale_paytype_obj.search(cr, uid, [('web_id','=',website.id), ('esale_oscom_id', '=', payment_method[0])])
292
if len(existing) > 0:
293
esale_paytype_obj.write(cr, uid, existing, value)
295
esale_paytype_obj.create(cr, uid, value)
448
tax_obj = self.pool.get('account.tax')
449
inv_obj = self.pool.get('account.invoice')
450
journal_obj = self.pool.get('account.journal')
452
website = self.pool.get('esale.oscom.web').browse(cr, uid, website_id)
453
server = xmlrpclib.ServerProxy("%s/openerp-synchro.php" % website.url)
455
cr.execute("select max(esale_oscom_id) from sale_order where esale_oscom_web=%s;" % str(website.id))
456
max_web_id = cr.fetchone()[0]
460
saleorders = server.get_saleorders(max_web_id)
461
min_openorder = server.get_min_open_orders(max_web_id)
463
saleorders = server.get_saleorders(0)
465
for saleorder in saleorders:
466
#print "==========*********NEW**************==========="
467
#print "== Oscommerce Sale Order Number :", saleorder['id']
468
if len(saleorder['partner']) > 0 :
469
oscom_partner = saleorder['partner'][0]
470
#print "== Sale order partner:", saleorder['partner'][0]
471
partner_ids = partner_obj.search(cr, uid, [('esale_oscom_id','=',oscom_partner['esale_oscom_id'])])
473
partner_id = partner_ids[0]
474
partner_obj.write(cr, uid, partner_ids, {'name':oscom_partner['name']})
476
del oscom_partner['addresses']
477
partner_id = partner_obj.create(cr, uid, oscom_partner)
478
partner_obj.write(cr, uid, partner_ids, {'ref':oscom_partner['esale_oscom_id']})
480
self.customer_extra_info(cr, uid, website, partner_id, oscom_partner['esale_oscom_id']) # Creates additonal information in OpenERP objects related to customer
482
# Default address is right on Website so we create the order.
483
if len(saleorder['address']) > 0 :
484
#print "===Sale order address:",saleorder['address'][0]
485
default_address = saleorder['address'][0]
486
del saleorder['address']
487
default_address['type'] = 'default'
488
default_address_id = _add_address(self, cr, uid, default_address.copy(), partner_id, context)
489
shipping_address = []
490
if len(saleorder['delivery']) > 0 :
491
#print "===Sale order Delivery:",saleorder['delivery'][0]
492
shipping_address = saleorder['delivery'][0]
493
del saleorder['delivery']
494
shipping_address['type'] = 'delivery'
495
shipping_address_id = _add_address(self, cr, uid, shipping_address.copy(), partner_id, context)
497
if len(saleorder['billing']) > 0 :
498
#print "===Sale order Billing:",saleorder['billing'][0]
499
billing_address = saleorder['billing'][0]
500
del saleorder['billing']
501
billing_address['type'] = 'invoice'
502
billing_address_id = _add_address(self, cr, uid, billing_address.copy(),partner_id, context)
504
value={ 'esale_oscom_web': website.id,
505
'esale_oscom_id' : saleorder['id'],
506
'shop_id' : website.shop_id.id,
507
'partner_id' : partner_id,
508
'note' : saleorder['note'],
509
'pay_met_title' : saleorder['pay_met_title'],
510
'shipping_title' : saleorder['shipping_title'],
511
'orders_status' : saleorder['orders_status'],
512
#'price_type' : saleorder['price_type']
515
value.update(saleorder_obj.onchange_shop_id(cr, uid, [], value['shop_id'])['value'])
516
value.update(saleorder_obj.onchange_partner_id(cr, uid, [], value['partner_id'])['value'])
517
# address_obj = self.pool.get('res.partner.address')
518
# for address in [('address','order'), ('billing', 'invoice'), ('delivery', 'shipping')]:
519
# criteria = [('partner_id', '=', website.partner_anonymous_id.id)]
520
# insert = {'partner_id': website.partner_anonymous_id.id}
521
# for criterium in [('city', 'city'), ('name', 'name'), ('zip','zip'), ('address', 'street') ]:
522
# criteria.append((criterium[1], 'like', saleorder[address[0]][criterium[0]]))
523
# insert[criterium[1]] = saleorder[address[0]][criterium[0]]
524
# address_ids = address_obj.search(cr, uid, criteria)
525
# if len(address_ids):
526
# id = address_ids[0]
528
# country_ids = self.pool.get('res.country').search(cr, uid, [('name', 'ilike', saleorder[address[0]]['country'])])
529
# if len(country_ids):
530
# country_id = country_ids[0]
532
# country_id = self.pool.get('res.country').create(cr, uid, { 'name' : saleorder[address[0]]['country'],
533
# 'code' : saleorder[address[0]]['country'][0:2].lower()})
534
# insert['country_id'] = country_id
535
# if address[0] == 'address':
536
# insert['email'] = saleorder['address']['email']
537
# id = address_obj.create(cr, uid, insert)
539
# value.update({'partner_%s_id' % address[1]: id})
540
value['partner_order_id'] = default_address_id
541
if len(shipping_address) > 0 :
542
value['partner_shipping_id'] = shipping_address_id
544
value['partner_shipping_id'] = default_address_id
546
if len(billing_address) > 0 :
547
value['partner_invoice_id'] = billing_address_id
549
value['partner_invoice_id'] = default_address_id
551
order_id = saleorder_obj.create(cr, uid, value)
553
for orderline in saleorder['lines']:
554
ids = esale_product_obj.search(cr, uid, [('esale_oscom_id', '=', orderline['product_id']), ('web_id', '=', website.id)])
556
oscom_product_id = ids[0]
557
oscom_product = esale_product_obj.browse(cr, uid, oscom_product_id)
559
'product_id' : oscom_product.product_id.id,
560
'product_uom_qty': orderline['product_qty'],
561
'order_id' : order_id
563
onchange_product_sol = saleorder_line_obj.product_id_change(cr, uid, [], value['pricelist_id'], linevalue['product_id'], linevalue['product_uom_qty'],False, 0, False, '', value['partner_id'])['value']
564
onchange_product_sol['tax_id'] = False
565
if orderline['tax_rate'] > 0.0000:
566
tax_rate_search_ids = tax_obj.search(cr, uid, [('tax_group','=','vat'),('amount','=',orderline['tax_rate']/100), ('type_tax_use', '=','sale')])
567
if tax_rate_search_ids:
568
onchange_product_sol['tax_id'] = tax_rate_search_ids
570
new_tax_id = int(tax_obj.create(cr, uid, {'name':'NEW '+str(orderline['tax_rate']),'amount':orderline['tax_rate']/100}))
571
onchange_product_sol['tax_id'] = [new_tax_id]
572
price = orderline['price']
573
name = orderline['name']
574
attributes = (orderline.has_key('attributes') and orderline['attributes']) or False
575
if saleorder['price_type'] == 'tax_excluded' and attributes:
576
price = eval(str(price) + attributes['price_prefix'] + str(attributes['options_values_price']))
577
name = name + ' ' + attributes['products_options'] + ' + ' + attributes['products_options_values']
578
elif saleorder['price_type'] == 'tax_included':
579
price = price * (1+orderline['tax_rate']/100)
581
options_value_price = attributes['options_values_price']
582
cal_options_value_price = options_value_price * (1+orderline['tax_rate']/100)
583
price = eval(str(price) + attributes['price_prefix'] + str(cal_options_value_price))
584
name = name + ' ' + attributes['products_options'] + ' + ' + attributes['products_options_values']
585
onchange_product_sol['price_unit'] = round(price,2)
586
linevalue.update(onchange_product_sol)
587
linevalue.update(saleorder_line_obj.default_get(cr, uid, ['sequence', 'invoiced', 'state', 'product_packaging']))
588
linevalue['name'] = name
589
if linevalue.get('weight',False):
590
del linevalue['weight']
591
linevalue["product_uos"] = linevalue['product_uos'] and linevalue['product_uos'][0]
592
tax_id = linevalue['tax_id'] and linevalue['tax_id'][0]
593
del linevalue['tax_id']
595
ids = saleorder_line_obj.create(cr, uid, linevalue)
597
cr.execute('insert into sale_order_tax (order_line_id,tax_id) values (%d,%d)', (ids, tax_id))
598
#print "======== UPDATE:",saleorder['shipping_title']
599
shopping_cost_id = product_obj.search(cr, uid, [('name','=','Shipping Cost')])
601
if saleorder['shipping_price'] > 0.0000:
603
'product_id' : shopping_cost_id[0],
604
'product_uom_qty': 1,
605
'order_id' : order_id
607
so_line_shipping.update(saleorder_line_obj.product_id_change(cr, uid, [], value['pricelist_id'], so_line_shipping['product_id'], so_line_shipping['product_uom_qty'],False, 0, False, '', value['partner_id'])['value'])
608
so_line_shipping.update(saleorder_line_obj.default_get(cr, uid, ['sequence', 'invoiced', 'state', 'product_packaging']))
609
so_line_shipping['price_unit'] = saleorder['shipping_price']
610
so_line_shipping['name'] = saleorder['shipping_title']
611
if so_line_shipping.get('weight',False):
612
del so_line_shipping['weight']
613
del so_line_shipping['tax_id']
614
#print "=== Order line:", so_line_shipping
615
ids = saleorder_line_obj.create(cr, uid, so_line_shipping)
616
#print "=== Cupon line:",saleorder['dcoupon_title']
617
#print "=== Cash order line:",saleorder['cash_title']
618
discount_cost_id = product_obj.search(cr, uid, [('name','=','Discount Coupon')])
620
if saleorder['dcoupon_price'] != 0.0000:
622
'product_id' : discount_cost_id[0],
623
'product_uom_qty': 1,
624
'order_id' : order_id
626
#print "=== Cupon line:",saleorder['dcoupon_title']
627
so_line_discount.update(saleorder_line_obj.product_id_change(cr, uid, [], value['pricelist_id'], so_line_discount['product_id'], so_line_discount['product_uom_qty'],False, 0, False, '', value['partner_id'])['value'])
628
so_line_discount.update(saleorder_line_obj.default_get(cr, uid, ['sequence', 'invoiced', 'state', 'product_packaging']))
629
so_line_discount['price_unit'] = saleorder['dcoupon_price']
630
so_line_discount['name'] = saleorder['dcoupon_title']
631
if so_line_discount.get('weight',False):
632
del so_line_discount['weight']
633
del so_line_discount['tax_id']
634
#print "=== Cupon line:", so_line_discount
635
ids = saleorder_line_obj.create(cr, uid, so_line_discount)
636
cash_cost_id = product_obj.search(cr, uid, [('name','=','Cash On Delivery')])
638
if saleorder['cash_price'] != 0.0000:
640
'product_id' : cash_cost_id[0],
641
'product_uom_qty': 1,
642
'order_id' : order_id
644
#print "=== Cash order line:",saleorder['cash_title']
645
so_line_cash.update(saleorder_line_obj.product_id_change(cr, uid, [], value['pricelist_id'], so_line_cash['product_id'], so_line_cash['product_uom_qty'],False, 0, False, '', value['partner_id'])['value'])
646
so_line_cash.update(saleorder_line_obj.default_get(cr, uid, ['sequence', 'invoiced', 'state', 'product_packaging']))
647
so_line_cash['price_unit'] = saleorder['cash_price']
648
so_line_cash['name'] = saleorder['cash_title']
649
if so_line_cash.get('weight',False):
650
del so_line_cash['weight']
651
del so_line_cash['tax_id']
652
#print "=== Order line:", so_line_cash
653
ids = saleorder_line_obj.create(cr, uid, so_line_cash)
657
######################################################################################
658
oscom_pay_met = saleorder['pay_met']
659
typ_ids = esale_paytype_obj.search(cr, uid, [('esale_oscom_id', '=', oscom_pay_met), ('web_id', '=', website.id)])
660
saleorder = saleorder_obj.browse(cr, uid, order_id)
662
typ_data = esale_paytype_obj.browse(cr, uid, typ_ids)[0]
663
paytype = typ_data.paytyp
664
cr.execute('select * from ir_module_module where name=%s and state=%s', ('sale_payment','installed'))
666
saleorder_obj.write(cr, uid, [order_id], {'payment_type': typ_data.payment_id.id})
669
wf_service = netsvc.LocalService("workflow")
670
if paytype == 'type1':
671
#SO in state draft so nothing
673
elif paytype == 'type2':
674
#SO in state confirmed
675
wf_service.trg_validate(uid, 'sale.order', order_id, 'order_confirm', cr)
676
elif paytype == 'type3':
678
wf_service.trg_validate(uid, 'sale.order', order_id, 'order_confirm', cr)
679
wf_service.trg_validate(uid, 'sale.order', order_id, 'manual_invoice', cr)
680
elif paytype == 'type4':
681
wf_service.trg_validate(uid, 'sale.order', order_id, 'order_confirm', cr)
682
wf_service.trg_validate(uid, 'sale.order', order_id, 'manual_invoice', cr)
683
inv_ids = inv_obj.search(cr, uid, [('origin','=',saleorder.name)])
684
inv_obj.button_compute(cr, uid, inv_ids)
685
wf_service.trg_validate(uid, 'account.invoice',inv_ids[0], 'invoice_open', cr)
686
elif paytype == 'type5':
688
wf_service.trg_validate(uid, 'sale.order', order_id, 'order_confirm', cr)
689
wf_service.trg_validate(uid, 'sale.order', order_id, 'manual_invoice', cr)
690
pay_account_id = (website.esale_account_id)['id']
691
pay_journal_id = typ_data.journal_id.id
692
inv_ids = inv_obj.search(cr, uid, [('origin','=',saleorder.name)])
693
inv_obj.button_compute(cr, uid, inv_ids)
694
wf_service.trg_validate(uid, 'account.invoice',inv_ids[0], 'invoice_open', cr)
695
ids = self.pool.get('account.period').find(cr, uid, context=context)
700
invoice = inv_obj.browse(cr, uid,inv_ids[0],{})
701
company_currency = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
702
if invoice.currency_id.id != company_currency:
703
amount = round(self.pool.get('res.currency').compute(cr, uid, invoice.currency_id.id, company_currency, invoice.amount_total), 2)
705
amount = invoice.amount_total
707
inv_obj.pay_and_reconcile(cr, uid, inv_ids, amount, pay_account_id, period_id, pay_journal_id, False, False, False, context={})
709
#The payment method hasn't been mapped
712
for saleorder in saleorders:
713
server.process_order(saleorder['id'])
715
###################### look for open orders in site that are 'done' in TinyERP ###################
716
###################### and close them ###################
717
if (min_openorder > -1):
718
cr.execute("select esale_oscom_id from sale_order where (esale_oscom_id>=%s) and (state = 'done') and (esale_oscom_web=%s);", (str(min_openorder), str(website.id)))
719
openorders=cr.fetchall()
720
for openorder in openorders:
721
server.close_open_orders(openorder[0])
298
724
esale_oscom_web()
301
#class esale_oscom_country(osv.osv):
302
# _inherit = 'res.country'
304
# 'esale_oscom_id': fields.integer('esale_oscom ID',readonly=True),
307
#class esale_oscom_state(osv.osv):
308
# _inherit = 'res.country.state'
310
# 'esale_oscom_id': fields.integer('esale_oscom ID',readonly=True),
314
727
class esale_oscom_tax(osv.osv):
315
728
_name = "esale.oscom.tax"
316
729
_description = "esale_oscom Tax"