2009-10-13 05:58:37 +00:00
# -*- coding: utf-8 -*-
2008-08-24 14:45:43 +00:00
##############################################################################
2009-10-14 11:15:34 +00:00
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
2008-08-24 14:45:43 +00:00
#
2008-11-03 19:18:56 +00:00
# This program is free software: you can redistribute it and/or modify
2009-10-14 11:15:34 +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.
2008-08-24 14:45:43 +00:00
#
2008-11-03 19:18:56 +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 11:15:34 +00:00
# GNU Affero General Public License for more details.
2008-08-24 14:45:43 +00:00
#
2009-10-14 11:15:34 +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/>.
2008-08-24 14:45:43 +00:00
#
##############################################################################
import netsvc
from osv import fields , osv
class res_partner_contact ( osv . osv ) :
_name = " res.partner.contact "
_description = " res.partner.contact "
2009-11-24 10:58:51 +00:00
def init ( self , cr ) :
address_obj = self . pool . get ( ' res.partner.address ' )
job_obj = self . pool . get ( ' res.partner.job ' )
address_ids = address_obj . search ( cr , 1 , [ ] )
for address in address_obj . browse ( cr , 1 , address_ids ) :
contact_id = self . create ( cr , 1 , { ' name ' : address . name or ' t ' } )
2008-08-24 14:45:43 +00:00
def _title_get ( self , cr , user , context = { } ) :
obj = self . pool . get ( ' res.partner.title ' )
ids = obj . search ( cr , user , [ ] )
res = obj . read ( cr , user , ids , [ ' shortcut ' , ' name ' , ' domain ' ] , context )
res = [ ( r [ ' shortcut ' ] , r [ ' name ' ] ) for r in res if r [ ' domain ' ] == ' contact ' ]
return res
_columns = {
' name ' : fields . char ( ' Last Name ' , size = 30 , required = True ) ,
' first_name ' : fields . char ( ' First Name ' , size = 30 ) ,
' mobile ' : fields . char ( ' Mobile ' , size = 30 ) ,
' title ' : fields . selection ( _title_get , ' Title ' ) ,
' website ' : fields . char ( ' Website ' , size = 120 ) ,
' lang_id ' : fields . many2one ( ' res.lang ' , ' Language ' ) ,
2008-10-27 21:44:17 +00:00
' job_ids ' : fields . one2many ( ' res.partner.job ' , ' contact_id ' , ' Functions and Addresses ' ) ,
2008-08-24 14:45:43 +00:00
' country_id ' : fields . many2one ( ' res.country ' , ' Nationality ' ) ,
' birthdate ' : fields . date ( ' Birth Date ' ) ,
2009-12-21 12:21:32 +00:00
' active ' : fields . boolean ( ' Active ' , help = " If the active field is set to true, it will allow you to hide the partner contact without removing it. " ) ,
2008-10-29 15:16:39 +00:00
' partner_id ' : fields . related ( ' job_ids ' , ' address_id ' , ' partner_id ' , type = ' many2one ' , relation = ' res.partner ' , string = ' Main Employer ' ) ,
2009-05-06 09:24:15 +00:00
' function_id ' : fields . related ( ' job_ids ' , ' function_id ' , type = ' many2one ' , relation = ' res.partner.function ' , string = ' Main Function ' ) ,
' job_id ' : fields . related ( ' job_ids ' , type = ' many2one ' , relation = ' res.partner.job ' , string = ' Main Job ' ) ,
2009-02-20 00:06:54 +00:00
' email ' : fields . char ( ' E-Mail ' , size = 240 ) ,
2009-09-24 10:46:21 +00:00
' comment ' : fields . text ( ' Notes ' , translate = True ) ,
' photo ' : fields . binary ( ' Image ' ) ,
2008-08-24 14:45:43 +00:00
}
_defaults = {
' active ' : lambda * a : True ,
}
2009-09-24 10:46:21 +00:00
_order = " name,first_name "
2008-08-24 14:45:43 +00:00
def name_get ( self , cr , user , ids , context = { } ) :
#will return name and first_name.......
if not len ( ids ) :
return [ ]
res = [ ]
2008-10-06 14:39:28 +00:00
for r in self . read ( cr , user , ids , [ ' name ' , ' first_name ' , ' title ' ] ) :
addr = r [ ' title ' ] and str ( r [ ' title ' ] ) + " " or ' '
2008-12-12 00:02:09 +00:00
addr + = r . get ( ' name ' , ' ' )
2008-08-24 14:45:43 +00:00
if r [ ' name ' ] and r [ ' first_name ' ] :
addr + = ' '
2008-12-12 13:01:57 +00:00
addr + = ( r . get ( ' first_name ' , ' ' ) or ' ' )
2008-08-24 14:45:43 +00:00
res . append ( ( r [ ' id ' ] , addr ) )
return res
res_partner_contact ( )
class res_partner_address ( osv . osv ) :
#overriding of the name_get defined in base in order to remove the old contact name
def name_get ( self , cr , user , ids , context = { } ) :
if not len ( ids ) :
return [ ]
res = [ ]
for r in self . read ( cr , user , ids , [ ' zip ' , ' city ' , ' partner_id ' , ' street ' ] ) :
2009-05-18 09:45:44 +00:00
if context . get ( ' contact_display ' , ' contact ' ) == ' partner ' and r [ ' partner_id ' ] :
2008-08-24 14:45:43 +00:00
res . append ( ( r [ ' id ' ] , r [ ' partner_id ' ] [ 1 ] ) )
else :
addr = str ( ' ' )
2009-01-26 18:28:07 +00:00
addr + = " %s %s %s " % ( r . get ( ' street ' , ' ' ) or ' ' , r . get ( ' zip ' , ' ' ) or ' ' , r . get ( ' city ' , ' ' ) or ' ' )
2008-08-24 14:45:43 +00:00
res . append ( ( r [ ' id ' ] , addr . strip ( ) or ' / ' ) )
return res
_name = ' res.partner.address '
_inherit = ' res.partner.address '
2008-10-06 14:39:28 +00:00
_description = ' Partner Address '
2008-08-24 14:45:43 +00:00
_columns = {
2009-05-06 09:24:15 +00:00
' job_id ' : fields . related ( ' job_ids ' , ' contact_id ' , ' job_id ' , type = ' many2one ' , relation = ' res.partner.job ' , string = ' Main Job ' ) ,
2008-10-29 13:34:45 +00:00
' job_ids ' : fields . one2many ( ' res.partner.job ' , ' address_id ' , ' Contacts ' ) ,
2008-08-24 14:45:43 +00:00
}
res_partner_address ( )
class res_partner_job ( osv . osv ) :
2009-11-24 10:58:51 +00:00
def init ( self , cr ) :
address_obj = self . pool . get ( ' res.partner.address ' )
contact_obj = self . pool . get ( ' res.partner.contact ' )
address_ids = address_obj . search ( cr , 1 , [ ] )
for address in address_obj . browse ( cr , 1 , address_ids ) :
contact_id = contact_obj . search ( cr , 1 , [ ( ' name ' , ' = ' , address . name ) ] )
if contact_id :
contact_id = contact_id [ 0 ]
self . create ( cr , 1 , { ' address_id ' : address . id , ' contact_id ' : contact_id } )
2008-08-24 14:45:43 +00:00
2008-10-06 14:39:28 +00:00
def name_get ( self , cr , uid , ids , context = { } ) :
if not len ( ids ) :
return [ ]
res = [ ]
for r in self . browse ( cr , uid , ids ) :
2009-05-08 14:19:37 +00:00
funct = r . function_id and ( " , " + r . function_id . name ) or " "
res . append ( ( r . id , self . pool . get ( ' res.partner.contact ' ) . name_get ( cr , uid , [ r . contact_id . id ] ) [ 0 ] [ 1 ] + funct ) )
2008-08-24 14:45:43 +00:00
return res
2008-09-17 07:12:42 +00:00
def search ( self , cr , user , args , offset = 0 , limit = None , order = None ,
context = None , count = False ) :
for arg in args :
if arg [ 0 ] == ' address_id ' :
self . _order = ' sequence_partner '
if arg [ 0 ] == ' contact_id ' :
self . _order = ' sequence_contact '
return super ( res_partner_job , self ) . search ( cr , user , args , offset , limit , order , context , count )
2008-08-24 14:45:43 +00:00
_name = ' res.partner.job '
2008-12-26 19:21:44 +00:00
_description = ' Contact Partner Function '
2008-08-24 14:45:43 +00:00
_order = ' sequence_contact '
_columns = {
2009-09-24 10:46:21 +00:00
' name ' : fields . related ( ' address_id ' , ' partner_id ' , type = ' many2one ' , relation = ' res.partner ' , string = ' Partner ' , help = " You may enter Address first,Partner will be linked automatically if any. " ) ,
' address_id ' : fields . many2one ( ' res.partner.address ' , ' Address ' , help = ' Address which is linked to the Partner ' ) ,
2008-11-25 06:45:57 +00:00
' contact_id ' : fields . many2one ( ' res.partner.contact ' , ' Contact ' , required = True , ondelete = ' cascade ' ) ,
2009-09-24 10:46:21 +00:00
' function_id ' : fields . many2one ( ' res.partner.function ' , ' Partner Function ' , help = " Function of this contact with this partner " ) ,
2009-01-04 10:36:48 +00:00
' sequence_contact ' : fields . integer ( ' Contact Seq. ' , help = ' Order of importance of this address in the list of addresses of the linked contact ' ) ,
' sequence_partner ' : fields . integer ( ' Partner Seq. ' , help = ' Order of importance of this job title in the list of job title of the linked partner ' ) ,
2009-09-24 10:46:21 +00:00
' email ' : fields . char ( ' E-Mail ' , size = 240 , help = " Job E-Mail " ) ,
' phone ' : fields . char ( ' Phone ' , size = 64 , help = " Job Phone no. " ) ,
' fax ' : fields . char ( ' Fax ' , size = 64 , help = " Job FAX no. " ) ,
2009-02-20 00:06:54 +00:00
' extension ' : fields . char ( ' Extension ' , size = 64 , help = ' Internal/External extension phone number ' ) ,
2009-03-25 06:53:10 +00:00
' other ' : fields . char ( ' Other ' , size = 64 , help = ' Additional phone field ' ) ,
2009-09-24 10:46:21 +00:00
' date_start ' : fields . date ( ' Date Start ' , help = " Start date of job(Joining Date) " ) ,
' date_stop ' : fields . date ( ' Date Stop ' , help = " Last date of job " ) ,
' state ' : fields . selection ( [ ( ' past ' , ' Past ' ) , ( ' current ' , ' Current ' ) ] , ' State ' , required = True , help = " Status of Address " ) ,
2008-08-24 14:45:43 +00:00
}
_defaults = {
' sequence_contact ' : lambda * a : 0 ,
2008-10-20 13:22:12 +00:00
' state ' : lambda * a : ' current ' ,
2008-08-24 14:45:43 +00:00
}
res_partner_job ( )
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: