2009-10-20 10:52:23 +00:00
# -*- coding: utf-8 -*-
2006-12-07 13:41:40 +00:00
##############################################################################
2009-10-14 12:32:15 +00:00
#
2008-11-18 14:39:15 +00:00
# OpenERP, Open Source Management Solution
2009-10-14 12:32:15 +00:00
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
2006-12-07 13:41:40 +00:00
#
2008-11-03 18:27:16 +00:00
# This program is free software: you can redistribute it and/or modify
2009-10-14 12:32:15 +00:00
# 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.
2006-12-07 13:41:40 +00:00
#
2008-11-03 18:27:16 +00:00
# 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
2009-10-14 12:32:15 +00:00
# GNU Affero General Public License for more details.
2006-12-07 13:41:40 +00:00
#
2009-10-14 12:32:15 +00:00
# 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/>.
2006-12-07 13:41:40 +00:00
#
##############################################################################
import math
from osv import fields , osv
import tools
import ir
import pooler
2009-03-06 18:06:50 +00:00
from tools . translate import _
2006-12-07 13:41:40 +00:00
class res_partner_function ( osv . osv ) :
2008-07-22 14:24:36 +00:00
_name = ' res.partner.function '
_description = ' Function of the contact '
_columns = {
2009-01-26 17:40:29 +00:00
' name ' : fields . char ( ' Function Name ' , size = 64 , required = True ) ,
2009-02-03 07:31:23 +00:00
' code ' : fields . char ( ' Code ' , size = 8 , required = True ) ,
' ref ' : fields . char ( ' Notes ' , size = 32 , ) ,
2008-07-22 14:24:36 +00:00
}
_order = ' name '
2009-01-28 13:05:31 +00:00
_sql_constraints = [
2009-02-03 07:31:23 +00:00
( ' code_uniq ' , ' unique (code) ' , ' The Code of the Partner Function must be unique ! ' )
2009-01-28 13:05:31 +00:00
]
2006-12-07 13:41:40 +00:00
res_partner_function ( )
2007-09-13 14:21:54 +00:00
2006-12-07 13:41:40 +00:00
class res_payterm ( osv . osv ) :
2008-07-22 14:24:36 +00:00
_description = ' Payment term '
_name = ' res.payterm '
_columns = {
2009-01-26 17:40:29 +00:00
' name ' : fields . char ( ' Payment Term (short name) ' , size = 64 ) ,
2008-07-22 14:24:36 +00:00
}
2006-12-07 13:41:40 +00:00
res_payterm ( )
class res_partner_category ( osv . osv ) :
2009-01-23 14:17:31 +00:00
def name_get ( self , cr , uid , ids , context = None ) :
2008-07-22 14:24:36 +00:00
if not len ( ids ) :
return [ ]
2009-01-23 14:17:31 +00:00
reads = self . read ( cr , uid , ids , [ ' name ' , ' parent_id ' ] , context = context )
2008-07-22 14:24:36 +00:00
res = [ ]
for record in reads :
name = record [ ' name ' ]
if record [ ' parent_id ' ] :
name = record [ ' parent_id ' ] [ 1 ] + ' / ' + name
res . append ( ( record [ ' id ' ] , name ) )
return res
2009-01-23 14:17:31 +00:00
def _name_get_fnc ( self , cr , uid , ids , prop , unknow_none , context = None ) :
res = self . name_get ( cr , uid , ids , context = context )
2008-07-22 14:24:36 +00:00
return dict ( res )
2009-01-23 14:17:31 +00:00
2008-07-22 14:24:36 +00:00
def _check_recursion ( self , cr , uid , ids ) :
level = 100
while len ( ids ) :
2009-10-21 07:25:33 +00:00
cr . execute ( ' select distinct parent_id from res_partner_category where id in ( ' + ' , ' . join ( map ( str , ids ) ) + ' ) ' )
2008-07-22 14:24:36 +00:00
ids = filter ( None , map ( lambda x : x [ 0 ] , cr . fetchall ( ) ) )
if not level :
return False
level - = 1
return True
_description = ' Partner Categories '
_name = ' res.partner.category '
_columns = {
2008-09-08 22:52:36 +00:00
' name ' : fields . char ( ' Category Name ' , required = True , size = 64 , translate = True ) ,
2008-07-22 14:24:36 +00:00
' parent_id ' : fields . many2one ( ' res.partner.category ' , ' Parent Category ' , select = True ) ,
2009-01-26 17:40:29 +00:00
' complete_name ' : fields . function ( _name_get_fnc , method = True , type = " char " , string = ' Full Name ' ) ,
' child_ids ' : fields . one2many ( ' res.partner.category ' , ' parent_id ' , ' Child Categories ' ) ,
' active ' : fields . boolean ( ' Active ' , help = " The active field allows you to hide the category without removing it. " ) ,
2008-07-22 14:24:36 +00:00
}
_constraints = [
( _check_recursion , ' Error ! You can not create recursive categories. ' , [ ' parent_id ' ] )
]
_defaults = {
' active ' : lambda * a : 1 ,
}
_order = ' parent_id,name '
2006-12-07 13:41:40 +00:00
res_partner_category ( )
class res_partner_title ( osv . osv ) :
2008-07-22 14:24:36 +00:00
_name = ' res.partner.title '
_columns = {
' name ' : fields . char ( ' Title ' , required = True , size = 46 , translate = True ) ,
' shortcut ' : fields . char ( ' Shortcut ' , required = True , size = 16 ) ,
' domain ' : fields . selection ( [ ( ' partner ' , ' Partner ' ) , ( ' contact ' , ' Contact ' ) ] , ' Domain ' , required = True , size = 24 )
}
_order = ' name '
2006-12-07 13:41:40 +00:00
res_partner_title ( )
def _contact_title_get ( self , cr , uid , context = { } ) :
2008-07-22 14:24:36 +00:00
obj = self . pool . get ( ' res.partner.title ' )
ids = obj . search ( cr , uid , [ ( ' domain ' , ' = ' , ' contact ' ) ] )
res = obj . read ( cr , uid , ids , [ ' shortcut ' , ' name ' ] , context )
2009-01-19 20:51:52 +00:00
return [ ( r [ ' shortcut ' ] , r [ ' name ' ] ) for r in res ] + [ ( ' ' , ' ' ) ]
2006-12-07 13:41:40 +00:00
def _partner_title_get ( self , cr , uid , context = { } ) :
2008-07-22 14:24:36 +00:00
obj = self . pool . get ( ' res.partner.title ' )
ids = obj . search ( cr , uid , [ ( ' domain ' , ' = ' , ' partner ' ) ] )
res = obj . read ( cr , uid , ids , [ ' shortcut ' , ' name ' ] , context )
2009-12-11 16:19:17 +00:00
return [ ( r [ ' shortcut ' ] , r [ ' name ' ] ) for r in res ] + [ ( ' ' , ' ' ) ]
2006-12-07 13:41:40 +00:00
2009-05-12 14:01:27 +00:00
def _lang_get ( self , cr , uid , context = { } ) :
obj = self . pool . get ( ' res.lang ' )
ids = obj . search ( cr , uid , [ ] , context = context )
res = obj . read ( cr , uid , ids , [ ' code ' , ' name ' ] , context )
return [ ( r [ ' code ' ] , r [ ' name ' ] ) for r in res ] + [ ( ' ' , ' ' ) ]
2006-12-07 13:41:40 +00:00
class res_partner ( osv . osv ) :
2008-07-22 14:24:36 +00:00
_description = ' Partner '
_name = " res.partner "
_order = " name "
_columns = {
' name ' : fields . char ( ' Name ' , size = 128 , required = True , select = True ) ,
' date ' : fields . date ( ' Date ' , select = 1 ) ,
' title ' : fields . selection ( _partner_title_get , ' Title ' , size = 32 ) ,
2009-11-30 14:54:26 +00:00
' parent_id ' : fields . many2one ( ' res.partner ' , ' Parent Partner ' , select = 2 ) ,
2008-07-22 14:24:36 +00:00
' child_ids ' : fields . one2many ( ' res.partner ' , ' parent_id ' , ' Partner Ref. ' ) ,
' ref ' : fields . char ( ' Code ' , size = 64 ) ,
2009-05-12 14:01:27 +00:00
' lang ' : fields . selection ( _lang_get , ' Language ' , size = 5 , help = " If the selected language is loaded in the system, all documents related to this partner will be printed in this language. If not, it will be english. " ) ,
2008-07-22 14:24:36 +00:00
' user_id ' : fields . many2one ( ' res.users ' , ' Dedicated Salesman ' , help = ' The internal user that is in charge of communicating with this partner if any. ' ) ,
2009-01-19 21:07:14 +00:00
' vat ' : fields . char ( ' VAT ' , size = 32 , help = " Value Added Tax number. Check the box if the partner is subjected to the VAT. Used by the VAT legal statement. " ) ,
2008-07-22 14:24:36 +00:00
' bank_ids ' : fields . one2many ( ' res.partner.bank ' , ' partner_id ' , ' Banks ' ) ,
' website ' : fields . char ( ' Website ' , size = 64 ) ,
' comment ' : fields . text ( ' Notes ' ) ,
' address ' : fields . one2many ( ' res.partner.address ' , ' partner_id ' , ' Contacts ' ) ,
' category_id ' : fields . many2many ( ' res.partner.category ' , ' res_partner_category_rel ' , ' partner_id ' , ' category_id ' , ' Categories ' ) ,
' events ' : fields . one2many ( ' res.partner.event ' , ' partner_id ' , ' Events ' ) ,
' credit_limit ' : fields . float ( string = ' Credit Limit ' ) ,
' ean13 ' : fields . char ( ' EAN13 ' , size = 13 ) ,
' active ' : fields . boolean ( ' Active ' ) ,
2008-11-18 14:39:15 +00:00
' customer ' : fields . boolean ( ' Customer ' , help = " Check this box if the partner is a customer. " ) ,
' supplier ' : fields . boolean ( ' Supplier ' , help = " Check this box if the partner is a supplier. If it ' s not checked, purchase people will not see it when encoding a purchase order. " ) ,
2008-09-18 11:28:57 +00:00
' city ' : fields . related ( ' address ' , ' city ' , type = ' char ' , string = ' City ' ) ,
2008-09-19 06:30:20 +00:00
' country ' : fields . related ( ' address ' , ' country_id ' , type = ' many2one ' , relation = ' res.country ' , string = ' Country ' ) ,
2009-12-22 20:56:00 +00:00
' company_id ' : fields . many2one ( ' res.company ' , ' Company ' , select = 1 ) ,
2008-07-22 14:24:36 +00:00
}
2008-11-18 12:54:32 +00:00
def _default_category ( self , cr , uid , context = { } ) :
if ' category_id ' in context and context [ ' category_id ' ] :
return [ context [ ' category_id ' ] ]
return [ ]
2008-07-22 14:24:36 +00:00
_defaults = {
' active ' : lambda * a : 1 ,
2008-08-25 19:36:47 +00:00
' customer ' : lambda * a : 1 ,
2008-11-18 12:54:32 +00:00
' category_id ' : _default_category ,
2009-12-23 17:18:19 +00:00
' company_id ' : lambda s , cr , uid , c : s . pool . get ( ' res.company ' ) . _company_default_get ( cr , uid , ' res.partner ' , context = c ) ,
2008-07-22 14:24:36 +00:00
}
2009-10-30 12:11:06 +00:00
def copy ( self , cr , uid , id , default = { } , context = { } ) :
2008-07-22 14:24:36 +00:00
name = self . read ( cr , uid , [ id ] , [ ' name ' ] ) [ 0 ] [ ' name ' ]
2009-10-30 12:11:06 +00:00
default . update ( { ' name ' : name + _ ( ' (copy) ' ) , ' events ' : [ ] } )
2008-07-22 14:24:36 +00:00
return super ( res_partner , self ) . copy ( cr , uid , id , default , context )
2008-09-18 11:28:57 +00:00
2008-07-22 14:24:36 +00:00
def _check_ean_key ( self , cr , uid , ids ) :
for partner_o in pooler . get_pool ( cr . dbname ) . get ( ' res.partner ' ) . read ( cr , uid , ids , [ ' ean13 ' , ] ) :
thisean = partner_o [ ' ean13 ' ]
if thisean and thisean != ' ' :
if len ( thisean ) != 13 :
return False
sum = 0
for i in range ( 12 ) :
if not ( i % 2 ) :
sum + = int ( thisean [ i ] )
else :
sum + = 3 * int ( thisean [ i ] )
if math . ceil ( sum / 10.0 ) * 10 - sum != int ( thisean [ 12 ] ) :
return False
return True
# _constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean13'])]
def name_get ( self , cr , uid , ids , context = { } ) :
if not len ( ids ) :
return [ ]
if context . get ( ' show_ref ' , False ) :
rec_name = ' ref '
else :
rec_name = ' name '
2008-09-18 11:28:57 +00:00
2008-07-22 14:24:36 +00:00
res = [ ( r [ ' id ' ] , r [ rec_name ] ) for r in self . read ( cr , uid , ids , [ rec_name ] , context ) ]
return res
2008-09-18 11:28:57 +00:00
2009-12-09 11:42:41 +00:00
def name_search ( self , cr , uid , name , args = None , operator = ' ilike ' , context = None , limit = 100 ) :
2008-07-22 14:24:36 +00:00
if not args :
args = [ ]
if not context :
context = { }
if name :
ids = self . search ( cr , uid , [ ( ' ref ' , ' = ' , name ) ] + args , limit = limit , context = context )
if not ids :
ids = self . search ( cr , uid , [ ( ' name ' , operator , name ) ] + args , limit = limit , context = context )
else :
ids = self . search ( cr , uid , args , limit = limit , context = context )
return self . name_get ( cr , uid , ids , context )
def _email_send ( self , cr , uid , ids , email_from , subject , body , on_error = None ) :
partners = self . browse ( cr , uid , ids )
for partner in partners :
if len ( partner . address ) :
if partner . address [ 0 ] . email :
tools . email_send ( email_from , [ partner . address [ 0 ] . email ] , subject , body , on_error )
return True
def email_send ( self , cr , uid , ids , email_from , subject , body , on_error = ' ' ) :
while len ( ids ) :
self . pool . get ( ' ir.cron ' ) . create ( cr , uid , {
' name ' : ' Send Partner Emails ' ,
' user_id ' : uid ,
# 'nextcall': False,
' model ' : ' res.partner ' ,
' function ' : ' _email_send ' ,
' args ' : repr ( [ ids [ : 16 ] , email_from , subject , body , on_error ] )
} )
ids = ids [ 16 : ]
return True
2008-09-18 11:28:57 +00:00
2008-07-22 14:24:36 +00:00
def address_get ( self , cr , uid , ids , adr_pref = [ ' default ' ] ) :
2009-10-21 07:25:33 +00:00
cr . execute ( ' select type,id from res_partner_address where partner_id in ( ' + ' , ' . join ( map ( str , map ( int , ids ) ) ) + ' ) ' )
2008-07-22 14:24:36 +00:00
res = cr . fetchall ( )
adr = dict ( res )
2008-09-18 11:28:57 +00:00
# get the id of the (first) default address if there is one,
2008-07-22 14:24:36 +00:00
# otherwise get the id of the first address in the list
if res :
default_address = adr . get ( ' default ' , res [ 0 ] [ 1 ] )
else :
default_address = False
result = { }
for a in adr_pref :
result [ a ] = adr . get ( a , default_address )
return result
2008-09-18 11:28:57 +00:00
2008-07-22 14:24:36 +00:00
def gen_next_ref ( self , cr , uid , ids ) :
if len ( ids ) != 1 :
return True
2008-09-18 11:28:57 +00:00
2008-07-22 14:24:36 +00:00
# compute the next number ref
cr . execute ( " select ref from res_partner where ref is not null order by char_length(ref) desc, ref desc limit 1 " )
res = cr . dictfetchall ( )
ref = res and res [ 0 ] [ ' ref ' ] or ' 0 '
try :
nextref = int ( ref ) + 1
2008-12-16 10:18:25 +00:00
except :
2008-07-22 14:24:36 +00:00
raise osv . except_osv ( _ ( ' Warning ' ) , _ ( " Couldn ' t generate the next id because some partners have an alphabetic id ! " ) )
# update the current partner
2008-12-09 12:37:22 +00:00
cr . execute ( " update res_partner set ref= %s where id= %s " , ( nextref , ids [ 0 ] ) )
2008-07-22 14:24:36 +00:00
return True
2008-08-25 20:15:55 +00:00
def view_header_get ( self , cr , uid , view_id , view_type , context ) :
res = super ( res_partner , self ) . view_header_get ( cr , uid , view_id , view_type , context )
if res : return res
if ( not context . get ( ' category_id ' , False ) ) :
return False
return _ ( ' Partners: ' ) + self . pool . get ( ' res.partner.category ' ) . browse ( cr , uid , context [ ' category_id ' ] , context ) . name
2009-12-17 19:42:50 +00:00
def main_partner ( self , cr , uid ) :
''' Return the id of the main partner
'''
model_data = self . pool . get ( ' ir.model.data ' )
return model_data . browse (
cr , uid ,
model_data . search ( cr , uid , [ ( ' module ' , ' = ' , ' base ' ) ,
( ' name ' , ' = ' , ' main_partner ' ) ] ) [ 0 ] ,
) . res_id
2006-12-07 13:41:40 +00:00
res_partner ( )
class res_partner_address ( osv . osv ) :
2008-08-25 19:36:47 +00:00
_description = ' Partner Addresses '
2008-07-22 14:24:36 +00:00
_name = ' res.partner.address '
_columns = {
2008-11-17 15:40:47 +00:00
' partner_id ' : fields . many2one ( ' res.partner ' , ' Partner ' , ondelete = ' set null ' , select = True , help = " Keep empty for a private address, not related to partner. " ) ,
2008-09-22 08:18:36 +00:00
' type ' : fields . selection ( [ ( ' default ' , ' Default ' ) , ( ' invoice ' , ' Invoice ' ) , ( ' delivery ' , ' Delivery ' ) , ( ' contact ' , ' Contact ' ) , ( ' other ' , ' Other ' ) ] , ' Address Type ' , help = " Used to select automatically the right address according to the context in sales and purchases documents. " ) ,
2008-07-22 14:24:36 +00:00
' function ' : fields . many2one ( ' res.partner.function ' , ' Function ' ) ,
' title ' : fields . selection ( _contact_title_get , ' Title ' , size = 32 ) ,
2009-12-22 17:34:09 +00:00
' name ' : fields . char ( ' Contact Name ' , size = 64 , select = 1 ) ,
2008-07-22 14:24:36 +00:00
' street ' : fields . char ( ' Street ' , size = 128 ) ,
' street2 ' : fields . char ( ' Street2 ' , size = 128 ) ,
' zip ' : fields . char ( ' Zip ' , change_default = True , size = 24 ) ,
' city ' : fields . char ( ' City ' , size = 128 ) ,
2009-01-20 16:30:05 +00:00
' state_id ' : fields . many2one ( " res.country.state " , ' Fed. State ' , domain = " [( ' country_id ' , ' = ' ,country_id)] " ) ,
' country_id ' : fields . many2one ( ' res.country ' , ' Country ' ) ,
2008-07-22 14:24:36 +00:00
' email ' : fields . char ( ' E-Mail ' , size = 240 ) ,
' phone ' : fields . char ( ' Phone ' , size = 64 ) ,
' fax ' : fields . char ( ' Fax ' , size = 64 ) ,
' mobile ' : fields . char ( ' Mobile ' , size = 64 ) ,
' birthdate ' : fields . char ( ' Birthdate ' , size = 64 ) ,
2008-09-22 08:18:36 +00:00
' active ' : fields . boolean ( ' Active ' , help = " Uncheck the active field to hide the contact. " ) ,
2010-01-04 06:01:01 +00:00
# 'company_id': fields.related('partner_id','company_id',type='many2one',relation='res.company',string='Company', store=True),
' company_id ' : fields . many2one ( ' res.company ' , ' Company ' , select = 1 ) ,
2008-07-22 14:24:36 +00:00
}
_defaults = {
' active ' : lambda * a : 1 ,
}
def name_get ( self , cr , user , ids , context = { } ) :
if not len ( ids ) :
return [ ]
res = [ ]
for r in self . read ( cr , user , ids , [ ' name ' , ' zip ' , ' city ' , ' partner_id ' , ' street ' ] ) :
2009-09-17 07:27:12 +00:00
if context . get ( ' contact_display ' , ' contact ' ) == ' partner ' and r [ ' partner_id ' ] :
2008-07-22 14:24:36 +00:00
res . append ( ( r [ ' id ' ] , r [ ' partner_id ' ] [ 1 ] ) )
else :
2008-12-13 12:53:14 +00:00
addr = r [ ' name ' ] or ' '
2008-07-22 14:24:36 +00:00
if r [ ' name ' ] and ( r [ ' zip ' ] or r [ ' city ' ] ) :
addr + = ' , '
2008-12-13 12:53:14 +00:00
addr + = ( r [ ' street ' ] or ' ' ) + ' ' + ( r [ ' zip ' ] or ' ' ) + ' ' + ( r [ ' city ' ] or ' ' )
2008-07-22 14:24:36 +00:00
res . append ( ( r [ ' id ' ] , addr . strip ( ) or ' / ' ) )
return res
2009-12-09 11:42:41 +00:00
def name_search ( self , cr , user , name , args = None , operator = ' ilike ' , context = None , limit = 100 ) :
2008-07-22 14:24:36 +00:00
if not args :
args = [ ]
if not context :
context = { }
if context . get ( ' contact_display ' , ' contact ' ) == ' partner ' :
ids = self . search ( cr , user , [ ( ' partner_id ' , operator , name ) ] , limit = limit , context = context )
else :
2009-08-20 11:10:28 +00:00
if not name :
ids = self . search ( cr , user , args , limit = limit , context = context )
else :
ids = self . search ( cr , user , [ ( ' zip ' , ' = ' , name ) ] + args , limit = limit , context = context )
2008-09-18 11:28:57 +00:00
if not ids :
2008-07-22 14:24:36 +00:00
ids = self . search ( cr , user , [ ( ' city ' , operator , name ) ] + args , limit = limit , context = context )
if name :
ids + = self . search ( cr , user , [ ( ' name ' , operator , name ) ] + args , limit = limit , context = context )
ids + = self . search ( cr , user , [ ( ' partner_id ' , operator , name ) ] + args , limit = limit , context = context )
return self . name_get ( cr , user , ids , context = context )
2009-01-16 16:33:41 +00:00
def get_city ( self , cr , uid , id ) :
return self . browse ( cr , uid , id ) . city
2006-12-07 13:41:40 +00:00
res_partner_address ( )
2007-06-20 15:52:07 +00:00
class res_partner_bank_type ( osv . osv ) :
2008-07-22 14:24:36 +00:00
_description = ' Bank Account Type '
_name = ' res.partner.bank.type '
_columns = {
2008-12-05 12:11:57 +00:00
' name ' : fields . char ( ' Name ' , size = 64 , required = True , translate = True ) ,
2008-07-22 14:24:36 +00:00
' code ' : fields . char ( ' Code ' , size = 64 , required = True ) ,
' field_ids ' : fields . one2many ( ' res.partner.bank.type.field ' , ' bank_type_id ' , ' Type fields ' ) ,
}
2007-06-20 15:52:07 +00:00
res_partner_bank_type ( )
class res_partner_bank_type_fields ( osv . osv ) :
2008-07-22 14:24:36 +00:00
_description = ' Bank type fields '
_name = ' res.partner.bank.type.field '
_columns = {
2009-01-26 17:40:29 +00:00
' name ' : fields . char ( ' Field Name ' , size = 64 , required = True , translate = True ) ,
' bank_type_id ' : fields . many2one ( ' res.partner.bank.type ' , ' Bank Type ' , required = True , ondelete = ' cascade ' ) ,
2008-07-22 14:24:36 +00:00
' required ' : fields . boolean ( ' Required ' ) ,
' readonly ' : fields . boolean ( ' Readonly ' ) ,
' size ' : fields . integer ( ' Max. Size ' ) ,
}
2007-06-20 15:52:07 +00:00
res_partner_bank_type_fields ( )
class res_partner_bank ( osv . osv ) :
2008-07-22 14:24:36 +00:00
''' Bank Accounts '''
_name = " res.partner.bank "
2008-09-29 06:22:08 +00:00
_rec_name = " acc_number "
2008-07-22 14:24:36 +00:00
_description = __doc__
_order = ' sequence '
def _bank_type_get ( self , cr , uid , context = None ) :
bank_type_obj = self . pool . get ( ' res.partner.bank.type ' )
result = [ ]
type_ids = bank_type_obj . search ( cr , uid , [ ] )
2009-01-22 23:29:58 +00:00
bank_types = bank_type_obj . browse ( cr , uid , type_ids , context = context )
2008-07-22 14:24:36 +00:00
for bank_type in bank_types :
result . append ( ( bank_type . code , bank_type . name ) )
return result
def _default_value ( self , cursor , user , field , context = None ) :
if field in ( ' country_id ' , ' state_id ' ) :
value = False
else :
value = ' '
if not context . get ( ' address ' , False ) :
return value
for ham , spam , address in context [ ' address ' ] :
if address . get ( ' type ' , False ) == ' default ' :
return address . get ( field , value )
elif not address . get ( ' type ' , False ) :
value = address . get ( field , value )
return value
_columns = {
' name ' : fields . char ( ' Description ' , size = 128 ) ,
2009-01-26 17:40:29 +00:00
' acc_number ' : fields . char ( ' Account Number ' , size = 64 , required = False ) ,
2008-07-22 14:24:36 +00:00
' bank ' : fields . many2one ( ' res.bank ' , ' Bank ' ) ,
2009-01-26 17:40:29 +00:00
' owner_name ' : fields . char ( ' Account Owner ' , size = 64 ) ,
2008-07-22 14:24:36 +00:00
' street ' : fields . char ( ' Street ' , size = 128 ) ,
' zip ' : fields . char ( ' Zip ' , change_default = True , size = 24 ) ,
' city ' : fields . char ( ' City ' , size = 128 ) ,
' country_id ' : fields . many2one ( ' res.country ' , ' Country ' ,
change_default = True ) ,
' state_id ' : fields . many2one ( " res.country.state " , ' State ' ,
change_default = True , domain = " [( ' country_id ' , ' = ' ,country_id)] " ) ,
' partner_id ' : fields . many2one ( ' res.partner ' , ' Partner ' , required = True ,
ondelete = ' cascade ' , select = True ) ,
2009-01-26 17:40:29 +00:00
' state ' : fields . selection ( _bank_type_get , ' Bank Type ' , required = True ,
2008-07-22 14:24:36 +00:00
change_default = True ) ,
' sequence ' : fields . integer ( ' Sequence ' ) ,
}
_defaults = {
' owner_name ' : lambda obj , cursor , user , context : obj . _default_value (
cursor , user , ' name ' , context = context ) ,
' street ' : lambda obj , cursor , user , context : obj . _default_value (
cursor , user , ' street ' , context = context ) ,
' city ' : lambda obj , cursor , user , context : obj . _default_value (
cursor , user , ' city ' , context = context ) ,
' zip ' : lambda obj , cursor , user , context : obj . _default_value (
cursor , user , ' zip ' , context = context ) ,
' country_id ' : lambda obj , cursor , user , context : obj . _default_value (
cursor , user , ' country_id ' , context = context ) ,
' state_id ' : lambda obj , cursor , user , context : obj . _default_value (
cursor , user , ' state_id ' , context = context ) ,
}
def fields_get ( self , cr , uid , fields = None , context = None ) :
res = super ( res_partner_bank , self ) . fields_get ( cr , uid , fields , context )
bank_type_obj = self . pool . get ( ' res.partner.bank.type ' )
type_ids = bank_type_obj . search ( cr , uid , [ ] )
types = bank_type_obj . browse ( cr , uid , type_ids )
for type in types :
for field in type . field_ids :
if field . name in res :
res [ field . name ] . setdefault ( ' states ' , { } )
res [ field . name ] [ ' states ' ] [ type . code ] = [
( ' readonly ' , field . readonly ) ,
( ' required ' , field . required ) ]
return res
def name_get ( self , cr , uid , ids , context = None ) :
if not len ( ids ) :
return [ ]
res = [ ]
for id in self . browse ( cr , uid , ids ) :
res . append ( ( id . id , id . acc_number ) )
return res
2007-06-25 07:59:27 +00:00
2007-06-20 15:52:07 +00:00
res_partner_bank ( )
2009-11-03 12:55:28 +00:00
class res_partner_category ( osv . osv ) :
_inherit = ' res.partner.category '
_columns = {
' partner_ids ' : fields . many2many ( ' res.partner ' , ' res_partner_category_rel ' , ' category_id ' , ' partner_id ' , ' Partners ' ) ,
}
res_partner_category ( )
2008-07-23 15:01:27 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: