10
_import_form = '''<?xml version="1.0"?>
11
<form title="Categories import" />
16
_import_done_form = '''<?xml version="1.0"?>
17
<form title="Saleorders import">
18
<separator string="saleorders succesfully imported" colspan="4" />
21
_import_done_fields = {}
23
def _do_import(self, cr, uid, data, context):
24
self.pool = pooler.get_pool(cr.dbname)
25
website = self.pool.get('esale_osc.web').browse(cr, uid, data['id'])
27
server = xmlrpclib.ServerProxy("%s/tinyerp-syncro.php" % website.url)
29
cr.execute("select max(esale_osc_id) from sale_order where esale_osc_web=%s;" % str(website.id))
30
max_web_id=cr.fetchone()[0]
33
saleorders = server.get_saleorders(max_web_id)
34
min_openorder = server.get_min_open_orders(max_web_id)
36
saleorders = server.get_saleorders(0)
38
for saleorder in saleorders:
40
value={ 'esale_osc_web' : website.id,
41
'esale_osc_id' : saleorder['id'],
42
'shop_id' : website.shop_id.id,
43
'partner_id' : website.partner_anonymous_id.id,
45
saleorder_pool=self.pool.get('sale.order')
46
value.update(saleorder_pool.onchange_shop_id(cr, uid, [], value['shop_id'])['value'])
47
value.update(saleorder_pool.onchange_partner_id(cr, uid, [], value['partner_id'])['value'])
48
addresses_pool = self.pool.get('res.partner.address')
49
for address in [('address','order'), ('billing', 'invoice'), ('delivery', 'shipping')]:
50
criteria = [('partner_id', '=', website.partner_anonymous_id.id)]
51
insert = {'partner_id': website.partner_anonymous_id.id}
52
for criterium in [('city', 'city'), ('name', 'name'), ('zip','zip'), ('address', 'street') ]:
53
criteria.append((criterium[1], 'like', saleorder[address[0]][criterium[0]]))
54
insert[criterium[1]]=saleorder[address[0]][criterium[0]]
55
address_ids=addresses_pool.search(cr, uid, criteria)
59
country_ids=self.pool.get('res.country').search(cr, uid, [('name', 'ilike', saleorder[address[0]]['country'])])
61
country_id=country_ids[0]
63
country_id=self.pool.get('res.country').create(cr, uid, { 'name' : saleorder[address[0]]['country'],
64
'code' : saleorder[address[0]]['country'][0:2].lower()})
65
insert['country_id']=country_id
66
if address[0]=='address':
67
insert['email']=saleorder['address']['email']
68
id=addresses_pool.create(cr, uid, insert)
70
value.update({'partner_%s_id' % address[1]: id})
72
order_id=saleorder_pool.create(cr, uid, value)
73
for orderline in saleorder['lines']:
74
ids=self.pool.get('esale_osc.product').search(cr, uid, [('esale_osc_id', '=', orderline['product_id']), ('web_id', '=', website.id)])
77
osc_product=self.pool.get('esale_osc.product').browse(cr, uid, osc_product_id)
78
linevalue={ 'product_id' : osc_product.product_id.id,
79
'product_uom_qty' : orderline['product_qty'],
82
linevalue.update(self.pool.get('sale.order.line').product_id_change(cr, uid, [], value['pricelist_id'], linevalue['product_id'], linevalue['product_uom_qty'])['value'])
83
linevalue.update(self.pool.get('sale.order.line').default_get(cr, uid, ['sequence', 'invoiced', 'state', 'product_packaging']))
84
del linevalue['weight']
85
linevalue["product_uos"]= linevalue['product_uos'][0]
86
tax_id=linevalue['tax_id'][0]
87
del linevalue['tax_id']
88
ids=self.pool.get('sale.order.line').create(cr, uid, linevalue)
89
cr.execute('insert into sale_order_tax (order_line_id,tax_id) values (%d,%d)', (ids, tax_id))
91
for saleorder in saleorders:
92
server.process_order(saleorder['id'])
94
###################### look for open orders in site that are 'done' in TinyERP ###################
95
###################### and close them ###################
96
if (min_openorder > -1):
97
cr.execute("select esale_osc_id from sale_order where (esale_osc_id>=%d) and (state = 'done') and (esale_osc_web=%d);", (min_openorder,website.id))
98
openorders=cr.fetchall()
99
for openorder in openorders:
100
server.close_open_orders(openorder[0])
103
class wiz_esale_osc_import_sos(wizard.interface):
105
states = { 'init' : { 'actions' : [_do_import],
106
'result' : { 'type' : 'form',
107
'arch' : _import_done_form,
108
'fields': _import_done_fields,
109
'state' : [('end', 'End')]
115
wiz_esale_osc_import_sos('esale_osc.saleorders');