~technofluid-team/openobject-addons/technofluid_multiple_installations

« back to all changes in this revision

Viewing changes to esale_osc/esale_osc.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
##############################################################################
 
2
#
 
3
# Copyright (c) 2004 TINY SPRL. (http://tiny.be) All Rights Reserved.
 
4
#
 
5
# $Id: sale.py 1005 2005-07-25 08:41:42Z nicoe $
 
6
#
 
7
# WARNING: This program as such is intended to be used by professional
 
8
# programmers who take the whole responsability of assessing all potential
 
9
# consequences resulting from its eventual inadequacies and bugs
 
10
# End users who are looking for a ready-to-use solution with commercial
 
11
# garantees and support are strongly adviced to contract a Free Software
 
12
# Service Company
 
13
#
 
14
# This program is Free Software; you can redistribute it and/or
 
15
# modify it under the terms of the GNU General Public License
 
16
# as published by the Free Software Foundation; either version 2
 
17
# of the License, or (at your option) any later version.
 
18
#
 
19
# This program is distributed in the hope that it will be useful,
 
20
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
21
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
22
# GNU General Public License for more details.
 
23
#
 
24
# You should have received a copy of the GNU General Public License
 
25
# along with this program; if not, write to the Free Software
 
26
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
27
#
 
28
##############################################################################
 
29
 
 
30
import netsvc
 
31
from osv import fields,osv,orm
 
32
import ir
 
33
 
 
34
import time
 
35
import xmlrpclib
 
36
from mx import DateTime
 
37
 
 
38
class esale_osc_web(osv.osv):
 
39
        _name = "esale_osc.web"
 
40
        _description = "OScommerce Website"
 
41
        _columns = {
 
42
                'name': fields.char('Name',size=64, required=True),
 
43
                'url': fields.char('URL', size=64, required=True),
 
44
                'shop_id': fields.many2one('sale.shop', 'Sale Shop', required=True),
 
45
                'partner_anonymous_id': fields.many2one('res.partner', 'Anonymous', required=True),
 
46
                'active': fields.boolean('Active'),
 
47
                'product_ids': fields.one2many('esale_osc.product', 'web_id', 'Web Products'),
 
48
                'language_ids': fields.one2many('esale_osc.lang', 'web_id', 'Languages'),
 
49
                'tax_ids': fields.one2many('esale_osc.tax', 'web_id', 'Taxes'),
 
50
                'category_ids': fields.one2many('esale_osc.category', 'web_id', 'Categories'),
 
51
        }
 
52
        _defaults = {
 
53
                'active': lambda *a: 1
 
54
        }
 
55
 
 
56
        def add_all_products(self, cr, uid, ids, *args):
 
57
                product_pool=self.pool.get('esale_osc.product')
 
58
                for id in ids:
 
59
                        cr.execute("select p.id from product_product as p left join esale_osc_product as o on p.id=o.product_id and o.web_id=%d where o.id is NULL;" % id)
 
60
                        for [product] in cr.fetchall():
 
61
                                value={ 'product_id'    : product,
 
62
                                                'web_id'                : id
 
63
                                        }
 
64
                                value.update(product_pool.onchange_product_id(cr, uid, [], product, id)['value'])
 
65
                                product_pool.create(cr, uid, value)
 
66
                return True
 
67
 
 
68
        def tax_import(self, cr, uid, ids, *args):
 
69
                for website in self.browse(cr, uid, ids):
 
70
                        server = xmlrpclib.ServerProxy("%s/tinyerp-syncro.php" % website.url)
 
71
                        taxes = server.get_taxes()
 
72
                        for tax in taxes:
 
73
                                value={
 
74
                                        'web_id'                : website.id,
 
75
                                        'esale_osc_id'  : tax[0],
 
76
                                        'name'          : tax[1]
 
77
                                }
 
78
                                self.pool.get('esale_osc.tax').create(cr, uid, value)
 
79
                return True
 
80
 
 
81
        def lang_import(self, cr, uid, ids, *args):
 
82
                for website in self.browse(cr, uid, ids):
 
83
                        server = xmlrpclib.ServerProxy("%s/tinyerp-syncro.php" % website.url)
 
84
                        languages = server.get_languages()
 
85
                        for language in languages:
 
86
                                value={ 'web_id'                : website.id,
 
87
                                                'esale_osc_id'  : language[0],
 
88
                                                'name'          : language[1]
 
89
                                }
 
90
                                self.pool.get('esale_osc.lang').create(cr, uid, value)
 
91
                return True
 
92
 
 
93
        def category_import(self, cr, uid, ids, *args):
 
94
                for website in self.browse(cr, uid, ids):
 
95
                        server = xmlrpclib.ServerProxy("%s/tinyerp-syncro.php" % website.url)
 
96
                        categories = server.get_categories()
 
97
                        category_pool = self.pool.get('esale_osc.category')
 
98
                        for category in categories:
 
99
                                value={ 'web_id'                : website.id,
 
100
                                                'esale_osc_id'  : category[0],
 
101
                                                'name'          : category[1]
 
102
                                }
 
103
                                existing = category_pool.search(cr, uid, [('web_id','=',website.id), ('esale_osc_id', '=', category[0])])
 
104
                                if len(existing)>0:
 
105
                                        category_pool.write(cr, uid, existing, value)
 
106
                                else:
 
107
                                        category_pool.create(cr, uid, value)
 
108
                return True     
 
109
 
 
110
esale_osc_web()
 
111
 
 
112
class esale_osc_tax(osv.osv):
 
113
        _name = "esale_osc.tax"
 
114
        _description = "esale_osc Tax"
 
