From 46427a488d8c38885cb880498d9a1f1af770a7d6 Mon Sep 17 00:00:00 2001 From: Alejandro Santana Date: Mon, 19 Jan 2015 00:35:12 +0100 Subject: [PATCH] [IMP] base_location: Updated to v8 syntax and uses. Added filters in some views. Added two columns in respective tree views. --- base_location/README.rst | 20 ++++++ base_location/__init__.py | 6 +- base_location/__openerp__.py | 43 ++++++++----- base_location/better_zip.py | 82 ------------------------ base_location/better_zip_view.xml | 63 ------------------ base_location/company_view.xml | 20 ------ base_location/models/__init__.py | 10 +++ base_location/models/better_zip.py | 67 +++++++++++++++++++ base_location/{ => models}/company.py | 39 +++++------ base_location/{ => models}/partner.py | 31 ++++----- base_location/{ => models}/state.py | 8 +-- base_location/partner_view.xml | 30 --------- base_location/state_view.xml | 26 -------- base_location/views/better_zip_view.xml | 70 ++++++++++++++++++++ base_location/views/company_view.xml | 21 ++++++ base_location/views/partner_view.xml | 27 ++++++++ base_location/views/res_country_view.xml | 17 +++++ base_location/views/state_view.xml | 26 ++++++++ 18 files changed, 321 insertions(+), 285 deletions(-) create mode 100644 base_location/README.rst delete mode 100644 base_location/better_zip.py delete mode 100644 base_location/better_zip_view.xml delete mode 100644 base_location/company_view.xml create mode 100644 base_location/models/__init__.py create mode 100644 base_location/models/better_zip.py rename base_location/{ => models}/company.py (52%) rename base_location/{ => models}/partner.py (55%) rename base_location/{ => models}/state.py (81%) delete mode 100644 base_location/partner_view.xml delete mode 100644 base_location/state_view.xml create mode 100644 base_location/views/better_zip_view.xml create mode 100644 base_location/views/company_view.xml create mode 100644 base_location/views/partner_view.xml create mode 100644 base_location/views/res_country_view.xml create mode 100644 base_location/views/state_view.xml diff --git a/base_location/README.rst b/base_location/README.rst new file mode 100644 index 000000000..817183a5b --- /dev/null +++ b/base_location/README.rst @@ -0,0 +1,20 @@ +Enhanced ZIP management +======================= + +This module introduces a better zip/npa management system. + +It enables zip, city, state and country auto-completion on partners and companies. + +Also allows different search filters. + + +Author +------ + +- Nicolas Bessi. (Copyright Camptocamp SA) + +Contributors +------------ +- Ignacio Ibeas (Acysos S.L.) +- Pedro M. Baeza +- Alejandro Santana 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..3a8d3b223 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,29 @@ # 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': '8.0.1.0.0', + 'depends': ['base'], + 'author': "Camptocamp," + "ACYSOS S.L.," + "Alejandro Santana," + "Serv. Tecnol. Avanzados - Pedro M. Baeza," + "Odoo Community Association (OCA)", + 'license': "AGPL-3", + 'contributors': [ + 'Pedro M. Baeza ', + 'Ignacio Ibeas (Acysos S.L.)', + 'Alejandro Santana ', + ], + 'summary': '''Enhanced zip/npa management system''', + 'website': 'http://www.camptocamp.com', + 'data': ['views/better_zip_view.xml', + 'views/state_view.xml', + 'views/res_country_view.xml', + 'views/company_view.xml', + 'views/partner_view.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/better_zip_view.xml b/base_location/better_zip_view.xml deleted file mode 100644 index de67ec1af..000000000 --- a/base_location/better_zip_view.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - res.better.zip.form - res.better.zip - -
- - - - - - - - -
-
-
- - - res.better.zip.tree - res.better.zip - - - - - - - - - - - - - res.better.zip.select - res.better.zip - - - - - - - - - - Cites/locations Management - res.better.zip - form - tree,form - - - - - -
-
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..3f86f8ed4 --- /dev/null +++ b/base_location/models/better_zip.py @@ -0,0 +1,67 @@ +# -*- 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 = "name asc" + + 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..6368761cf 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,25 @@ # 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.one + @api.onchange('better_zip_id') + def on_change_city(self): + if self.better_zip_id: + self.zip = self.better_zip_id.name + self.city = self.better_zip_id.city + self.state_id = self.better_zip_id.state_id + self.country_id = self.better_zip_id.country_id - _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..c16ae83b1 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,18 @@ # 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.one + @api.onchange('zip_id') + def onchange_zip_id(self): + if self.zip_id: + self.zip = self.zip_id.name + self.city = self.zip_id.city + self.state_id = self.zip_id.state_id + self.country_id = self.zip_id.country_id 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/state_view.xml b/base_location/state_view.xml deleted file mode 100644 index 96497c9e5..000000000 --- a/base_location/state_view.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - view_country_state_form2 - res.country.state - - - - - - - - - - - - - - - - diff --git a/base_location/views/better_zip_view.xml b/base_location/views/better_zip_view.xml new file mode 100644 index 000000000..d0e1782a7 --- /dev/null +++ b/base_location/views/better_zip_view.xml @@ -0,0 +1,70 @@ + + + + + + res.better.zip.form + res.better.zip + +
+ + + + + + + +
+
+
+ + + res.better.zip.tree + res.better.zip + + + + + + + + + + + + + res.better.zip.select + res.better.zip + + + + + + + + + + + + + + + + + Cites/locations Management + res.better.zip + form + tree,form + + + + + + +
+
diff --git a/base_location/views/company_view.xml b/base_location/views/company_view.xml new file mode 100644 index 000000000..e723db3a7 --- /dev/null +++ b/base_location/views/company_view.xml @@ -0,0 +1,21 @@ + + + + + + + res.company.form.city + res.company + + + + + + + + + + diff --git a/base_location/views/partner_view.xml b/base_location/views/partner_view.xml new file mode 100644 index 000000000..517a179e9 --- /dev/null +++ b/base_location/views/partner_view.xml @@ -0,0 +1,27 @@ + + + + + + res.partner.zip_id.2 + res.partner + + +
+ +
+ + + +
+
+ +
+
diff --git a/base_location/views/res_country_view.xml b/base_location/views/res_country_view.xml new file mode 100644 index 000000000..7e1deaa09 --- /dev/null +++ b/base_location/views/res_country_view.xml @@ -0,0 +1,17 @@ + + + + + + res.country.search + res.country + + + + + + + + + + diff --git a/base_location/views/state_view.xml b/base_location/views/state_view.xml new file mode 100644 index 000000000..38b550c97 --- /dev/null +++ b/base_location/views/state_view.xml @@ -0,0 +1,26 @@ + + + + + + view_country_state_form2 + res.country.state + + + + + + + + + + + + + + + +