J.C
J.C

Reputation: 75

take field date from another database

in ticket.py. I have two class. class deposit.line and res_partner (inherit). I want to take the date of the class deposit.line but its function in the class res_partner(inherit)

def _compute_dept2(self, cr, uid, ids, amount, arg, context=None):
    result = {}
    obj2 = self.pool.get('deposit.line')
    for record in obj2.deposit_line:

        temp1 = record.date
        print temp1 
        print result
    return result

but the results of its existing print false. what wrong ? please correct my code

PS: My explanation is less good. but look at my code,surely knowing my explanation.

THIS MY COMPLETE CODE:

class deposit_line(osv.osv):
    _name ="deposit.line"
    _description = "Deposit Line" 

    _columns = {
        'name': fields.char('Name', size=64),
        'ref': fields.char('Reference', size=64),
        'amount': fields.float('Amount'),
        'date': fields.date('Date', required=True),
        'deposit_id': fields.many2one('res.partner', 'Deposit ', required=True, ondelete='cascade'),
    }
deposit_line()


class res_partner(osv.osv):
    _inherit = 'res.partner'

    def _compute_age(self, cr, uid, ids,date_birth,age,arg, context=None):
        result = {}
        for r in self.browse(cr, uid, ids, context=context):
           age=0
           if r.date_birth:
                age = (datetime.now()-datetime.strptime(r.date_birth,"%Y-%m-%d")).days/365.25
           result[r.id] = age 
        return result

    def _compute_dept(self, cr, uid, ids, deposit, available, arg, context=None):
        result = {}
        for r in self.browse(cr, uid, ids, context=context):
           avail=0
           temp = r.available
           if r.deposit:
                avail = r.deposit + temp
           result[r.id] = avail
        return result

    def _compute_dept2(self, cr, uid, ids, amount, arg, context=None):
        result = {}
        obj2 = self.pool.get('deposit.line')
        for record in obj2.deposit_line:

        temp1 = record.date
        print temp1 
        print result
            return result

    _columns = {
        'speaker': fields.boolean('Leader'),
        'event_ids': fields.one2many('event.event','main_speaker_id', readonly=True),
        'event_registration_ids': fields.one2many('event.registration','partner_id', readonly=True),
        'airline': fields.boolean('Airlines'),
        'hotel': fields.boolean('Hotel'),
        'date_birth': fields.date('Date of Birth'),
        'id_no': fields.char('ID. No', size=20),
        'id_expired': fields.date('Expired Date'),
        'sex':fields.selection([('male','Male'),('female','Female')],'Sex'),
        'age' : fields.function(_compute_age, type='float', method=True, store=True, string='Age', readonly=True),
        'deposit': fields.function(_compute_dept2, type='float', method=True, store=True, string='Deposit', readonly=True),
        'available': fields.function(_compute_dept, type='float', method=True, store=True, string='Available', readonly=True),
        'deposit_ids':fields.one2many('deposit.line', 'deposit_id', 'Deposit Line'),

    }

res_partner()

Upvotes: 0

Views: 277

Answers (2)

Daniel Reis
Daniel Reis

Reputation: 13342

After line 3, you forgot to:

obj2.browse(cr, uid, ids, context=context)

You should learn to use the debugger:

Add the line import pdb; pdb.set_trace() where you want to place a breakpoint. When the Python reaches the breakpoint it stops at the console with a (pdb) prompt. There type p obj to print variable obj, n to step to the next instruction, and hfor help. You might find more info in this post and in the docs.

Upvotes: 1

Mohammad Alhashash
Mohammad Alhashash

Reputation: 1589

Since you have one2many field for deposit_line defined in the res.partner model, you do not need the to access deposit_line object directly.

def _compute_dept2(self, cr, uid, ids, amount, arg, context=None):
    result = {}
    for partner in self.browse(cr, uid, id, context=context)
        result[partner.id]=0
        for deposit_line in partner.deposit_ids:
            result[partner.id] += deposit_line.amount
    return result

Upvotes: 2

Related Questions