~technofluid-team/openobject-addons/technofluid_multiple_installations

« back to all changes in this revision

Viewing changes to esale_osc/wizard/wizard_esale_osc_import_sos.py

  • Committer: pinky
  • Date: 2006-12-07 13:41:40 UTC
  • Revision ID: pinky-dedd7f8a42bd4557112a0513082691b8590ad6cc
New trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import ir
 
2
import time
 
3
import os
 
4
import netsvc
 
5
import xmlrpclib
 
6
import pooler
 
7
import wizard
 
8
from osv import osv
 
9
 
 
10
_import_form = '''<?xml version="1.0"?>
 
11
<form title="Categories import" />
 
12
'''
 
13
 
 
14
_import_fields = {}
 
15
 
 
16
_import_done_form = '''<?xml version="1.0"?>
 
17
<form title="Saleorders import">
 
18
<separator string="saleorders succesfully imported" colspan="4" />
 
19
</form>'''
 
20
 
 
21
_import_done_fields = {}
 
22
 
 
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'])
 
26
 
 
27
        server = xmlrpclib.ServerProxy("%s/tinyerp-syncro.php" % website.url)
 
28
 
 
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]
 
31
        min_openorder=-1
 
32
        if max_web_id:
 
33
                saleorders = server.get_saleorders(max_web_id)
 
34
                min_openorder = server.get_min_open_orders(max_web_id)
 
35
        else:
 
36
                saleorders = server.get_saleorders(0)
 
37
 
 
38
        for saleorder in saleorders:
 
39
                print str(saleorder)
 
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,
 
44
                        }
 
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)
 
56
                        if len(address_ids):
 
57
                                id=address_ids[0]
 
58
                        else:
 
59
                                country_ids=self.pool.get('res.country').search(cr, uid, [('name', 'ilike', saleorder[address[0]]['country'])])
 
60
                                if len(country_ids):
 
61
                                        country_id=country_ids[0]
 
62
                                else:
 
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)
 
69
                                
 
70
                        value.update({'partner_%s_id' % address[1]: id})
 
71
                                
 
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)])
 
75
                        if len(ids):
 
76
                                osc_product_id=ids[0]
 
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'],
 
80
                                                'order_id'              : order_id
 
81
                                }
 
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))
 
90
        cr.commit()
 
91
        for saleorder in saleorders:
 
92
                server.process_order(saleorder['id'])
 
93
 
 
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])
 
101
        return {}
 
102
 
 
103
class wiz_esale_osc_import_sos(wizard.interface):
 
104
 
 
105
        states = {      'init'  : {     'actions'       : [_do_import],
 
106
                                                        'result'        : {     'type'  : 'form',
 
107
                                                                                        'arch'  : _import_done_form,
 
108
                                                                                        'fields': _import_done_fields,
 
109
                                                                                        'state' : [('end', 'End')]
 
110
                                                                                        }
 
111
                                                        }
 
112
                                }
 
113
 
 
114
 
 
115
wiz_esale_osc_import_sos('esale_osc.saleorders');