diff --git a/addons/base_contact/__init__.py b/addons/base_contact/__init__.py index 84054cd59e7..e40825b719c 100644 --- a/addons/base_contact/__init__.py +++ b/addons/base_contact/__init__.py @@ -20,7 +20,7 @@ ############################################################################## import base_contact -import base_contact_installer +#import base_contact_installer # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_contact/__openerp__.py b/addons/base_contact/__openerp__.py index 729e535036b..0075da3ed16 100644 --- a/addons/base_contact/__openerp__.py +++ b/addons/base_contact/__openerp__.py @@ -48,8 +48,8 @@ Pay attention that this module converts the existing addresses into "addresses + 'security/base_contact_security.xml', 'security/ir.model.access.csv', 'base_contact_view.xml', - 'base_contact_installer_view.xml', - #'process/base_contact_process.xml' + # 'base_contact_installer_view.xml', + 'process/base_contact_process.xml' ], 'demo_xml': ['base_contact_demo.xml'], 'test': [ diff --git a/addons/base_contact/base_contact.py b/addons/base_contact/base_contact.py index b359dca8539..29d125c3739 100644 --- a/addons/base_contact/base_contact.py +++ b/addons/base_contact/base_contact.py @@ -61,31 +61,6 @@ class res_partner_contact(osv.osv): _order = "name,first_name" - def name_get2(self, cr, user, ids, context=None): - - """ will return name and first_name....... - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param user: the current user’s ID for security checks, - @param ids: List of create menu’s IDs - @return: name and first_name - @param context: A standard dictionary for contextual values - """ - - if not len(ids): - return [] - res = [] - for contact in self.browse(cr, user, ids, context=context): - _contact = "" - if contact.title: - _contact += "%s "%(contact.title.name) - _contact += contact.name or "" - if contact.name and contact.first_name: - _contact += " " - _contact += contact.first_name or "" - res.append((contact.id, _contact)) - return res - def name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=None): if not args: args = [] @@ -111,16 +86,33 @@ res_partner() class res_partner_location(osv.osv): _name = 'res.partner.location' _inherit = 'res.partner.address' - #_table = 'res_partner_address' _columns = { 'job_ids': fields.one2many('res.partner.address', 'location_id', 'Contacts'), } + + def _auto_init(self, cr, context=None): + def table_exists(view_name): + cr.execute('SELECT count(relname) FROM pg_class WHERE relname = %s', (view_name,)) + value = cr.fetchone()[0] + return bool(value == 1) + + exists = table_exists(self._table) + super(res_partner_location, self)._auto_init(cr, context) + + if not exists: + sequence_name = self.pool.get('res.partner.address')._sequence + cr.execute("SELECT last_value FROM " + sequence_name) + last_sequence = cr.fetchone()[0] + + cr.execute("INSERT INTO res_partner_location SELECT * FROM res_partner_address") + cr.execute("ALTER SEQUENCE " + self._sequence + " RESTART WITH " + str(last_sequence)) + + res_partner_location() class res_partner_address(osv.osv): _name = 'res.partner.address' _inherits = { 'res.partner.location' : 'location_id' } - _table = 'res_partner_job' _columns = { 'location_id' : fields.many2one('res.partner.location', 'Location'), @@ -141,6 +133,19 @@ class res_partner_address(osv.osv): 'state': 'current', } + def _auto_init(self, cr, context=None): + def column_exists(column): + cr.execute("select count(attname) from pg_attribute where attrelid = \ + (select oid from pg_class where relname = %s) \ + and attname = %s", (self._table, column,)) + value = cr.fetchone()[0] + return bool(value == 1) + + exists = column_exists('location_id') + super(res_partner_address, self)._auto_init(cr, context) + + if not exists: + cr.execute("UPDATE res_partner_address SET location_id = id") res_partner_address() diff --git a/addons/base_contact/base_contact_installer.py b/addons/base_contact/base_contact_installer.py index 4568fa25193..8acac331952 100644 --- a/addons/base_contact/base_contact_installer.py +++ b/addons/base_contact/base_contact_installer.py @@ -34,33 +34,41 @@ class base_contact_installer(osv.osv_memory): """ This function is used to create contact and address from existing partner address """ - obj = self.pool.get("base.contact.installer").browse(cr, uid, uid, context=context) - if obj.migrate: - # Enable PL/pgSQL if not enabled yet in the database - cr.execute("SELECT 1 FROM pg_language WHERE lanname = 'plpgsql'") - if not cr.fetchone(): - cr.execute("CREATE LANGUAGE plpgsql;") + obj = self.browse(cr, uid, uid, context=context) + if not obj.migrate: + return - cr.execute("""DROP TRIGGER IF EXISTS contactjob on res_partner_contact; - CREATE OR REPLACE FUNCTION add_to_job() RETURNS TRIGGER AS $contactjob$ - DECLARE - new_name varchar; - new_phonenum varchar; - BEGIN - IF(TG_OP='INSERT') THEN - INSERT INTO res_partner_job(contact_id, address_id, function, state) VALUES(NEW.id, NEW.website::integer,NEW.first_name, 'current'); - UPDATE res_partner_contact set first_name=Null, website=Null, active=True where id=NEW.id; - END IF; - RETURN NEW; - END; - $contactjob$ LANGUAGE plpgsql; - CREATE TRIGGER contactjob AFTER INSERT ON res_partner_contact FOR EACH ROW EXECUTE PROCEDURE add_to_job();""") + # We translate address to location + # Risk to have a shift with the current data + cr.execute("INSERT INTO res_partner_location SELECT * FROM res_partner_address") - cr.execute("INSERT into res_partner_contact (name, title, email, first_name, website) (SELECT coalesce(name, 'Noname'), title, email, function , to_char(id, '99999999') from res_partner_address)") + cr.execute("ALTER TABLE res_partner_address RENAME TO res_parter_location") - cr.execute("DROP TRIGGER IF EXISTS contactjob on res_partner_contact") + # Enable PL/pgSQL if not enabled yet in the database + cr.execute("SELECT 1 FROM pg_language WHERE lanname = 'plpgsql'") + if not cr.fetchone(): + cr.execute("CREATE LANGUAGE plpgsql;") - cr.execute("DROP FUNCTION IF EXISTS add_to_job()") + cr.execute("""DROP TRIGGER IF EXISTS contactjob on res_partner_contact; + CREATE OR REPLACE FUNCTION add_to_job() RETURNS TRIGGER AS $contactjob$ + DECLARE + new_name varchar; + new_phonenum varchar; + BEGIN + IF(TG_OP='INSERT') THEN + INSERT INTO res_partner_job(contact_id, address_id, function, state) VALUES(NEW.id, NEW.website::integer,NEW.first_name, 'current'); + UPDATE res_partner_contact set first_name=Null, website=Null, active=True where id=NEW.id; + END IF; + RETURN NEW; + END; + $contactjob$ LANGUAGE plpgsql; + CREATE TRIGGER contactjob AFTER INSERT ON res_partner_contact FOR EACH ROW EXECUTE PROCEDURE add_to_job();""") + + cr.execute("INSERT into res_partner_contact (name, title, email, first_name, website) (SELECT coalesce(name, 'Noname'), title, email, function , to_char(id, '99999999') from res_partner_address)") + + cr.execute("DROP TRIGGER IF EXISTS contactjob on res_partner_contact") + + cr.execute("DROP FUNCTION IF EXISTS add_to_job()") base_contact_installer() diff --git a/addons/base_contact/base_contact_view.xml b/addons/base_contact/base_contact_view.xml index 0d9d8fcee13..2947a4a0b34 100644 --- a/addons/base_contact/base_contact_view.xml +++ b/addons/base_contact/base_contact_view.xml @@ -165,7 +165,7 @@ - +