You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

227 lines
8.6 KiB

# -*- coding: utf-8 -*-
from openerp import models, fields, api
from openerp.exceptions import Warning
from openerp.addons.import_base.import_framework import *
from openerp.addons.import_base.mapper import *
class odoo_connection_data(models.TransientModel):
_name = 'beesdoo.import.asbl'
@api.multi
def migrate(self):
imp = migration_framework(self, self.env.cr, self.env.uid, "Odoo", 'beesdoo.import.asbl', dict(self.env.context))
imp.launch_import()
class migration_framework(import_framework):
black_list_field = {
}
tables = ['product.category',
'product.uom',
'product.uom.categ',
'pos.category',
'res.partner',
'product.template',
'product.supplierinfo',
]
table_domain = {
'res.partner' : [('supplier', '=', True), '|', ('active', '=', True), ('active', '=', False)],
'product.template' : ['|', ('active', '=', True), ('active', '=', False)]
}
def initialize(self):
self.connection = self.obj.env['import.odoo.connection'].search([], limit=1)
self.set_table_list(self.tables)
print self.connection.name
def _get_field(self, model):
fields = ['id']
for mapper_object in self.get_mapping()[model.model_name]['map'].values():
if isinstance(mapper_object, basestring):
fields.append(mapper_object)
else:
fields.extend(mapper_object.get_fields())
print "read field", fields
return fields
def res_to_dict(self, fields, datas):
datas = datas['datas']
res = []
for data in datas:
data_dict = {}
for i, field in enumerate(fields):
data_dict[field] = data[i]
res.append(data_dict)
return res
def get_data(self, table):
con = self.connection._get_connection()
obj = con.get_model(table)
fields = self._get_field(obj)
ids = obj.search(self.table_domain.get(table, []))
datas = obj.export_data(ids, fields, context={'lang' : 'fr_BE'})
return self.res_to_dict(fields, datas)
def _generate_xml_id(self, name, table):
"""
@param name: name of the object, has to be unique in for a given table
@param table : table where the record we want generate come from
@return: a unique xml id for record, the xml_id will be the same given the same table and same name
To be used to avoid duplication of data that don't have ids
"""
return name
taxes_mapping = {
'5.5% Marchandise' : '6% Marchandises',
'6% Marchandise' : '6% Marchandises',
'21% Services incluse' : '21% Services',
}
def get_mapping(self):
return {
'product.category': {
'model' : 'product.category',
'dependencies' : [],
'map' : {
'name' : 'name',
'parent_id/id_parent' : 'parent_id/id',
'type' : 'type',
}
},
'product.uom.categ' : {
'model' : 'product.uom.categ',
'dependencies' : [],
'map' : {
'name' : 'name',
}
},
'product.uom': {
'model' : 'product.uom',
'dependencies' : ['product.uom.categ'],
'map' : {
'name' : 'name',
'category_id/id' : 'category_id/id',
'rounding' : 'rounding',
'uom_type' : 'uom_type',
'factor' : 'factor',
'factor_inv' : 'factor_inv',
}
},
'pos.category': {
'model' : 'pos.category',
'dependencies' : [],
'map' : {
'id' : 'id',
'name' : 'name',
'parent_id/id_parent' : 'parent_id/id',
}
},
'res.partner': {
'model' : 'res.partner',
'dependencies' : [],
'map' : {
'active' : 'active',
'barcode' : 'barcode',
'birthdate' : 'birthdate',
'city' : 'city',
'comment' : 'comment',
'company_type' : 'company_type',
'contact_address' : 'contact_address',
'country_id/id' : 'country_id/id',
'email' : 'email',
'employee' : 'employee',
'fax' : 'fax',
'first_name' : 'first_name',
'function' : 'function',
'is_company' : 'is_company',
'lang' : 'lang',
'last_name' : 'last_name',
'mobile' : 'mobile',
'name' : 'name',
'parent_id/id_parent' : 'parent_id/id',
'phone' : 'phone',
'ref' : 'ref',
'street' : 'street',
'street2' : 'street2',
'supplier' : 'supplier',
'website' : 'website',
'zip' : 'zip',
'supplier' : 'supplier',
'customer' : 'customer',
'vat' : 'vat',
}
},
'beesdoo.product.label' : {
'model' : 'beesdoo.product.label',
'dependencies' : [],
'map' : {
'color_code' : 'color_code',
'name' : 'name',
'type' : 'type',
}
},
'product.template': {
'model' : 'product.template',
'dependencies' : ['pos.category', 'product.category', 'beesdoo.product.label'],
'map' : {
'active' : 'active',
'available_in_pos' : 'available_in_pos',
'barcode' : 'barcode',
'categ_id/id' : 'categ_id/id',
'default_code' : 'default_code',
'description' : 'description',
'description_picking' : 'description_picking',
'description_purchase' : 'description_purchase',
'description_sale' : 'description_sale',
'eco_label/id' : 'eco_label/id',
'fair_label/id' : 'fair_label/id',
'invoice_policy' : 'invoice_policy',
'local_label/id' : 'local_label/id',
'name' : 'name',
'origin_label/id' : 'origin_label/id',
'pos_categ_id/id' : 'pos_categ_id/id',
'purchase_ok' : 'purchase_ok',
'sale_delay' : 'sale_delay',
'sale_ok' : 'sale_ok',
'standard_price' : 'standard_price',
'supplier_taxes_id' : map_val_default('supplier_taxes_id', self.taxes_mapping), #Taxes problème
'taxes_id' : map_val_default('taxes_id', self.taxes_mapping),
'to_weight' : 'to_weight',
'type' : 'type',
'uom_id/id' : 'uom_id/id',
'uom_po_id/id' : 'uom_po_id/id',
'weight' : 'weight',
'list_price' : 'list_price',
}
},
'product.supplierinfo': {
'model' : 'product.supplierinfo',
'dependencies' : ['product.template'],
'map' : {
'delay' : 'delay',
'min_qty' : 'min_qty',
'name/id' : 'name/id',
'price' : 'price',
'product_code' : 'product_code',
'product_name' : 'product_name',
'product_uom/id' : 'product_uom/id',
'date_start' : 'date_start',
'date_end' : 'date_end',
'product_tmpl_id/id': 'product_tmpl_id/id',
}
},
}