2009-10-13 05:58:37 +00:00
# -*- coding: utf-8 -*-
2007-08-06 09:45:52 +00:00
##############################################################################
2009-10-14 11:15:34 +00:00
#
2008-11-04 12:35:47 +00:00
# OpenERP, Open Source Management Solution
2009-10-14 11:15:34 +00:00
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
2008-06-16 11:00:21 +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.
2007-08-06 09:45:52 +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.
2007-08-06 09:45:52 +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/>.
2007-08-06 09:45:52 +00:00
#
##############################################################################
2009-10-14 11:15:34 +00:00
2007-08-06 09:45:52 +00:00
from osv import fields
from osv import osv
import time
import netsvc
2008-07-09 08:57:39 +00:00
import pooler
2007-10-04 05:59:39 +00:00
2007-08-06 09:45:52 +00:00
class payment_type ( osv . osv ) :
2008-07-22 15:11:28 +00:00
_name = ' payment.type '
_description = ' Payment type '
_columns = {
2008-09-22 10:32:12 +00:00
' name ' : fields . char ( ' Name ' , size = 64 , required = True , help = ' Payment Type ' ) ,
' code ' : fields . char ( ' Code ' , size = 64 , required = True , help = ' Specify the Code for Payment Type ' ) ,
2008-07-22 15:11:28 +00:00
' suitable_bank_types ' : fields . many2many ( ' res.partner.bank.type ' ,
' bank_type_payment_type_rel ' ,
' pay_type_id ' , ' bank_type_id ' ,
' Suitable bank types ' )
}
2007-08-06 09:45:52 +00:00
payment_type ( )
class payment_mode ( osv . osv ) :
2008-07-22 15:11:28 +00:00
_name = ' payment.mode '
_description = ' Payment mode '
_columns = {
2008-09-22 10:32:12 +00:00
' name ' : fields . char ( ' Name ' , size = 64 , required = True , help = ' Mode of Payment ' ) ,
2008-07-22 15:11:28 +00:00
' bank_id ' : fields . many2one ( ' res.partner.bank ' , " Bank account " ,
2008-09-22 10:32:12 +00:00
required = True , help = ' Bank Account for the Payment Mode ' ) ,
2008-07-22 15:11:28 +00:00
' journal ' : fields . many2one ( ' account.journal ' , ' Journal ' , required = True ,
2008-09-22 10:32:12 +00:00
domain = [ ( ' type ' , ' = ' , ' cash ' ) ] , help = ' Cash Journal for the Payment Mode ' ) ,
' type ' : fields . many2one ( ' payment.type ' , ' Payment type ' , required = True , help = ' Select the Payment Type for the Payment Mode. ' ) ,
2008-07-22 15:11:28 +00:00
}
2008-08-29 15:20:06 +00:00
def suitable_bank_types ( self , cr , uid , payment_code = None , context = { } ) :
2008-07-22 15:11:28 +00:00
""" Return the codes of the bank type that are suitable
for the given payment type code """
2008-08-29 15:20:06 +00:00
if not payment_code :
return [ ]
2008-07-22 15:11:28 +00:00
cr . execute ( """ select t.code
from res_partner_bank_type t
join bank_type_payment_type_rel r on ( r . bank_type_id = t . id )
join payment_type pt on ( r . pay_type_id = pt . id )
2008-08-29 15:20:06 +00:00
join payment_mode pm on ( pm . type = pt . id )
where pm . id = % s """ , [payment_code])
2008-07-22 15:11:28 +00:00
return [ x [ 0 ] for x in cr . fetchall ( ) ]
2007-08-06 09:45:52 +00:00
2008-08-29 15:20:06 +00:00
2007-08-06 09:45:52 +00:00
payment_mode ( )
class payment_order ( osv . osv ) :
2008-07-22 15:11:28 +00:00
_name = ' payment.order '
_description = ' Payment Order '
2008-10-01 13:57:13 +00:00
_rec_name = ' reference '
2008-07-22 15:11:28 +00:00
def get_wizard ( self , type ) :
logger = netsvc . Logger ( )
logger . notifyChannel ( " warning " , netsvc . LOG_WARNING ,
" No wizard found for the payment type ' %s ' . " % type )
return None
def _total ( self , cursor , user , ids , name , args , context = None ) :
if not ids :
return { }
res = { }
for order in self . browse ( cursor , user , ids , context = context ) :
if order . line_ids :
res [ order . id ] = reduce ( lambda x , y : x + y . amount , order . line_ids , 0.0 )
else :
res [ order . id ] = 0.0
return res
_columns = {
2009-01-19 11:28:39 +00:00
' date_planned ' : fields . date ( ' Scheduled date if fixed ' , states = { ' done ' : [ ( ' readonly ' , True ) ] } , help = ' Select a date if you have chosen Preferred Date to be fixed. ' ) ,
' reference ' : fields . char ( ' Reference ' , size = 128 , required = 1 , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
' mode ' : fields . many2one ( ' payment.mode ' , ' Payment mode ' , select = True , required = 1 , states = { ' done ' : [ ( ' readonly ' , True ) ] } , help = ' Select the Payment Mode to be applied. ' ) ,
2008-07-22 15:11:28 +00:00
' state ' : fields . selection ( [
( ' draft ' , ' Draft ' ) ,
( ' open ' , ' Confirmed ' ) ,
( ' cancel ' , ' Cancelled ' ) ,
( ' done ' , ' Done ' ) ] , ' State ' , select = True ) ,
' line_ids ' : fields . one2many ( ' payment.line ' , ' order_id ' , ' Payment lines ' , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
' total ' : fields . function ( _total , string = " Total " , method = True ,
type = ' float ' ) ,
2009-01-19 11:28:39 +00:00
' user_id ' : fields . many2one ( ' res.users ' , ' User ' , required = True , states = { ' done ' : [ ( ' readonly ' , True ) ] } ) ,
2008-07-22 15:11:28 +00:00
' date_prefered ' : fields . selection ( [
( ' now ' , ' Directly ' ) ,
( ' due ' , ' Due date ' ) ,
( ' fixed ' , ' Fixed date ' )
2009-01-19 11:28:39 +00:00
] , " Preferred date " , change_default = True , required = True , states = { ' done ' : [ ( ' readonly ' , True ) ] } , help = " Choose an option for the Payment Order: ' Fixed ' stands for a date specified by you. ' Directly ' stands for the direct execution. ' Due date ' stands for the scheduled date of execution. " ) ,
2008-07-22 15:11:28 +00:00
' date_created ' : fields . date ( ' Creation date ' , readonly = True ) ,
' date_done ' : fields . date ( ' Execution date ' , readonly = True ) ,
}
_defaults = {
' user_id ' : lambda self , cr , uid , context : uid ,
' state ' : lambda * a : ' draft ' ,
' date_prefered ' : lambda * a : ' due ' ,
' date_created ' : lambda * a : time . strftime ( ' % Y- % m- %d ' ) ,
' reference ' : lambda self , cr , uid , context : self . pool . get ( ' ir.sequence ' ) . get ( cr , uid , ' payment.order ' ) ,
}
def set_to_draft ( self , cr , uid , ids , * args ) :
self . write ( cr , uid , ids , { ' state ' : ' draft ' } )
wf_service = netsvc . LocalService ( " workflow " )
for id in ids :
wf_service . trg_create ( uid , ' payment.order ' , id , cr )
return True
def action_open ( self , cr , uid , ids , * args ) :
for order in self . read ( cr , uid , ids , [ ' reference ' ] ) :
if not order [ ' reference ' ] :
reference = self . pool . get ( ' ir.sequence ' ) . get ( cr , uid , ' payment.order ' )
self . write ( cr , uid , order [ ' id ' ] , { ' reference ' : reference } )
return True
def set_done ( self , cr , uid , id , * args ) :
self . write ( cr , uid , id , { ' date_done ' : time . strftime ( ' % Y- % m- %d ' ) ,
' state ' : ' done ' , } )
wf_service = netsvc . LocalService ( " workflow " )
wf_service . trg_validate ( uid , ' payment.order ' , id , ' done ' , cr )
return True
2007-08-06 09:45:52 +00:00
payment_order ( )
2007-10-04 05:59:39 +00:00
2007-08-06 09:45:52 +00:00
class payment_line ( osv . osv ) :
2008-07-22 15:11:28 +00:00
_name = ' payment.line '
_description = ' Payment Line '
2008-08-29 13:53:05 +00:00
#~ def partner_payable(self, cr, uid, ids, name, args, context={}):
#~ if not ids: return {}
#~ partners= self.read(cr, uid, ids, ['partner_id'], context)
#~ partners= dict(map(lambda x: (x['id'], x['partner_id'][0]), partners))
#~ debit = self.pool.get('res.partner')._debit_get(cr, uid,
#~ partners.values(), name, args, context)
#~ for i in partners:
#~ partners[i] = debit[partners[i]]
#~ return partners
2008-07-22 15:11:28 +00:00
def translate ( self , orig ) :
return {
# "to_pay": "credit",
" due_date " : " date_maturity " ,
" reference " : " ref " } . get ( orig , orig )
def info_owner ( self , cr , uid , ids , name = None , args = None , context = None ) :
if not ids : return { }
result = { }
info = ' '
for line in self . browse ( cr , uid , ids , context = context ) :
owner = line . order_id . mode . bank_id . partner_id
result [ line . id ] = False
if owner . address :
for ads in owner . address :
if ads . type == ' default ' :
st = ads . street and ads . street or ' '
st1 = ads . street2 and ads . street2 or ' '
if ' zip_id ' in ads :
zip_city = ads . zip_id and self . pool . get ( ' res.partner.zip ' ) . name_get ( cr , uid , [ ads . zip_id . id ] ) [ 0 ] [ 1 ] or ' '
else :
zip = ads . zip and ads . zip or ' '
city = ads . city and ads . city or ' '
zip_city = zip + ' ' + city
cntry = ads . country_id and ads . country_id . name or ' '
info = owner . name + " \n " + st + " " + st1 + " \n " + zip_city + " \n " + cntry
result [ line . id ] = info
break
return result
def info_partner ( self , cr , uid , ids , name = None , args = None , context = None ) :
if not ids : return { }
result = { }
info = ' '
for line in self . browse ( cr , uid , ids , context = context ) :
result [ line . id ] = False
if not line . partner_id :
break
partner = line . partner_id . name or ' '
if line . partner_id . address :
for ads in line . partner_id . address :
if ads . type == ' default ' :
st = ads . street and ads . street or ' '
st1 = ads . street2 and ads . street2 or ' '
if ' zip_id ' in ads :
zip_city = ads . zip_id and self . pool . get ( ' res.partner.zip ' ) . name_get ( cr , uid , [ ads . zip_id . id ] ) [ 0 ] [ 1 ] or ' '
else :
zip = ads . zip and ads . zip or ' '
city = ads . city and ads . city or ' '
zip_city = zip + ' ' + city
cntry = ads . country_id and ads . country_id . name or ' '
info = partner + " \n " + st + " " + st1 + " \n " + zip_city + " \n " + cntry
result [ line . id ] = info
break
return result
def select_by_name ( self , cr , uid , ids , name , args , context = None ) :
if not ids : return { }
partner_obj = self . pool . get ( ' res.partner ' )
cr . execute ( """ SELECT pl.id, ml. %s
from account_move_line ml
inner join payment_line pl
on ( ml . id = pl . move_line_id )
where pl . id in ( % s ) """ %
( self . translate ( name ) , ' , ' . join ( map ( str , ids ) ) ) )
res = dict ( cr . fetchall ( ) )
if name == ' partner_id ' :
partner_name = { }
for p_id , p_name in partner_obj . name_get ( cr , uid ,
filter ( lambda x : x and x != 0 , res . values ( ) ) , context = context ) :
partner_name [ p_id ] = p_name
for id in ids :
if id in res and partner_name :
res [ id ] = ( res [ id ] , partner_name [ res [ id ] ] )
else :
res [ id ] = ( False , False )
else :
for id in ids :
res . setdefault ( id , ( False , " " ) )
return res
# def _currency(self, cursor, user, ids, name, args, context=None):
# if not ids:
# return {}
# res = {}
2008-07-09 08:57:39 +00:00
#
2008-07-22 15:11:28 +00:00
# currency_obj = self.pool.get('res.currency')
# account_obj = self.pool.get('account.account')
# cursor.execute('''SELECT pl.id, ml.currency_id, ml.account_id
# FROM account_move_line ml
# INNER JOIN payment_line pl
# ON (ml.id = pl.move_line_id)
# WHERE pl.id in (''' + ','.join([str(x) for x in ids]) + ')')
2008-07-09 08:57:39 +00:00
#
2008-07-22 15:11:28 +00:00
# res2 = {}
# account_ids = []
# for payment_line_id, currency_id, account_id in cursor.fetchall():
# res2[payment_line_id] = [currency_id, account_id]
# account_ids.append(account_id)
2008-07-09 08:57:39 +00:00
#
2008-07-22 15:11:28 +00:00
# account2currency_id = {}
# for account in account_obj.browse(cursor, user, account_ids,
# context=context):
# account2currency_id[account.id] = account.company_currency_id.id
2008-07-09 08:57:39 +00:00
#
2008-07-22 15:11:28 +00:00
# for payment_line_id in ids:
# if res2[payment_line_id][0]:
# res[payment_line_id] = res2[payment_line_id][0]
# else:
# res[payment_line_id] = \
# account2currency_id[res2[payment_line_id][1]]
2008-07-09 08:57:39 +00:00
#
2008-07-22 15:11:28 +00:00
# currency_names = {}
# for currency_id, name in currency_obj.name_get(cursor, user, res.values(),
# context=context):
# currency_names[currency_id] = name
# for payment_line_id in ids:
# res[payment_line_id] = (res[payment_line_id],
# currency_names[res[payment_line_id]])
# return res
2008-07-09 08:57:39 +00:00
#
2008-07-22 15:11:28 +00:00
# def _to_pay_currency(self, cursor, user, ids, name , args, context=None):
# if not ids:
# return {}
2008-07-09 08:57:39 +00:00
#
2008-07-22 15:11:28 +00:00
# cursor.execute('''SELECT pl.id,
# CASE WHEN ml.amount_currency < 0
# THEN - ml.amount_currency
# ELSE ml.credit
# END
# FROM account_move_line ml
# INNER JOIN payment_line pl
# ON (ml.id = pl.move_line_id)
# WHERE pl.id in (''' + ','.join([str(x) for x in ids]) + ')')
# return dict(cursor.fetchall())
def _amount ( self , cursor , user , ids , name , args , context = None ) :
if not ids :
return { }
currency_obj = self . pool . get ( ' res.currency ' )
if context is None :
context = { }
res = { }
for line in self . browse ( cursor , user , ids , context = context ) :
ctx = context . copy ( )
ctx [ ' date ' ] = line . order_id . date_done or time . strftime ( ' % Y- % m- %d ' )
res [ line . id ] = currency_obj . compute ( cursor , user , line . currency . id ,
line . company_currency . id ,
line . amount_currency , context = ctx )
return res
def _value_date ( self , cursor , user , ids , name , args , context = None ) :
if not ids :
return { }
res = { }
for line in self . browse ( cursor , user , ids , context = context ) :
if line . order_id . date_prefered == ' fixed ' :
res [ line . id ] = line . order_id . date_planned
elif line . order_id . date_prefered == ' due ' :
res [ line . id ] = line . due_date or time . strftime ( ' % Y- % m- %d ' )
else :
res [ line . id ] = time . strftime ( ' % Y- % m- %d ' )
return res
def _get_currency ( self , cr , uid , context ) :
user = self . pool . get ( ' res.users ' ) . browse ( cr , uid , uid )
if user . company_id :
return user . company_id . currency_id . id
else :
return self . pool . get ( ' res.currency ' ) . search ( cr , uid , [ ( ' rate ' , ' = ' , 1.0 ) ] ) [ 0 ]
# def select_move_lines(*a):
# print a
# return []
# def create(self, cr, uid, vals, context):
# print "created!!!"
# vals['company_currency'] = self._get_currency(cr, uid, context)
# return super(payment_line, self).create(cr, uid, vals, context)
def _get_ml_inv_ref ( self , cr , uid , ids , * a ) :
res = { }
for id in self . browse ( cr , uid , ids ) :
2008-09-04 13:06:03 +00:00
res [ id . id ] = False
2008-07-22 15:11:28 +00:00
if id . move_line_id :
if id . move_line_id . invoice :
2008-09-04 13:06:03 +00:00
res [ id . id ] = id . move_line_id . invoice . id
2008-07-22 15:11:28 +00:00
return res
def _get_ml_maturity_date ( self , cr , uid , ids , * a ) :
res = { }
for id in self . browse ( cr , uid , ids ) :
if id . move_line_id :
res [ id . id ] = id . move_line_id . date_maturity
else :
res [ id . id ] = " "
return res
def _get_ml_created_date ( self , cr , uid , ids , * a ) :
res = { }
for id in self . browse ( cr , uid , ids ) :
if id . move_line_id :
res [ id . id ] = id . move_line_id . date_created
else :
res [ id . id ] = " "
return res
_columns = {
' name ' : fields . char ( ' Your Reference ' , size = 64 , required = True ) ,
2009-02-26 14:31:43 +00:00
' communication ' : fields . char ( ' Communication ' , size = 64 , required = True , help = " Used as the message between ordering customer and current company. Depicts ' What do you want to say to the recipient about this order ? ' " ) ,
2008-09-22 10:32:12 +00:00
' communication2 ' : fields . char ( ' Communication 2 ' , size = 64 , help = ' The successor message of Communication. ' ) ,
' move_line_id ' : fields . many2one ( ' account.move.line ' , ' Entry line ' , domain = [ ( ' reconcile_id ' , ' = ' , False ) , ( ' account_id.type ' , ' = ' , ' payable ' ) ] , help = ' This Entry Line will be referred for the information of the ordering customer. ' ) ,
2008-08-29 15:20:06 +00:00
' amount_currency ' : fields . float ( ' Amount in Partner Currency ' , digits = ( 16 , 2 ) ,
2008-07-22 15:11:28 +00:00
required = True , help = ' Payment amount in the partner currency ' ) ,
# 'to_pay_currency': fields.function(_to_pay_currency, string='To Pay',
# method=True, type='float',
# help='Amount to pay in the partner currency'),
# 'currency': fields.function(_currency, string='Currency',
# method=True, type='many2one', obj='res.currency'),
2008-09-17 14:57:37 +00:00
' currency ' : fields . many2one ( ' res.currency ' , ' Partner Currency ' , required = True ) ,
' company_currency ' : fields . many2one ( ' res.currency ' , ' Company Currency ' , readonly = True ) ,
2008-07-22 15:11:28 +00:00
' bank_id ' : fields . many2one ( ' res.partner.bank ' , ' Destination Bank account ' ) ,
' order_id ' : fields . many2one ( ' payment.order ' , ' Order ' , required = True ,
ondelete = ' cascade ' , select = True ) ,
2008-09-22 10:32:12 +00:00
' partner_id ' : fields . many2one ( ' res.partner ' , string = " Partner " , required = True , help = ' The Ordering Customer ' ) ,
2008-08-29 15:20:06 +00:00
' amount ' : fields . function ( _amount , string = ' Amount in Company Currency ' ,
2008-07-22 15:11:28 +00:00
method = True , type = ' float ' ,
help = ' Payment amount in the company currency ' ) ,
# 'to_pay': fields.function(select_by_name, string="To Pay", method=True,
# type='float', help='Amount to pay in the company currency'),
# 'due_date': fields.function(select_by_name, string="Due date",
# method=True, type='date'),
' ml_date_created ' : fields . function ( _get_ml_created_date , string = " Effective Date " ,
method = True , type = ' date ' , help = " Invoice Effective Date " ) ,
# 'reference': fields.function(select_by_name, string="Ref", method=True,
# type='char'),
2008-11-04 12:35:47 +00:00
' ml_maturity_date ' : fields . function ( _get_ml_maturity_date , method = True , type = ' date ' , string = ' Maturity Date ' ) ,
2008-12-29 07:01:21 +00:00
' ml_inv_ref ' : fields . function ( _get_ml_inv_ref , method = True , type = ' many2one ' , relation = ' account.invoice ' , string = ' Invoice Ref. ' ) ,
2008-09-22 10:32:12 +00:00
' info_owner ' : fields . function ( info_owner , string = " Owner Account " , method = True , type = " text " , help = ' Address of the Main Partner ' ) ,
' info_partner ' : fields . function ( info_partner , string = " Destination Account " , method = True , type = " text " , help = ' Address of the Ordering Customer. ' ) ,
2008-08-29 13:53:05 +00:00
# 'partner_payable': fields.function(partner_payable, string="Partner payable", method=True, type='float'),
2008-07-22 15:11:28 +00:00
# 'value_date': fields.function(_value_date, string='Value Date',
# method=True, type='date'),
2008-12-29 07:01:21 +00:00
' date ' : fields . date ( ' Payment Date ' , help = " If no payment date is specified, the bank will treat this payment line directly " ) ,
2008-07-22 15:11:28 +00:00
' create_date ' : fields . datetime ( ' Created ' , readonly = True ) ,
' state ' : fields . selection ( [ ( ' normal ' , ' Free ' ) , ( ' structured ' , ' Structured ' ) ] , ' Communication Type ' , required = True )
}
_defaults = {
' name ' : lambda obj , cursor , user , context : obj . pool . get ( ' ir.sequence '
) . get ( cursor , user , ' payment.line ' ) ,
' state ' : lambda * args : ' normal ' ,
' currency ' : _get_currency ,
' company_currency ' : _get_currency ,
}
_sql_constraints = [
( ' name_uniq ' , ' UNIQUE(name) ' , ' The payment line name must be unique! ' ) ,
]
2008-09-17 11:54:22 +00:00
def onchange_move_line ( self , cr , uid , ids , move_line_id , payment_type , date_prefered , date_planned , currency = False , company_currency = False , context = None ) :
2008-07-22 15:11:28 +00:00
data = { }
2008-09-17 14:57:37 +00:00
data [ ' amount_currency ' ] = data [ ' communication ' ] = data [ ' partner_id ' ] = data [ ' reference ' ] = data [ ' date_created ' ] = data [ ' bank_id ' ] = data [ ' amount ' ] = False
2008-07-22 15:11:28 +00:00
if move_line_id :
2008-08-29 15:20:06 +00:00
line = self . pool . get ( ' account.move.line ' ) . browse ( cr , uid , move_line_id )
2008-07-22 15:11:28 +00:00
data [ ' amount_currency ' ] = line . amount_to_pay
2008-12-29 07:01:21 +00:00
2008-09-17 21:18:37 +00:00
res = self . onchange_amount ( cr , uid , ids , data [ ' amount_currency ' ] , currency ,
company_currency , context )
2008-09-17 11:54:22 +00:00
if res :
data [ ' amount ' ] = res [ ' value ' ] [ ' amount ' ]
2008-07-22 15:11:28 +00:00
data [ ' partner_id ' ] = line . partner_id . id
2008-09-17 14:57:37 +00:00
temp = line . currency_id and line . currency_id . id or False
if not temp :
if line . invoice :
data [ ' currency ' ] = line . invoice . currency_id . id
else :
data [ ' currency ' ] = temp
2008-07-22 15:11:28 +00:00
# calling onchange of partner and updating data dictionary
2008-08-29 15:20:06 +00:00
temp_dict = self . onchange_partner ( cr , uid , ids , line . partner_id . id , payment_type )
2008-07-22 15:11:28 +00:00
data . update ( temp_dict [ ' value ' ] )
data [ ' reference ' ] = line . ref
2008-08-29 15:20:06 +00:00
data [ ' date_created ' ] = line . date_created
2008-07-22 15:11:28 +00:00
data [ ' communication ' ] = line . ref
2008-08-29 15:20:06 +00:00
if date_prefered == ' now ' :
#no payment date => immediate payment
data [ ' date ' ] = False
elif date_prefered == ' due ' :
data [ ' date ' ] = line . date_maturity
elif date_prefered == ' fixed ' :
2008-09-02 06:52:47 +00:00
data [ ' date ' ] = date_planned
2008-07-22 15:11:28 +00:00
return { ' value ' : data }
2008-12-29 07:01:21 +00:00
def onchange_amount ( self , cr , uid , ids , amount , currency , cmpny_currency , context = None ) :
if ( not amount ) or ( not cmpny_currency ) :
return { ' value ' : { ' amount ' : False } }
2008-09-17 11:54:22 +00:00
res = { }
currency_obj = self . pool . get ( ' res.currency ' )
2008-12-29 07:01:21 +00:00
company_amount = currency_obj . compute ( cr , uid , currency , cmpny_currency , amount )
2008-09-17 11:54:22 +00:00
res [ ' amount ' ] = company_amount
return { ' value ' : res }
2008-08-29 15:20:06 +00:00
def onchange_partner ( self , cr , uid , ids , partner_id , payment_type , context = None ) :
2008-07-22 15:11:28 +00:00
data = { }
data [ ' info_partner ' ] = data [ ' bank_id ' ] = False
if partner_id :
part_obj = self . pool . get ( ' res.partner ' ) . browse ( cr , uid , partner_id )
partner = part_obj . name or ' '
if part_obj . address :
for ads in part_obj . address :
if ads . type == ' default ' :
st = ads . street and ads . street or ' '
st1 = ads . street2 and ads . street2 or ' '
if ' zip_id ' in ads :
zip_city = ads . zip_id and self . pool . get ( ' res.partner.zip ' ) . name_get ( cr , uid , [ ads . zip_id . id ] ) [ 0 ] [ 1 ] or ' '
else :
zip = ads . zip and ads . zip or ' '
city = ads . city and ads . city or ' '
zip_city = zip + ' ' + city
cntry = ads . country_id and ads . country_id . name or ' '
info = partner + " \n " + st + " " + st1 + " \n " + zip_city + " \n " + cntry
data [ ' info_partner ' ] = info
2008-08-29 15:20:06 +00:00
if part_obj . bank_ids and payment_type :
bank_type = self . pool . get ( ' payment.mode ' ) . suitable_bank_types ( cr , uid , payment_type , context = context )
for bank in part_obj . bank_ids :
if bank . state in bank_type :
data [ ' bank_id ' ] = bank . id
break
2008-07-22 15:11:28 +00:00
return { ' value ' : data }
def fields_get ( self , cr , uid , fields = None , context = None ) :
res = super ( payment_line , self ) . fields_get ( cr , uid , fields , context )
if ' communication2 ' in res :
res [ ' communication2 ' ] . setdefault ( ' states ' , { } )
res [ ' communication2 ' ] [ ' states ' ] [ ' structured ' ] = [ ( ' readonly ' , True ) ]
res [ ' communication2 ' ] [ ' states ' ] [ ' normal ' ] = [ ( ' readonly ' , False ) ]
return res
2007-08-06 09:45:52 +00:00
payment_line ( )
2008-07-23 14:41:47 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: