Browse Source

[IMP] base_location: Updated to v8 syntax and uses. Added filters in some views. Added two columns in respective tree views.

pull/81/head
Alejandro Santana 10 years ago
parent
commit
9c82d94f73
  1. 6
      base_location/__init__.py
  2. 35
      base_location/__openerp__.py
  3. 82
      base_location/better_zip.py
  4. 20
      base_location/company_view.xml
  5. 10
      base_location/models/__init__.py
  6. 68
      base_location/models/better_zip.py
  7. 40
      base_location/models/company.py
  8. 33
      base_location/models/partner.py
  9. 8
      base_location/models/state.py
  10. 30
      base_location/partner_view.xml
  11. 12
      base_location/views/better_zip.xml
  12. 19
      base_location/views/company.xml
  13. 26
      base_location/views/partner.xml
  14. 36
      base_location/views/res_country.xml
  15. 0
      base_location/views/state.xml

6
base_location/__init__.py

@ -4,6 +4,7 @@
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Contributor: Pedro Manuel Baeza <pedro.baeza@serviciosbaeza.com>
# Ignacio Ibeas <ignacio@acysos.com>
# Alejandro Santana <alejandrosantana@anubia.es>
#
# 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

35
base_location/__openerp__.py

@ -4,6 +4,7 @@
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Contributor: Pedro Manuel Baeza <pedro.baeza@serviciosbaeza.com>
# Ignacio Ibeas <ignacio@acysos.com>
# Alejandro Santana <alejandrosantana@anubia.es>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
{'name': 'Location management (aka Better ZIP)',
'version': '0.3.1',
'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,
}

82
base_location/better_zip.py

@ -1,82 +0,0 @@
# -*- coding: utf-8 -*-
#
#
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Contributor: Pedro Manuel Baeza <pedro.baeza@serviciosbaeza.com>
# Ignacio Ibeas <ignacio@acysos.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
#
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)

20
base_location/company_view.xml

@ -1,20 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- Add cities to the company form -->
<record id="view_company_form_city" model="ir.ui.view">
<field name="name">res.company.form.city</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<field name="street2" position="after">
<field name="better_zip_id"
options="{'create_name_field': 'city'}"
colspan="4"
on_change="on_change_city(better_zip_id)"
placeholder="City completion" />
</field>
</field>
</record>
</data>
</openerp>

10
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

68
base_location/models/better_zip.py

@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
#
#
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Contributor: Pedro Manuel Baeza <pedro.baeza@serviciosbaeza.com>
# Ignacio Ibeas <ignacio@acysos.com>
# Alejandro Santana <alejandrosantana@anubia.es>
#
# 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 <http://www.gnu.org/licenses/>.
#
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()

40
base_location/company.py → base_location/models/company.py

@ -4,6 +4,7 @@
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Contributor: Pedro Manuel Baeza <pedro.baeza@serviciosbaeza.com>
# Ignacio Ibeas <ignacio@acysos.com>
# Alejandro Santana <alejandrosantana@anubia.es>
#
# 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 <http://www.gnu.org/licenses/>.
#
#
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'),
)

33
base_location/partner.py → base_location/models/partner.py

@ -4,6 +4,7 @@
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Contributor: Pedro Manuel Baeza <pedro.baeza@serviciosbaeza.com>
# Ignacio Ibeas <ignacio@acysos.com>
# Alejandro Santana <alejandrosantana@anubia.es>
#
# 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 <http://www.gnu.org/licenses/>.
#
#
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

8
base_location/state.py → base_location/models/state.py

@ -4,6 +4,7 @@
# Author: Nicolas Bessi. Copyright Camptocamp SA
# Contributor: Pedro Manuel Baeza <pedro.baeza@serviciosbaeza.com>
# Ignacio Ibeas <ignacio@acysos.com>
# Alejandro Santana <alejandrosantana@anubia.es>
#
# 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 <http://www.gnu.org/licenses/>.
#
#
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')

30
base_location/partner_view.xml

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.zip_id.2</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<div class="address_format" position="before">
<field name="zip_id"
options="{'create_name_field': 'city'}"
on_change="onchange_zip_id(zip_id)"
placeholder="City completion"
attrs="{'invisible': [('use_parent_address','=',True)]}"
class="oe_edit_only"
/>
</div>
<xpath expr="//field[@name='child_ids']/form//div[@class='address_format']" position="before">
<field name="zip_id"
options="{'create_name_field': 'city'}"
on_change="onchange_zip_id(zip_id)"
placeholder="City completion"
attrs="{'invisible': [('use_parent_address','=',True)]}"
class="oe_edit_only"
/>
</xpath>
</field>
</record>
</data>
</openerp>

12
base_location/better_zip_view.xml → base_location/views/better_zip.xml

@ -12,7 +12,7 @@
<field name="code"/>
<field name="city"/>
<field name="priority"/>
<field name="state_id" on_change="onchange_state_id(state_id)"/>
<field name="state_id"/>
<field name="country_id"/>
</group>
</form>
@ -27,6 +27,7 @@
<field name="name"/>
<field name="code"/>
<field name="city"/>
<field name="state_id"/>
<field name="country_id"/>
<field name="priority"/>
</tree>
@ -39,11 +40,18 @@
<field name="arch" type="xml">
<search string="Search city">
<field name="name"/>
<field name="code"/>
<field name="city"/>
<field name="state_id"/>
<field name="country_id"/>
<group expand="0" string="Group By">
<filter string="State" domain="[]" context="{'group_by':'state_id'}"/>
<filter string="Country" domain="[]" context="{'group_by':'country_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_zip_tree" model="ir.actions.act_window">
<field name="name">Cites/locations Management</field>
<field name="res_model">res.better.zip</field>

19
base_location/views/company.xml

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- Add cities to the company form -->
<record id="view_company_form_city" model="ir.ui.view">
<field name="name">res.company.form.city</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form" />
<field name="arch" type="xml">
<field name="street2" position="after">
<field name="better_zip_id"
options="{'create_name_field': 'city'}"
colspan="4"
placeholder="City completion" />
</field>
</field>
</record>
</data>
</openerp>

26
base_location/views/partner.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.zip_id.2</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<div class="address_format" position="before">
<field name="zip_id"
options="{'create_name_field': 'city'}"
placeholder="City completion"
attrs="{'invisible': [('use_parent_address','=',True)]}"
class="oe_edit_only" />
</div>
<xpath expr="//field[@name='child_ids']/form//div[@class='address_format']" position="before">
<field name="zip_id" options="{'create_name_field': 'city'}"
placeholder="City completion"
attrs="{'invisible': [('use_parent_address','=',True)]}"
class="oe_edit_only" />
</xpath>
</field>
</record>
</data>
</openerp>

36
base_location/views/res_country.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_country_search" model="ir.ui.view">
<field name="name">res.country.search</field>
<field name="model">res.country</field>
<field name="arch" type="xml">
<search string="Country">
<field name="name"/>
<field name="code"/>
</search>
</field>
</record>
<record id="view_country_tree_currency" model="ir.ui.view">
<field name="name">res.country.tree</field>
<field name="model">res.country</field>
<field name="inherit_id" ref="base.view_country_tree"/>
<field name="arch" type="xml">
<field name="code" position="after">
<field name="currency_id"/>
</field>
</field>
</record>
<!-- <record id="action_country" model="ir.actions.act_window"> -->
<!-- <field name="name">Countries</field> -->
<!-- <field name="type">ir.actions.act_window</field> -->
<!-- <field name="res_model">res.country</field> -->
<!-- <field name="view_type">form</field> -->
<!-- <field name="help">Display and manage the list of all countries that can be assigned to your partner records. You can create or delete countries to make sure the ones you are working on will be maintained.</field> -->
<!-- </record> -->
</data>
</openerp>

0
base_location/state_view.xml → base_location/views/state.xml

Loading…
Cancel
Save