Browse Source

Merge pull request #25 from savoirfairelinux/7.0-length

8.0 Fix pep8 (line length)
pull/42/head
Yannick Vaucher 10 years ago
parent
commit
f57e2a6239
  1. 1
      __unported__/account_partner_merge/__init__.py
  2. 12
      __unported__/account_partner_merge/partner_merge.py
  3. 131
      __unported__/base_contact/base_contact.py
  4. 127
      __unported__/base_contact/tests/test_base_contact.py
  5. 2
      __unported__/firstname_display_name_trigger/__init__.py
  6. 6
      __unported__/firstname_display_name_trigger/__openerp__.py
  7. 26
      __unported__/firstname_display_name_trigger/res_partner.py
  8. 12
      __unported__/firstname_display_name_trigger/tests/test_display_name.py
  9. 1
      base_location/__init__.py
  10. 2
      base_partner_merge/__init__.py
  11. 10
      base_partner_merge/base_partner_merge.py
  12. 2
      base_partner_sequence/__init__.py
  13. 1
      partner_firstname/__init__.py
  14. 1
      portal_partner_merge/__init__.py
  15. 4
      portal_partner_merge/wizard/__init__.py
  16. 2
      res_partner_affiliate/__init__.py

1
__unported__/account_partner_merge/__init__.py

@ -18,4 +18,5 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import partner_merge

12
__unported__/account_partner_merge/partner_merge.py

