diff --git a/base_location/__init__.py b/base_location/__init__.py index 878769646..bb01c93ee 100644 --- a/base_location/__init__.py +++ b/base_location/__init__.py @@ -4,6 +4,7 @@ # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza # Ignacio Ibeas +# Alejandro Santana # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -20,7 +21,4 @@ # ############################################################################## -from . import better_zip -from . import partner -from . import state -from . import company +from . import models diff --git a/base_location/__openerp__.py b/base_location/__openerp__.py index 682a4d90b..943648ac1 100644 --- a/base_location/__openerp__.py +++ b/base_location/__openerp__.py @@ -4,6 +4,7 @@ # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza # Ignacio Ibeas +# Alejandro Santana # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,19 +20,21 @@ # along with this program. If not, see . # ############################################################################## -{'name': 'Location management (aka Better ZIP)', - 'version': '0.3', - 'depends': ['base'], - 'author': 'Camptocamp', - 'description': """ -Introduces a better zip/npa management system. -It enables zip/city auto-completion on partners""", - 'website': 'http://www.camptocamp.com', - 'data': ['better_zip_view.xml', - 'state_view.xml', - 'company_view.xml', - 'partner_view.xml', - 'security/ir.model.access.csv'], - 'installable': True, - 'active': False, - } +{ + 'name': 'Location management (aka Better ZIP)', + 'version': '0.3.2', + 'depends': ['base'], + 'author': 'Camptocamp', + 'description': ''' + Introduces a better zip/npa management system. + It enables zip/city auto-completion on partners.''', + 'website': 'http://www.camptocamp.com', + 'data': ['views/better_zip.xml', + 'views/state.xml', + 'views/res_country.xml', + 'views/company.xml', + 'views/partner.xml', + 'security/ir.model.access.csv'], + 'installable': True, + 'active': False, +} diff --git a/base_location/better_zip.py b/base_location/better_zip.py deleted file mode 100644 index c51644a12..000000000 --- a/base_location/better_zip.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- -# -# -# Author: Nicolas Bessi. Copyright Camptocamp SA -# Contributor: Pedro Manuel Baeza -# Ignacio Ibeas -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -# -from openerp.osv import orm, fields - - -class BetterZip(orm.Model): - - " City/locations completion object" - - _name = "res.better.zip" - _description = __doc__ - _order = "priority" - - _columns = {'priority': fields.integer('Priority', deprecated=True), - 'name': fields.char('ZIP'), - 'city': fields.char('City', required=True), - 'state_id': fields.many2one('res.country.state', 'State'), - 'country_id': fields.many2one('res.country', 'Country'), - 'code': fields.char('City Code', size=64, - help="The official code for the city"), - } - - _defaults = {'priority': 100} - - def name_get(self, cursor, uid, ids, context=None): - res = [] - for bzip in self.browse(cursor, uid, ids, context=context): - if bzip.name: - name = [bzip.name, bzip.city] - else: - name = [bzip.city] - if bzip.state_id: - name.append(bzip.state_id.name) - if bzip.country_id: - name.append(bzip.country_id.name) - res.append((bzip.id, ", ".join(name))) - return res - - def onchange_state_id(self, cr, uid, ids, state_id=False, context=None): - result = {} - if state_id: - state = self.pool['res.country.state'].browse( - cr, uid, state_id, context=context) - if state: - result['value'] = {'country_id': state.country_id.id} - return result - - def name_search( - self, cr, uid, name, args=None, operator='ilike', context=None, - limit=100 - ): - if args is None: - args = [] - if context is None: - context = {} - ids = [] - if name: - ids = self.search( - cr, uid, [('name', 'ilike', name)] + args, limit=limit) - if not ids: - ids = self.search( - cr, uid, [('city', operator, name)] + args, limit=limit) - return self.name_get(cr, uid, ids, context=context) diff --git a/base_location/company_view.xml b/base_location/company_view.xml deleted file mode 100644 index 9aa24e358..000000000 --- a/base_location/company_view.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - res.company.form.city - res.company - - - - - - - - - diff --git a/base_location/models/__init__.py b/base_location/models/__init__.py new file mode 100644 index 000000000..351a33ad1 --- /dev/null +++ b/base_location/models/__init__.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# +# License, author and contributors information in: +# __openerp__.py file at the root folder of this module. +# + +from . import better_zip +from . import partner +from . import state +from . import company diff --git a/base_location/models/better_zip.py b/base_location/models/better_zip.py new file mode 100644 index 000000000..412d1e8f7 --- /dev/null +++ b/base_location/models/better_zip.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# +# +# Author: Nicolas Bessi. Copyright Camptocamp SA +# Contributor: Pedro Manuel Baeza +# Ignacio Ibeas +# Alejandro Santana +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +from openerp import models, fields, api + + +class BetterZip(models.Model): + '''City/locations completion object''' + + _name = "res.better.zip" + _description = __doc__ + _order = "priority" + + priority = fields.Integer('Priority', default=100, deprecated=True) + name = fields.Char('ZIP') + code = fields.Char('City Code', size=64, + help="The official code for the city") + city = fields.Char('City', required=True) + state_id = fields.Many2one('res.country.state', 'State') + country_id = fields.Many2one('res.country', 'Country') + + @api.multi + def name_get(self): + res = [] + for bzip in self: + if bzip.name: + name = [bzip.name, bzip.city] + else: + name = [bzip.city] + if bzip.state_id: + name.append(bzip.state_id.name) + if bzip.country_id: + name.append(bzip.country_id.name) + res.append((bzip.id, ", ".join(name))) + return res + + @api.onchange('state_id') + def onchange_state_id(self): + if self.state_id: + self.country_id = self.state_id.country_id + + @api.model + def name_search(self, name, args=None, operator='ilike', limit=100): + args = args or [] + recs = self.browse() + if name: + recs = self.search([('name', 'ilike', name)] + args, limit=limit) + if not recs: + recs = self.search([('city', operator, name)] + args, limit=limit) + return recs.name_get() diff --git a/base_location/company.py b/base_location/models/company.py similarity index 52% rename from base_location/company.py rename to base_location/models/company.py index 35ef3d856..33e2b923a 100644 --- a/base_location/company.py +++ b/base_location/models/company.py @@ -4,6 +4,7 @@ # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza # Ignacio Ibeas +# Alejandro Santana # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,31 +20,26 @@ # along with this program. If not, see . # # -from openerp.osv import orm, fields +from openerp import models, fields, api -class ResCompany(orm.Model): +class ResCompany(models.Model): _inherit = 'res.company' - def on_change_city(self, cr, uid, ids, zip_id, context=None): - result = {} - if context is None: - context = {} - if zip_id: - bzip = self.pool['res.better.zip'].browse( - cr, uid, zip_id, context=context) - result = {'value': { - 'zip': bzip.name, - 'country_id': bzip.country_id.id if bzip.country_id else False, - 'city': bzip.city, - 'state_id': bzip.state_id.id if bzip.state_id else False - } - } - return result + @api.multi + @api.onchange('better_zip_id') + def on_change_city(self): + for record in self: + if record.better_zip_id: + record.zip = record.better_zip_id.name + record.city = record.better_zip_id.city + record.state_id = record.better_zip_id.state_id or False + record.country_id = record.better_zip_id.country_id or False - _columns = { - 'better_zip_id': fields.many2one( - 'res.better.zip', 'Location', select=1, - help=('Use the city name or the zip code to search the location')), - } + better_zip_id = fields.Many2one( + 'res.better.zip', + string='Location', + select=1, + help=('Use the city name or the zip code to search the location'), + ) diff --git a/base_location/partner.py b/base_location/models/partner.py similarity index 55% rename from base_location/partner.py rename to base_location/models/partner.py index 76218ecd5..3dc7fe99b 100644 --- a/base_location/partner.py +++ b/base_location/models/partner.py @@ -4,6 +4,7 @@ # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza # Ignacio Ibeas +# Alejandro Santana # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,24 +20,20 @@ # along with this program. If not, see . # # -from openerp.osv import orm, fields +from openerp import models, fields, api -class ResPartner(orm.Model): - _inherit = "res.partner" - _columns = {'zip_id': fields.many2one('res.better.zip', 'City/Location')} +class ResPartner(models.Model): + _inherit = 'res.partner' + zip_id = fields.Many2one('res.better.zip', 'City/Location') - def onchange_zip_id(self, cursor, uid, ids, zip_id, context=None): - if not zip_id: - return {} - if isinstance(zip_id, list): - zip_id = zip_id[0] - bzip = self.pool['res.better.zip'].browse( - cursor, uid, zip_id, context=context) - return {'value': { - 'zip': bzip.name, - 'city': bzip.city, - 'country_id': bzip.country_id.id if bzip.country_id else False, - 'state_id': bzip.state_id.id if bzip.state_id else False, - } - } + @api.multi + @api.onchange('zip_id') + def onchange_zip_id(self): + for record in self: + if record.zip_id: + bzip = record.zip_id[0] + record.zip = bzip.name + record.city = bzip.city + record.state_id = bzip.state_id or False + record.country_id = bzip.country_id or False diff --git a/base_location/state.py b/base_location/models/state.py similarity index 81% rename from base_location/state.py rename to base_location/models/state.py index 24cc81e20..d9db12e50 100644 --- a/base_location/state.py +++ b/base_location/models/state.py @@ -4,6 +4,7 @@ # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza # Ignacio Ibeas +# Alejandro Santana # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,12 +20,11 @@ # along with this program. If not, see . # # -from openerp.osv import orm, fields +from openerp import models, fields -class ResCountryState(orm.Model): +class ResCountryState(models.Model): _inherit = 'res.country.state' - _columns = {'better_zip_ids': fields.one2many( - 'res.better.zip', 'state_id', 'Cities')} + better_zip_ids = fields.One2many('res.better.zip', 'state_id', 'Cities') diff --git a/base_location/partner_view.xml b/base_location/partner_view.xml deleted file mode 100644 index ae4e3190c..000000000 --- a/base_location/partner_view.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - res.partner.zip_id.2 - res.partner - - -
- -
- - - -
-
-
-
diff --git a/base_location/better_zip_view.xml b/base_location/views/better_zip.xml similarity index 81% rename from base_location/better_zip_view.xml rename to base_location/views/better_zip.xml index de67ec1af..221bfb977 100644 --- a/base_location/better_zip_view.xml +++ b/base_location/views/better_zip.xml @@ -12,7 +12,7 @@ - + @@ -27,6 +27,7 @@ + @@ -39,11 +40,18 @@ + + + + + + + - + Cites/locations Management res.better.zip diff --git a/base_location/views/company.xml b/base_location/views/company.xml new file mode 100644 index 000000000..32c955a05 --- /dev/null +++ b/base_location/views/company.xml @@ -0,0 +1,19 @@ + + + + + + res.company.form.city + res.company + + + + + + + + + diff --git a/base_location/views/partner.xml b/base_location/views/partner.xml new file mode 100644 index 000000000..7e7b4cc0d --- /dev/null +++ b/base_location/views/partner.xml @@ -0,0 +1,26 @@ + + + + + res.partner.zip_id.2 + res.partner + + +
+ +
+ + + +
+
+ +
+
diff --git a/base_location/views/res_country.xml b/base_location/views/res_country.xml new file mode 100644 index 000000000..5bdb089a5 --- /dev/null +++ b/base_location/views/res_country.xml @@ -0,0 +1,36 @@ + + + + + + res.country.search + res.country + + + + + + + + + + res.country.tree + res.country + + + + + + + + + + + + + + + + + + diff --git a/base_location/state_view.xml b/base_location/views/state.xml similarity index 100% rename from base_location/state_view.xml rename to base_location/views/state.xml