115
        _columns = {
 
116
                'name'          : fields.char('Tax name', size=32, required=True),
 
117
                'esale_osc_id'  : fields.integer('esale_osc ID'),
 
118
                'tax_id'                : fields.many2one('account.tax', 'Tax'),
 
119
                'web_id'                : fields.many2one('esale_osc.web', 'Website')
 
120
        }
 
121
esale_osc_tax()
 
122
 
 
123
class esale_osc_category(osv.osv):
 
124
        _name = "esale_osc.category"
 
125
        _description = "esale_osc Category"
 
126
        _columns = {    'name'          : fields.char('Name', size=64, reuired=True),
 
127
                                'esale_osc_id'  : fields.integer('esale_osc ID', required=True),
 
128
                                'web_id'                : fields.many2one('esale_osc.web', 'Website'),
 
129
                                'category_id'   : fields.many2one('product.category', 'Category'),
 
130
                                }
 
131
esale_osc_category()
 
132
 
 
133
class esale_osc_product(osv.osv):
 
134
        _name = "esale_osc.product"
 
135
        _description = "esale_osc Product"
 
136
        _columns = {    'web_id'                        : fields.many2one('esale_osc.web', 'Web Ref'),
 
137
                                'name'                  : fields.char('Name', size=64, required=True),
 
138
                                'product_id'            : fields.many2one('product.product', 'Product', required=True),
 
139
                                'esale_osc_id'          : fields.integer('esale_osc product id'),
 
140
                                'esale_osc_tax_id'      : fields.many2one('esale_osc.tax', 'esale_osc tax'),
 
141
                                }
 
142
 
 
143
        def onchange_product_id(self, cr, uid, ids, product_id, web_id):
 
144
                value={}
 
145
                if (product_id):
 
146
                        product=self.pool.get('product.product').browse(cr, uid, product_id)
 
147
                        value['name']=product.name
 
148
                return {'value': value}
 
149
esale_osc_product()
 
150
 
 
151
class esale_osc_language(osv.osv):
 
152
        _name = "esale_osc.lang"
 
153
        _description = "esale_osc Language"
 
154
        _columns = {    'name'                  : fields.char('Name', size=32, required=True),
 
155
                                        'esale_osc_id'  : fields.integer('esale_osc ID', required=True),
 
156
                                        'language_id'   : fields.many2one('res.lang', 'Language'),
 
157
                                        'web_id'                : fields.many2one('esale_osc.web', 'Website')
 
158
                                }
 
159
esale_osc_language()
 
160
 
 
161
class esale_osc_saleorder(osv.osv):
 
162
        _inherit='sale.order'
 
163
        _name='sale.order'
 
164
        _table='sale_order'
 
165
        _columns = {
 
166
                'esale_osc_web': fields.many2one('esale_osc.web', 'Website'),
 
167
                'esale_osc_id': fields.integer('esale_osc Id'),
 
168
        }
 
169
        _defaults = {
 
170
                'esale_osc_id': lambda *a: False,
 
171
        }
 
172
 
 
173
        def onchange_esale_osc_web(self, cr, uid, ids, esale_osc_web):
 
174
                value={}
 
175
                if esale_osc_web:
 
176
                        web=self.pool.get('esale_osc.web').browse(cr, uid, esale_osc_web)
 
177
                        value['shop_id']=web.shop_id.id
 
178
                        value['partner_id']=web.partner_anonymous_id.id
 
179
                        value.update(self.pool.get('sale.order').onchange_shop_id(cr, uid, ids, value['shop_id'])['value'])
 
180
                        value.update(self.pool.get('sale.order').onchange_partner_id(cr, uid, ids, value['partner_id'])['value'])
 
181
 
 
182
                return {'value':value}
 
183
 
 
184
        def order_create(self, cr, uid, ids, context={}):
 
185
                for order in self.browse(cr, uid, ids, context):
 
186
                        addr = self.pool.get('res.partner').address_get(cr, uid, [order.partner_id.id], ['delivery','invoice','contact'])
 
187
                        pricelist_id=order.partner_id.property_product_pricelist[0]
 
188
                        order_lines = []
 
189
                        for line in order.order_lines:
 
190
                                order_lines.append( (0,0,{
 
191
                                        'name': line.name,
 
192
                                        'product_qty': line.product_qty,
 
193
                                        'date_planned': line.date_planned,
 
194
                                        'product_id': line.product_id.id,
 
195
                                        'product_uom': line.product_uom.id,
 
196
                                        'price_unit': line.price_unit,
 
197
                                        'type': line.product_id.procure_method
 
198
                                 }) )
 
199
                        order_id = self.pool.get('sale.order').create(cr, uid, {
 
200
                                'name': order.name,
 
201
                                'shop_id': order.web_id.shop_id.id,
 
202
                                'origin': 'WEB:'+str(order.id),
 
203
                                'date_order': order.date_order,
 
204
                                'user_id': uid,
 
205
                                'partner_id': order.partner_id.id,
 
206
                                'partner_invoice_id':addr['invoice'],
 
207
                                'partner_order_id':addr['contact'],
 
208
                                'partner_shipping_id':addr['delivery'],
 
209
                                'pricelist_id': pricelist_id,
 
210
                                'order_line': order_lines
 
211
                        })
 
212
                        self.write(cr, uid, [order.id], {'state':'done', 'order_id': order_id})
 
213
                        wf_service = netsvc.LocalService("workflow")
 
214
                        wf_service.trg_validate(uid, 'sale.order', order_id, 'order_confirm', cr)
 
215
                return True
 
216
 
 
217
esale_osc_saleorder()