@ -25,12 +25,16 @@ class MergePartnerAutomatic(orm.TransientModel):
_inherit = 'base.partner.merge.automatic.wizard'
def _update_values(self, cr, uid, src_partners, dst_partner, context=None):
"""Make sure we don't forget to update the stored value of
invoice field commercial_partner_id
"""
Make sure we don't forget to update the stored value of invoice field commercial_partner_id
"""
super(MergePartnerAutomatic, self)._update_values(cr, uid, src_partners, dst_partner, context=context)
super(MergePartnerAutomatic, self)._update_values(
cr, uid, src_partners, dst_partner, context=context
)
invoice_obj = self.pool.get('account.invoice')
invoice_ids = invoice_obj.search(cr, uid, [('partner_id', '=', dst_partner.id)], context=context)
invoice_ids = invoice_obj.search(
cr, uid, [('partner_id', '=', dst_partner.id)], context=context
)
# call write to refresh stored value
invoice_obj.write(cr, uid, invoice_ids, {}, context=context)

131
__unported__/base_contact/base_contact.py

@ -20,14 +20,16 @@
##############################################################################
from openerp.osv import fields, orm, expression
from openerp.tools.translate import _
class res_partner(orm.Model):
_inherit = 'res.partner'
_contact_type = [
('standalone', 'Standalone Contact'),
('attached', 'Attached to existing Contact'),
def _type_selection(self, cr, uid, context=None):
return [
('standalone', _('Standalone Contact')),
('attached', _('Attached to existing Contact')),
]
def _get_contact_type(self, cr, uid, ids, field_name, args, context=None):
@ -38,14 +40,32 @@ class res_partner(orm.Model):
return result
_columns = {
'contact_type': fields.function(_get_contact_type, type='selection', selection=_contact_type,
string='Contact Type', required=True, select=1, store=True),
'contact_id': fields.many2one('res.partner', 'Main Contact',
domain=[('is_company', '=', False), ('contact_type', '=', 'standalone')]),
'other_contact_ids': fields.one2many('res.partner', 'contact_id', 'Others Positions'),
'contact_type': fields.function(
_get_contact_type,
type='selection',
selection=lambda self, *a, **kw: self._type_selection(*a, **kw),
string='Contact Type',
required=True,
select=1,
store=True,
),
'contact_id': fields.many2one(
'res.partner',
'Main Contact',
domain=[
('is_company', '=', False),
('contact_type', '=', 'standalone'),
],
),
'other_contact_ids': fields.one2many(
'res.partner',
'contact_id',
'Others Positions',
),
# Person specific fields
# add a 'birthdate' as date field, i.e different from char 'birthdate' introduced v6.1!
# add a 'birthdate' as date field, i.e different from char
# 'birthdate' introduced v6.1!
'birthdate_date': fields.date('Birthdate'),
'nationality_id': fields.many2one('res.country', 'Nationality'),
}
@ -57,53 +77,68 @@ class res_partner(orm.Model):
def _basecontact_check_context(self, cr, user, mode, context=None):
""" Remove 'search_show_all_positions' for non-search mode.
Keeping it in context can result in unexpected behaviour (ex: reading
one2many might return wrong result - i.e with "attached contact" removed
even if it's directly linked to a company). """
one2many might return wrong result - i.e with "attached contact"
removed even if it's directly linked to a company).
"""
context = dict(context or {})
if mode != 'search':
context.pop('search_show_all_positions', None)
return context
def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False):
def search(
self, cr, user, args, offset=0, limit=None, order=None,
context=None, count=False):
""" Display only standalone contact matching ``args`` or having
attached contact matching ``args`` """
if context is None:
context = {}
if context.get('search_show_all_positions') is False:
args = expression.normalize_domain(args)
attached_contact_args = expression.AND((args, [('contact_type', '=', 'attached')]))
attached_contact_ids = super(res_partner, self).search(cr, user, attached_contact_args,
context=context)
attached_contact_args = expression.AND(
(args, [('contact_type', '=', 'attached')])
)
attached_contact_ids = super(res_partner, self).search(
cr, user, attached_contact_args, context=context
)
args = expression.OR((
expression.AND(([('contact_type', '=', 'standalone')], args)),
[('other_contact_ids', 'in', attached_contact_ids)],
))
return super(res_partner, self).search(cr, user, args, offset=offset, limit=limit,
order=order, context=context, count=count)
return super(res_partner, self).search(
cr, user, args, offset=offset, limit=limit, order=order,
context=context, count=count
)
def create(self, cr, user, vals, context=None):
context = self._basecontact_check_context(cr, user, 'create', context)
if not vals.get('name') and vals.get('contact_id'):
vals['name'] = self.browse(cr, user, vals['contact_id'], context=context).name
vals['name'] = self.browse(
cr, user, vals['contact_id'], context=context).name
return super(res_partner, self).create(cr, user, vals, context=context)
def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
def read(
self, cr, user, ids, fields=None, context=None,
load='_classic_read'):
context = self._basecontact_check_context(cr, user, 'read', context)
return super(res_partner, self).read(cr, user, ids, fields=fields, context=context, load=load)
return super(res_partner, self).read(
cr, user, ids, fields=fields, context=context, load=load)
def write(self, cr, user, ids, vals, context=None):
context = self._basecontact_check_context(cr, user, 'write', context)
return super(res_partner, self).write(cr, user, ids, vals, context=context)
return super(
res_partner, self).write(cr, user, ids, vals, context=context)
def unlink(self, cr, user, ids, context=None):
context = self._basecontact_check_context(cr, user, 'unlink', context)
return super(res_partner, self).unlink(cr, user, ids, context=context)
def _commercial_partner_compute(self, cr, uid, ids, name, args, context=None):
def _commercial_partner_compute(
self, cr, uid, ids, name, args, context=None):
""" Returns the partner that is considered the commercial
entity of this partner. The commercial entity holds the master data
for all commercial fields (see :py:meth:`~_commercial_fields`) """
result = super(res_partner, self)._commercial_partner_compute(cr, uid, ids, name, args, context=context)
result = super(res_partner, self)._commercial_partner_compute(
cr, uid, ids, name, args, context=context)
for partner in self.browse(cr, uid, ids, context=context):
if partner.contact_type == 'attached' and not partner.parent_id:
result[partner.id] = partner.contact_id.id
@ -115,12 +150,14 @@ class res_partner(orm.Model):
return ['name', 'title']
def _contact_sync_from_parent(self, cr, uid, partner, context=None):
""" Handle sync of contact fields when a new parent contact entity is set,
as if they were related fields """
""" Handle sync of contact fields when a new parent contact entity
is set, as if they were related fields
"""
if partner.contact_id:
contact_fields = self._contact_fields(cr, uid, context=context)
sync_vals = self._update_fields_values(cr, uid, partner.contact_id,
contact_fields, context=context)
sync_vals = self._update_fields_values(
cr, uid, partner.contact_id, contact_fields, context=context
)
partner.write(sync_vals)
def update_contact(self, cr, uid, ids, vals, context=None):
@ -129,31 +166,42 @@ class res_partner(orm.Model):
if context.get('__update_contact_lock'):
return
contact_fields = self._contact_fields(cr, uid, context=context)
contact_vals = dict((field, vals[field]) for field in contact_fields if field in vals)
contact_vals = dict(
(field, vals[field]) for field in contact_fields if field in vals
)
if contact_vals:
ctx = dict(context, __update_contact_lock=True)
self.write(cr, uid, ids, contact_vals, context=ctx)
def _fields_sync(self, cr, uid, partner, update_values, context=None):
""" Sync commercial fields and address fields from company and to children,
contact fields from contact and to attached contact after create/update,
just as if those were all modeled as fields.related to the parent """
super(res_partner, self)._fields_sync(cr, uid, partner, update_values, context=context)
"""Sync commercial fields and address fields from company and to
children, contact fields from contact and to attached contact
after create/update, just as if those were all modeled as
fields.related to the parent
"""
super(res_partner, self)._fields_sync(
cr, uid, partner, update_values, context=context
)
contact_fields = self._contact_fields(cr, uid, context=context)
# 1. From UPSTREAM: sync from parent contact
if update_values.get('contact_id'):
self._contact_sync_from_parent(cr, uid, partner, context=context)
# 2. To DOWNSTREAM: sync contact fields to parent or related
elif any(field in contact_fields for field in update_values):
update_ids = [c.id for c in partner.other_contact_ids if not c.is_company]
update_ids = [
c.id for c in partner.other_contact_ids if not c.is_company
]
if partner.contact_id:
update_ids.append(partner.contact_id.id)
self.update_contact(cr, uid, update_ids, update_values, context=context)
self.update_contact(
cr, uid, update_ids, update_values, context=context
)
def onchange_contact_id(self, cr, uid, ids, contact_id, context=None):
values = {}
if contact_id:
values['name'] = self.browse(cr, uid, contact_id, context=context).name
values['name'] = self.browse(
cr, uid, contact_id, context=context).name
return {'value': values}
def onchange_contact_type(self, cr, uid, ids, contact_type, context=None):
@ -166,18 +214,23 @@ class res_partner(orm.Model):
class ir_actions_window(orm.Model):
_inherit = 'ir.actions.act_window'
def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
def read(
self, cr, user, ids, fields=None, context=None,
load='_classic_read'):
action_ids = ids
if isinstance(ids, (int, long)):
action_ids = [ids]
actions = super(ir_actions_window, self).read(cr, user, action_ids, fields=fields, context=context, load=load)
actions = super(ir_actions_window, self).read(
cr, user, action_ids, fields=fields, context=context, load=load
)
for action in actions:
if action.get('res_model', '') == 'res.partner':
# By default, only show standalone contact
action_context = action.get('context', '{}') or '{}'
if 'search_show_all_positions' not in action_context:
action['context'] = action_context.replace('{',
"{'search_show_all_positions': False,", 1)
action['context'] = action_context.replace(
'{', "{'search_show_all_positions': False,", 1
)
if isinstance(ids, (int, long)):
if actions:
return actions[0]

127
__unported__/base_contact/tests/test_base_contact.py

@ -35,14 +35,18 @@ class Test_Base_Contact(common.TransactionCase):
for attr, module, name in [
('main_partner_id', 'base', 'main_partner'),
('bob_contact_id', 'base_contact', 'res_partner_contact1'),
('bob_job1_id', 'base_contact', 'res_partner_contact1_work_position1'),
('bob_job1_id', 'base_contact',
'res_partner_contact1_work_position1'),
('roger_contact_id', 'base', 'res_partner_main2'),
('roger_job2_id', 'base_contact', 'res_partner_main2_position_consultant')]:
('roger_job2_id', 'base_contact',
'res_partner_main2_position_consultant')]:
r = ModelData.get_object_reference(cr, uid, module, name)
setattr(self, attr, r[1] if r else False)
def test_00_show_only_standalone_contact(self):
"""Check that only standalone contact are shown if context explicitly state to not display all positions"""
"""Check that only standalone contact are shown if context
explicitly state to not display all positions
"""
cr, uid = self.cr, self.uid
ctx = {'search_show_all_positions': False}
partner_ids = self.partner.search(cr, uid, [], context=ctx)
@ -51,7 +55,9 @@ class Test_Base_Contact(common.TransactionCase):
self.assertTrue(self.roger_job2_id not in partner_ids)
def test_01_show_all_positions(self):
"""Check that all contact are show if context is empty or explicitly state to display all positions"""
"""Check that all contact are show if context is empty or
explicitly state to display all positions
"""
cr, uid = self.cr, self.uid
partner_ids = self.partner.search(cr, uid, [], context=None)
@ -64,41 +70,77 @@ class Test_Base_Contact(common.TransactionCase):
self.assertTrue(self.roger_job2_id in partner_ids)
def test_02_reading_other_contact_one2many_show_all_positions(self):
"""Check that readonly partner's ``other_contact_ids`` return all values whatever the context"""
"""Check that readonly partner's ``other_contact_ids`` return
all values whatever the context
"""
cr, uid = self.cr, self.uid
def read_other_contacts(pid, context=None):
return self.partner.read(cr, uid, [pid], ['other_contact_ids'], context=context)[0]['other_contact_ids']
return self.partner.read(
cr, uid, [pid], ['other_contact_ids'],
context=context)[0]['other_contact_ids']
def read_contacts(pid, context=None):
return self.partner.read(cr, uid, [pid], ['child_ids'], context=context)[0]['child_ids']
return self.partner.read(
cr, uid, [pid], ['child_ids'], context=context)[0]['child_ids']
ctx = None
self.assertEqual(read_other_contacts(self.bob_contact_id, context=ctx), [self.bob_job1_id])
self.assertEqual(
read_other_contacts(self.bob_contact_id, context=ctx),
[self.bob_job1_id],
)
ctx = {'search_show_all_positions': False}
self.assertEqual(read_other_contacts(self.bob_contact_id, context=ctx), [self.bob_job1_id])
self.assertEqual(read_other_contacts(
self.bob_contact_id, context=ctx),
[self.bob_job1_id],
)
ctx = {'search_show_all_positions': True}
self.assertEqual(read_other_contacts(self.bob_contact_id, context=ctx), [self.bob_job1_id])
self.assertEqual(
read_other_contacts(self.bob_contact_id, context=ctx),
[self.bob_job1_id],
)
ctx = None
self.assertTrue(self.bob_job1_id in read_contacts(self.main_partner_id, context=ctx))
self.assertIn(
self.bob_job1_id,
read_contacts(self.main_partner_id, context=ctx),
)
ctx = {'search_show_all_positions': False}
self.assertTrue(self.bob_job1_id in read_contacts(self.main_partner_id, context=ctx))
self.assertIn(
self.bob_job1_id,
read_contacts(self.main_partner_id, context=ctx),
)
ctx = {'search_show_all_positions': True}
self.assertTrue(self.bob_job1_id in read_contacts(self.main_partner_id, context=ctx))
self.assertIn(
self.bob_job1_id,
read_contacts(self.main_partner_id, context=ctx),
)
def test_03_search_match_attached_contacts(self):
"""Check that searching partner also return partners having attached contacts matching search criteria"""
"""Check that searching partner also return partners having
attached contacts matching search criteria
"""
cr, uid = self.cr, self.uid
# Bob's contact has one other position which is related to 'Your Company'
# so search for all contacts working for 'Your Company' should contain bob position.
partner_ids = self.partner.search(cr, uid, [('parent_id', 'ilike', 'Your Company')], context=None)
self.assertTrue(self.bob_job1_id in partner_ids)
# but when searching without 'all positions', we should get the position standalone contact instead.
# Bob's contact has one other position which is related to
# 'Your Company'
# so search for all contacts working for 'Your Company' should contain
# bob position.
partner_ids = self.partner.search(
cr, uid,
[('parent_id', 'ilike', 'Your Company')],
context=None
)
self.assertIn(self.bob_job1_id, partner_ids, )
# but when searching without 'all positions',
# we should get the position standalone contact instead.
ctx = {'search_show_all_positions': False}
partner_ids = self.partner.search(cr, uid, [('parent_id', 'ilike', 'Your Company')], context=ctx)
self.assertTrue(self.bob_contact_id in partner_ids)
partner_ids = self.partner.search(
cr, uid,
[('parent_id', 'ilike', 'Your Company')],
context=ctx
)
self.assertIn(self.bob_contact_id, partner_ids, )
def test_04_contact_creation(self):
"""Check that we're begin to create a contact"""
@ -106,31 +148,54 @@ class Test_Base_Contact(common.TransactionCase):
# Create a contact using only name
new_contact_id = self.partner.create(cr, uid, {'name': 'Bob Egnops'})
self.assertEqual(self.partner.browse(cr, uid, new_contact_id).contact_type, 'standalone')
self.assertEqual(
self.partner.browse(cr, uid, new_contact_id).contact_type,
'standalone',
)
# Create a contact with only contact_id
new_contact_id = self.partner.create(cr, uid, {'contact_id': self.bob_contact_id})
new_contact_id = self.partner.create(
cr, uid, {'contact_id': self.bob_contact_id}
)
new_contact = self.partner.browse(cr, uid, new_contact_id)
self.assertEqual(new_contact.name, 'Bob Egnops')
self.assertEqual(new_contact.contact_type, 'attached')
# Create a contact with both contact_id and name;
# contact's name should override provided value in that case
new_contact_id = self.partner.create(cr, uid, {'contact_id': self.bob_contact_id, 'name': 'Rob Egnops'})
self.assertEqual(self.partner.browse(cr, uid, new_contact_id).name, 'Bob Egnops')
new_contact_id = self.partner.create(
cr, uid, {'contact_id': self.bob_contact_id, 'name': 'Rob Egnops'}
)
self.assertEqual(
self.partner.browse(cr, uid, new_contact_id).name,
'Bob Egnops'
)
# Reset contact to standalone
self.partner.write(cr, uid, [new_contact_id], {'contact_id': False})
self.assertEqual(self.partner.browse(cr, uid, new_contact_id).contact_type, 'standalone')
self.assertEqual(
self.partner.browse(cr, uid, new_contact_id).contact_type,
'standalone',
)
def test_05_contact_fields_sync(self):
"""Check that contact's fields are correctly synced between parent contact or related contacts"""
"""Check that contact's fields are correctly synced between
parent contact or related contacts
"""
cr, uid = self.cr, self.uid
# Test DOWNSTREAM sync
self.partner.write(cr, uid, [self.bob_contact_id], {'name': 'Rob Egnops'})
self.assertEqual(self.partner.browse(cr, uid, self.bob_job1_id).name, 'Rob Egnops')
self.partner.write(
cr, uid, [self.bob_contact_id], {'name': 'Rob Egnops'}
)
self.assertEqual(
self.partner.browse(cr, uid, self.bob_job1_id).name,
'Rob Egnops',
)
# Test UPSTREAM sync
self.partner.write(cr, uid, [self.bob_job1_id], {'name': 'Bob Egnops'})
self.assertEqual(self.partner.browse(cr, uid, self.bob_contact_id).name, 'Bob Egnops')
self.assertEqual(
self.partner.browse(cr, uid, self.bob_contact_id).name,
'Bob Egnops',
)

2
__unported__/firstname_display_name_trigger/__init__.py

@ -20,5 +20,3 @@
##############################################################################
import res_partner
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

6
__unported__/firstname_display_name_trigger/__openerp__.py

@ -20,7 +20,8 @@
##############################################################################
{
'name': 'Link module if partner_lastname and account_report_company are installed',
'name': ('Link module if partner_lastname and account_report_company are '
'installed'),
'version': '1.0',
'author': 'Camptocamp',
'maintainer': 'Camptocamp',
@ -31,7 +32,8 @@
'partner_firstname',
],
'description': """
Adapt the computation of display name so that it gets visible in tree and kanban views.
Adapt the computation of display name so that it gets visible in tree and
kanban views.
""",
'website': 'http://www.camptocamp.com',
'data': [],

26
__unported__/firstname_display_name_trigger/res_partner.py

@ -42,7 +42,9 @@ class ResPartner(orm.Model):
if record.parent_id and not record.is_company:
name = "%s, %s" % (record.parent_id.name, name)
if context.get('show_address'):
name = name + "\n" + self._display_address(cr, uid, record, without_company=True, context=context)
name = name + "\n" + self._display_address(
cr, uid, record, without_company=True, context=context
)
name = name.replace('\n\n', '\n')
name = name.replace('\n\n', '\n')
if context.get('show_email') and record.email:
@ -51,14 +53,26 @@ class ResPartner(orm.Model):
return res
_display_name_store_triggers = {
'res.partner': (lambda self, cr, uid, ids, context=None: self.search(cr, uid, [('id', 'child_of', ids)]),
['parent_id', 'is_company', 'name', 'firstname', 'lastname'], 10)
'res.partner': (
lambda self, cr, uid, ids, context=None:
self.search(cr, uid, [
('id', 'child_of', ids)
]),
['parent_id', 'is_company', 'name', 'firstname', 'lastname'],
10
)
}
# indirection to avoid passing a copy of the overridable method when declaring the function field
_display_name = lambda self, *args, **kwargs: self._display_name_compute(*args, **kwargs)
# indirection to avoid passing a copy of the overridable method when
# declaring the function field
_display_name = lambda self, *a, **kw: self._display_name_compute(*a, **kw)
_columns = {
# extra field to allow ORDER BY to match visible names
'display_name': fields.function(_display_name, type='char', string='Name', store=_display_name_store_triggers),
'display_name': fields.function(
_display_name,
type='char',
string='Name',
store=_display_name_store_triggers
),
}

12
__unported__/firstname_display_name_trigger/tests/test_display_name.py

@ -20,7 +20,11 @@ class test_display_name(common.TransactionCase):
})
partner_records = self.res_partner.browse(cr, uid, [partner_id])
p1 = partner_records[0]
self.assertEqual(p1.display_name, 'Lastname Firstname', 'Partner display_name incorrect')
self.assertEqual(
p1.display_name,
'Lastname Firstname',
'Partner display_name incorrect'
)
def test_01_res_partner_write_lastname(self):
""" Test if the display name has been correctly set """
@ -33,7 +37,11 @@ class test_display_name(common.TransactionCase):
partner_records = self.res_partner.browse(cr, uid, [partner_id])
p1 = partner_records[0]
self.res_partner.write(cr, uid, partner_id, {'lastname': 'Last'})
self.assertEqual(p1.display_name, 'Last Firstname', 'Partner display_name incorrect')
self.assertEqual(
p1.display_name,
'Last Firstname',
'Partner display_name incorrect'
)
if __name__ == '__main__':
unittest2.main()

