~camptocamp/magentoerpconnect/magentoerpconnect_generic_bug_497216

« back to all changes in this revision

Viewing changes to sale.py

  • Committer: Jordi Esteve
  • Date: 2010-01-03 19:45:36 UTC
  • Revision ID: jesteve@zikzakmedia.com-20100103194536-tasbnorcb54in4ek
[IMP] Partner mapping:
* Better detection of partner vat number (check before include it).
* Partner address mapping: Remove default_billing, default_shipping

Show diffs side-by-side

added added

removed removed

Lines of Context:
137
137
            return {'customer_address_id': 'mag_order' + str(address_data['address_id']), 'is_magento_order_address': True}
138
138
    
139
139
    def get_order_addresses(self, cr, uid, res, external_referential_id, data_record, key_field, mapping_lines, defaults, context):
 
140
        partner_obj = self.pool.get('res.partner')
 
141
        partner_address_obj = self.pool.get('res.partner.address')
140
142
        del(data_record['billing_address']['parent_id'])
141
143
        del(data_record['shipping_address']['parent_id'])
142
144
        
152
154
        billing_default = shipping_default.copy()
153
155
        billing_default.update({'email' : data_record.get('customer_email', False)})
154
156
 
155
 
        inv_res = self.pool.get('res.partner.address').ext_import(cr, uid, [data_record['billing_address']], 
 
157
        inv_res = partner_address_obj.ext_import(cr, uid, [data_record['billing_address']], 
156
158
                                                                  external_referential_id, billing_default, context)
157
 
        ship_res = self.pool.get('res.partner.address').ext_import(cr, uid, [data_record['shipping_address']], 
 
159
        ship_res = partner_address_obj.ext_import(cr, uid, [data_record['shipping_address']], 
158
160
                                                                  external_referential_id, shipping_default, context)
159
161
 
160
162
        res['partner_order_id'] = len(inv_res['create_ids']) > 0 and inv_res['create_ids'][0] or inv_res['write_ids'][0]
161
163
        res['partner_invoice_id'] = res['partner_order_id']
162
164
        res['partner_shipping_id'] = (len(ship_res['create_ids']) > 0 and ship_res['create_ids'][0]) or (len(ship_res['write_ids']) > 0 and ship_res['write_ids'][0]) or res['partner_order_id'] #shipping might be the same as invoice address
163
165
        
164
 
        result = self.pool.get('res.partner.address').read(cr, uid, res['partner_order_id'], ['partner_id'])
 
166
        result = partner_address_obj.read(cr, uid, res['partner_order_id'], ['partner_id'])
165
167
        if result and result['partner_id']:
166
168
            partner_id = result['partner_id'][0]
167
169
        else: #seems like a guest order, create partner on the fly from billing address to make OpenERP happy:
168
 
            partner_id = self.pool.get('res.partner').create(cr, uid, {'name': data_record['billing_address'].get('lastname', '') + ' ' + data_record['billing_address'].get('firstname', '')}, context)
169
 
            self.pool.get('res.partner.address').write(cr, uid, [res['partner_order_id'], res['partner_invoice_id'], res['partner_shipping_id']], {'partner_id': partner_id})
 
170
            partner_id = partner_obj.create(cr, uid, {'name': data_record['billing_address'].get('lastname', '') + ' ' + data_record['billing_address'].get('firstname', '')}, context)
 
171
            partner_address_obj.write(cr, uid, [res['partner_order_id'], res['partner_invoice_id'], res['partner_shipping_id']], {'partner_id': partner_id})
170
172
        res['partner_id'] = partner_id
171
173
 
172
174
        # Adds last store view (m2o field store_id) to the list of store views (m2m field store_ids)
173
 
        partner = self.pool.get('res.partner').browse(cr, uid, partner_id)
 
175
        partner = partner_obj.browse(cr, uid, partner_id)
174
176
        if partner.store_id:
175
177
            store_ids = [store.id for store in partner.store_ids]
176
178
            if partner.store_id.id not in store_ids:
177
179
                store_ids.append(partner.store_id.id)
178
 
            self.pool.get('res.partner').write(cr, uid, [partner_id], {'store_ids': [(6,0,store_ids)]})
 
180
            partner_obj.write(cr, uid, [partner_id], {'store_ids': [(6,0,store_ids)]})
179
181
 
180
182
        # Adds vat number (country code+magento vat) if base_vat module is installed and Magento sends customer_taxvat
181
183
        cr.execute('select * from ir_module_module where name=%s and state=%s', ('base_vat','installed'))
183
185
            allchars = string.maketrans('', '')
184
186
            delchars = ''.join([c for c in allchars if c not in string.letters + string.digits])
185
187
            vat = data_record['customer_taxvat'].translate(allchars, delchars).upper()
186
 
            if 'country_id' in data_record['billing_address']:
 
188
            vat_country, vat_number = vat[:2].lower(), vat[2:]
 
189
            check = getattr(partner_obj, 'check_vat_' + vat_country)
 
190
            vat_ok = check(vat_number)
 
191
            #print "1", vat, vat_ok
 
192
            if not vat_ok and 'country_id' in data_record['billing_address']:
 
193
                # Maybe magento vat number has not country code prefix. Take it from billing address.
 
194
                check = getattr(partner_obj, 'check_vat_' + data_record['billing_address']['country_id'].lower())
 
195
                vat_ok = check(vat)
187
196
                vat = data_record['billing_address']['country_id'] + vat
188
 
            self.pool.get('res.partner').write(cr, uid, [partner_id], {'vat_subjected':True, 'vat':vat})
 
197
                #print "2", vat, vat_ok
 
198
            if vat_ok:    
 
199
                partner_obj.write(cr, uid, [partner_id], {'vat_subjected':True, 'vat':vat})
189
200
        return res
190
201
    
191
202
    def get_order_lines(self, cr, uid, res, external_referential_id, data_record, key_field, mapping_lines, defaults, context):