Partner module: initial commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
import partner
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name" : "Partners",
|
||||
"version" : "1.0",
|
||||
"author" : "B2CK",
|
||||
"category" : "Generic Modules",
|
||||
"description": "Define partners, addresses and co.",
|
||||
"depends" : ["ir","res"],
|
||||
"xml" : ["partner.xml"],
|
||||
"installable": True,
|
||||
}
|
||||
|
||||
+215
@@ -0,0 +1,215 @@
|
||||
from trytond.osv import fields, OSV
|
||||
|
||||
|
||||
class CorporationType(OSV):
|
||||
"Corporation Type"
|
||||
|
||||
_name = 'partner.corporation_type'
|
||||
_description = __doc__
|
||||
_order= 'name'
|
||||
_columns = {
|
||||
'name': fields.char('Name', required=True, size=64),
|
||||
}
|
||||
|
||||
CorporationType()
|
||||
|
||||
class Category(OSV):
|
||||
"Partner Category"
|
||||
|
||||
_name = "partner.category"
|
||||
_description = __doc__
|
||||
_order = 'parent,name'
|
||||
_parent_name = 'parent'
|
||||
|
||||
def name_get(self, cursor, user, ids, context=None):
|
||||
|
||||
if not len(ids):
|
||||
return []
|
||||
categories = self.browse(cursor, user, ids, context=context)
|
||||
res = []
|
||||
for category in categories:
|
||||
if category.parent:
|
||||
name = category.parent.name+' / '+ category.name
|
||||
else:
|
||||
name = category.name
|
||||
res.append((category.id, name))
|
||||
return res
|
||||
|
||||
def _name_get_fnc(self, cursor, user, obj_id, name, value, arg,
|
||||
context=None):
|
||||
res = self.name_get(cursor, user, ids, context)
|
||||
return dict(res)
|
||||
|
||||
def check_recursion(self, cursor, user, ids, parent=None):
|
||||
return super(Category, self).check_recursion(cursor, user,
|
||||
ids,parent="parent")
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Category Name', required=True, size=64),
|
||||
'parent': fields.many2one('partner.category', 'Parent Category',
|
||||
select=True),
|
||||
'complete_name': fields.function(_name_get_fnc, method=True,
|
||||
type="char", string='Name'),
|
||||
'childs': fields.one2many('partner.category', 'parent',
|
||||
'Childs Category'),
|
||||
'active' : fields.boolean('Active'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'active' : lambda *a: 1,
|
||||
}
|
||||
|
||||
_constraints = [
|
||||
(check_recursion,
|
||||
'Error ! You can not create recursive categories.', ['parent'])
|
||||
]
|
||||
|
||||
Category()
|
||||
|
||||
class Partner(OSV):
|
||||
"Partner"
|
||||
|
||||
_description = __doc__
|
||||
_name = "partner.partner"
|
||||
_order = "name"
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=128, required=True, select=True),
|
||||
'corp_type': fields.many2one("partner.corporation_type", "Corp. Type"),
|
||||
'lang': fields.many2one("ir.lang", 'Language'),
|
||||
'vat': fields.char('VAT',size=32 ,help="Value Added Tax number"),
|
||||
'website': fields.char('Website',size=64),
|
||||
'addresses': fields.one2many('partner.address', 'partner',
|
||||
'Addresses'),
|
||||
'categories': fields.many2many(
|
||||
'partner.category', 'partner_category_rel',
|
||||
'partner', 'category', 'Categories'),
|
||||
'active': fields.boolean('Active'),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *a: True,
|
||||
}
|
||||
|
||||
_sql_constraints = [
|
||||
('name_uniq', 'unique (name)',
|
||||
'The name of the partner must be unique !')
|
||||
]
|
||||
Partner()
|
||||
|
||||
|
||||
class Country(OSV):
|
||||
'Partner Country'
|
||||
|
||||
_name = 'partner.country'
|
||||
_description = __doc__
|
||||
_order='code'
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Country Name', size=64,
|
||||
help='The full name of the country.', required=True),
|
||||
'code': fields.char('Country Code', size=2,
|
||||
help='The ISO country code in two chars.\n'
|
||||
'You can use this field for quick search.', required=True),
|
||||
}
|
||||
_sql_constraints = [
|
||||
('name_uniq', 'unique (name)',
|
||||
'The name of the country must be unique !'),
|
||||
('code_uniq', 'unique (code)',
|
||||
'The code of the country must be unique !')
|
||||
]
|
||||
|
||||
def name_search(self, cr, user, name='', args=None, operator='ilike',
|
||||
context=None, limit=80):
|
||||
if not args:
|
||||
args=[]
|
||||
if not context:
|
||||
context={}
|
||||
ids = False
|
||||
if len(name) <= 2:
|
||||
ids = self.search(cr, user, [('code', '=', name)] + args,
|
||||
limit=limit, context=context)
|
||||
if not ids:
|
||||
ids = self.search(cr, user, [('name', operator, name)] + args,
|
||||
limit=limit, context=context)
|
||||
return self.name_get(cr, user, ids, context)
|
||||
|
||||
|
||||
def create(self, cursor, user, vals, context=None):
|
||||
if 'code' in vals:
|
||||
vals['code'] = vals['code'].upper()
|
||||
return super(Country, self).create(cursor, user, vals, context=context)
|
||||
|
||||
|
||||
def write(self, cursor, user, ids, vals, context=None):
|
||||
if 'code' in vals:
|
||||
vals['code'] = vals['code'].upper()
|
||||
return super(Country, self).write(cursor, user, ids, vals,
|
||||
context=context)
|
||||
|
||||
Country()
|
||||
|
||||
|
||||
|
||||
class State(OSV):
|
||||
"Country state"
|
||||
|
||||
_name = 'partner.state'
|
||||
_description = __doc__
|
||||
_order = 'code'
|
||||
|
||||
_columns = {
|
||||
'country': fields.many2one('partner.country', 'Country',
|
||||
required=True),
|
||||
'name': fields.char('State Name', size=64, required=True),
|
||||
'code': fields.char('State Code', size=3, required=True),
|
||||
}
|
||||
|
||||
def create(self, cursor, user, vals, context=None):
|
||||
if 'code' in vals:
|
||||
vals['code'] = vals['code'].upper()
|
||||
return super(CountryState, self).create(cursor, user, vals,
|
||||
context=context)
|
||||
|
||||
def write(self, cursor, user, ids, vals, context=None):
|
||||
if 'code' in vals:
|
||||
vals['code'] = vals['code'].upper()
|
||||
return super(CountryState, self).write(cursor, user, ids, vals,
|
||||
context=context)
|
||||
|
||||
State()
|
||||
|
||||
|
||||
|
||||
class Address(OSV):
|
||||
"Partner Address"
|
||||
|
||||
_name = 'partner.address'
|
||||
_description = __doc__
|
||||
_order = 'partner'
|
||||
|
||||
|
||||
|
||||
_columns = {
|
||||
'partner': fields.many2one('partner.partner', 'Partner', required=True,
|
||||
ondelete='cascade', select=True),
|
||||
'type': fields.selection( [ ('default','Default'),('invoice','Invoice'),
|
||||
('delivery','Delivery'), ('contact','Contact'), ('other','Other') ],
|
||||
'Address Type'),
|
||||
'name': fields.char('Contact Name', size=64),
|
||||
'street': fields.char('Street', size=128),
|
||||
'streetbis': fields.char('Street (bis)', size=128),
|
||||
'zip': fields.char('Zip', change_default=True, size=24),
|
||||
'city': fields.char('City', size=128),
|
||||
'state': fields.many2one("partner.state", 'State',
|
||||
domain="[('country_id','=',country_id)]"),
|
||||
'country': fields.many2one('partner.country', 'Country'),
|
||||
'email': fields.char('E-Mail', size=64),
|
||||
'phone': fields.char('Phone', size=64),
|
||||
'fax': fields.char('Fax', size=64),
|
||||
'mobile': fields.char('Mobile', size=64),
|
||||
'active': fields.boolean('Active'),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
}
|
||||
Address()
|
||||
+351
@@ -0,0 +1,351 @@
|
||||
<?xml version="1.0"?>
|
||||
<tryton>
|
||||
<data>
|
||||
<menuitem name="Partners" sequence="0" icon="terp-partner"
|
||||
id="menu_partner"/>
|
||||
|
||||
|
||||
<!--Partner Address -->
|
||||
<record model="ir.ui.view" id="view_partner_address_tree">
|
||||
<field name="model">partner.address</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<tree string="Partner Addresses">
|
||||
<field name="partner" />
|
||||
<field name="name" />
|
||||
<field name="type"/>
|
||||
<field name="phone"/>
|
||||
<field name="email"/>
|
||||
</tree>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_partner_address_form1">
|
||||
<field name="model">partner.address</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<form string="Partner Addresses">
|
||||
<label name="partner"/>
|
||||
<field name="partner" select="1"/>
|
||||
<newline/>
|
||||
<label name="name"/>
|
||||
<field name="name" select="1"/>
|
||||
<label name="type"/>
|
||||
<field name="type" select="2"/>
|
||||
<label name="street"/>
|
||||
<field name="street" select="2"/>
|
||||
<label name="streetbis"/>
|
||||
<field name="streetbis"/>
|
||||
<newline/>
|
||||
<label name="zip"/>
|
||||
<field name="zip" select="2"/>
|
||||
<label name="city"/>
|
||||
<field name="city" select="2"/>
|
||||
<newline/>
|
||||
<label name="country"/>
|
||||
<field name="country" select="1" completion="1"/>
|
||||
<label name="state"/>
|
||||
<field name="state" select="2"/>
|
||||
<newline/>
|
||||
<label name="phone"/>
|
||||
<field name="phone" select="2"/>
|
||||
<label name="fax"/>
|
||||
<field name="fax"/>
|
||||
<newline/>
|
||||
<label name="mobile"/>
|
||||
<field name="mobile" select="2"/>
|
||||
<label name="email"/>
|
||||
<field name="email" select="2"/>
|
||||
</form>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.action.act_window" id="action_partner_address_list">
|
||||
<field name="name">Partner Addresses</field>
|
||||
<field name="type">ir.action.act_window</field>
|
||||
<field name="res_model">partner.address</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_address_list_view1">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_id" ref="view_partner_address_tree"/>
|
||||
<field name="act_window_id" ref="action_partner_address_list"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_address_list_view2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_id" ref="view_partner_address_form1"/>
|
||||
<field name="act_window_id" ref="action_partner_address_list"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Partner Address" parent_id="menu_partner"
|
||||
sequence="2"
|
||||
action="action_partner_address_list"
|
||||
id="menu_partner_address_list"/>
|
||||
|
||||
|
||||
<record model="ir.action.act_window" id="action_partner_address_form">
|
||||
<field name="name">Partner Address</field>
|
||||
<field name="type">ir.action.act_window</field>
|
||||
<field name="res_model">partner.address</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_address_form_view1">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_id" ref="view_partner_address_tree"/>
|
||||
<field name="act_window_id" ref="action_partner_address_form"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_address_form_view2">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_id" ref="view_partner_address_form1"/>
|
||||
<field name="act_window_id" ref="action_partner_address_form"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="New Address"
|
||||
parent_id="menu_partner_address_list"
|
||||
action="action_partner_address_form"
|
||||
id="menu_partner_address_form"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!--Partner-->
|
||||
<record model="ir.ui.view" id="view_partner_tree">
|
||||
<field name="model">partner.partner</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="8"/>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<tree string="Partners">
|
||||
<field name="name" select="1"/>
|
||||
<field name="corp_type" select="2"/>
|
||||
<field name="lang" select="2"/>
|
||||
<field name="website"/>
|
||||
<field name="vat" select="1"/>
|
||||
</tree>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_partner_form">
|
||||
<field name="model">partner.partner</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<form string="Partners">
|
||||
<label name="name"/>
|
||||
<field name="name"/>
|
||||
<label name="lang"/>
|
||||
<field name="lang"/>
|
||||
<label name="active"/>
|
||||
<field name="active"/>
|
||||
|
||||
<field name="addresses" mode="form,tree" colspan="4">
|
||||
<form string="Partner addresses" col="6">
|
||||
<label name="name"/>
|
||||
<field name="name" />
|
||||
<label name="type"/>
|
||||
<field name="type" />
|
||||
<newline/>
|
||||
<label name="street"/>
|
||||
<field name="street" />
|
||||
<label name="streetbis"/>
|
||||
<field name="streetbis"/>
|
||||
<label name="zip"/>
|
||||
<field name="zip" />
|
||||
<label name="city"/>
|
||||
<field name="city" />
|
||||
<label name="country"/>
|
||||
<field name="country" completion="1"/>
|
||||
<label name="state"/>
|
||||
<field name="state" />
|
||||
<label name="phone"/>
|
||||
<field name="phone"/>
|
||||
<label name="fax"/>
|
||||
<field name="fax"/>
|
||||
<label name="mobile"/>
|
||||
<field name="mobile"/>
|
||||
<label name="email"/>
|
||||
<field name="email" widget="email" />
|
||||
</form>
|
||||
<tree string="Partner Addresses">
|
||||
<field name="name" />
|
||||
<field name="zip"/>
|
||||
<field name="city"/>
|
||||
<field name="country"/>
|
||||
</tree>
|
||||
</field>
|
||||
<separator string="Categories" colspan="4"/>
|
||||
<label name="categories" />
|
||||
<field name="categories" colspan="4" nolabel="1"/>
|
||||
</form>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="action_partner_list">
|
||||
<field name="name">Partners</field>
|
||||
<field name="type">ir.action.act_window</field>
|
||||
<field name="res_model">partner.partner</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="action_partner_list_view1">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_id" ref="view_partner_tree"/>
|
||||
<field name="act_window_id" ref="action_partner_list"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="action_partner_list_view2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_id" ref="view_partner_form"/>
|
||||
<field name="act_window_id" ref="action_partner_list"/>
|
||||
</record>
|
||||
<menuitem name="Partners" parent_id="menu_partner"
|
||||
action="action_partner_list"
|
||||
sequence="1"
|
||||
id="menu_partner_list"/>
|
||||
|
||||
|
||||
|
||||
<record model="ir.action.act_window" id="action_partner_form">
|
||||
<field name="name">Partners</field>
|
||||
<field name="type">ir.action.act_window</field>
|
||||
<field name="res_model">partner.partner</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="action_partner_form_view1">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_id" ref="view_partner_tree"/>
|
||||
<field name="act_window_id" ref="action_partner_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="action_partner_form_view2">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_id" ref="view_partner_form"/>
|
||||
<field name="act_window_id" ref="action_partner_form"/>
|
||||
</record>
|
||||
<menuitem name="New Partner"
|
||||
action="action_partner_form"
|
||||
parent_id="menu_partner_list"
|
||||
id="menu_partner_form"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!--Categories-->
|
||||
<record model="ir.ui.view" id="view_partner_category_form">
|
||||
<field name="model">partner.category</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<form string="Partner categories">
|
||||
<label name="name" />
|
||||
<field name="name" select="1"/>
|
||||
<label name="active" />
|
||||
<field name="active" select="1" />
|
||||
<label name="parent" />
|
||||
<field name="parent"/>
|
||||
</form>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="view_partner_category_tree">
|
||||
<field name="model">partner.category</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="field_parent">childs</field>
|
||||
<field name="arch" type="xml">
|
||||
<![CDATA[
|
||||
<tree string="Partner Categories">
|
||||
<field name="name" select="1"/>
|
||||
</tree>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
|
||||
<record model="ir.action.act_window" id="action_partner_by_category">
|
||||
<field name="name">Partners</field>
|
||||
<field name="res_model">partner.partner</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="domain">[('categories','child_of', [active_id])]</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.action.keyword" id="keyword_partner_by_category">
|
||||
<field name="keyword" eval="'tree_open'"/>
|
||||
<field name="model">partner.category,0</field>
|
||||
<field name="action" ref="action_partner_by_category"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.action.act_window" id="action_partner_category">
|
||||
<field name="name">Partner categories</field>
|
||||
<field name="type">ir.action.act_window</field>
|
||||
<field name="res_model">partner.category</field>
|
||||
<field name="view_type">tree</field>
|
||||
<field name="domain">[('parent','=',False)]</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_category_tree">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_id" ref="view_partner_category_tree"/>
|
||||
<field name="act_window_id" ref="action_partner_category"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_category_form">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_id" ref="view_partner_category_form"/>
|
||||
<field name="act_window_id" ref="action_partner_category"/>
|
||||
</record>
|
||||
<menuitem
|
||||
name="Category Tree"
|
||||
parent_id="menu_partner"
|
||||
sequence="3"
|
||||
action="action_partner_category"
|
||||
id="menu_partner_category"/>
|
||||
|
||||
|
||||
<record model="ir.action.act_window" id="action_partner_category_edit">
|
||||
<field name="name">Partner categories</field>
|
||||
<field name="type">ir.action.act_window</field>
|
||||
<field name="res_model">partner.category</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_category_tree_edit">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_id" ref="view_partner_category_tree"/>
|
||||
<field name="act_window_id" ref="action_partner_category_edit"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window.view"
|
||||
id="action_partner_category_form_edit">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_id" ref="view_partner_category_form"/>
|
||||
<field name="act_window_id" ref="action_partner_category_edit"/>
|
||||
</record>
|
||||
<menuitem name="Edit Categories" parent_id="menu_partner_category"
|
||||
action="action_partner_category_edit"
|
||||
id="menu_partner_category_form"/>
|
||||
|
||||
|
||||
|
||||
</data>
|
||||
</tryton>
|
||||
Reference in New Issue
Block a user