1
base_location/__init__.py

@ -19,6 +19,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import better_zip
from . import partner
from . import state

2
base_partner_merge/__init__.py

@ -1 +1 @@
import base_partner_merge
from . import base_partner_merge

10
base_partner_merge/base_partner_merge.py

@ -539,11 +539,15 @@ class MergePartnerAutomatic(orm.TransientModel):
).browse(cr, uid,
list(partner_ids),
context=context)
ordered_partners = sorted(sorted(partners,
ordered_partners = sorted(
sorted(
partners,
key=operator.attrgetter('create_date'),
reverse=True),
reverse=True
),
key=operator.attrgetter('active'),
reverse=True)
reverse=True
)
return ordered_partners
def _next_screen(self, cr, uid, this, context=None):

2
base_partner_sequence/__init__.py

@ -18,5 +18,5 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import partner
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

1
partner_firstname/__init__.py

@ -17,5 +17,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import partner
from . import res_user

1
portal_partner_merge/__init__.py

@ -18,4 +18,5 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import wizard

4
portal_partner_merge/wizard/__init__.py

@ -19,8 +19,4 @@
#
##############################################################################
from . import portal_wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

2
res_partner_affiliate/__init__.py

@ -20,5 +20,3 @@
##############################################################################
import res_partner
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
Loading…
Cancel
Save