Odoo Help

Welcome!

This community is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

0

How to create a calculated field from another field in another class.

By
Reyes
on 3/24/15, 11:31 AM 818 views

Hello everyone,

I have two classes: "employees" and "contracts" that are related. There is an One2Many relation between "employee" and "contracts", so that one employee may have n contracts.

To create the “employees” module / class, I inherited from hr.employee and to create “contracts” I inherited from hr.contract.

Please, I need somebody explain me with an example under the new style of API v8 (took a few months learning and prefer to use from the start the new style of API v8) how to create a calculated date field in "employees" got the another value date field in "contracts". The date must take the date_start field in the last contract (remember that for every employee there n contracts).

I works perfectly the calculated field when the date grabs a date field in the same class (see example), but not how to do it when you take it from another class in another module and must also select an agreement among all to take the date.

Here I leave the example I've ever had and if I work:

# - * - Coding: utf-8 - * -

OpenERP from import fields, models, api

Employees class (models.Model):

_inherit = 'hr.employee'

date_last = fields.Date (compute = '_ calculate_birthday')

@ Api.depends ('birthday')

def _calculate_birthday (self):

for record in self:

record.date_last = record.birthday

Thank you all

1

Cyril Gaspard (GEM)

--Cyril Gaspard (GEM)--
4136
| 5 6 8
Paris, France
--Cyril Gaspard (GEM)--

Forum contributor since 2008

Cyril Gaspard (GEM)
On 3/24/15, 5:33 PM

Hi,

I try to sort by line id, but this give the date start of the last line created like you want => the last contract (not last modification), see code not tested:

from openerp import fields, models, api


class HrEmployee(models.Model):

    _inherit = 'hr.employee'


    contract_ids = fields.One2many('hr.contract', 'employee_id', string="Contracts")

    date_start = fields.Date(compute='_ get_date_start', string="Date start")


    @api.multi

    @api.depends('contract_ids.date_start')

    def _get_date_start(self):

        for record in self:

            record.date_start = record.contract_ids.sorted(key=lambda r: r.id, inverse=True).mapped('date_start')[0]



class HrContract(models.Model):

    _inherit = 'hr.contract'


    employee_id = fields.Many2one('hr.employee', string="Employee")

    date_start = fields.Date(string="Date start")


bye

0
Diego Calzadilla
On 3/24/15, 1:17 PM

No entiendo muy bien tu necesidad, pero para obtener campos de otra tabla, y usarlos en la tabla donde quieres hacer tus calculos  puedes usar fields.related. También puedes hacer un trigger para que cuando los valores cambien en la tabla de origen, cambien automaticamente en la tabla donde haces los calculos:


class comun_denominador_producto(osv.osv):

_inherit = 'product.product'

_name='product.product'

def _get_comun_denominador_ids(self, cr, uid, ids, context=None):

comun_denominador_ids = self.pool.get('product.product').search(cr, uid, [('product_tmpl_id', 'in', ids)])

return list(set(comun_denominador_ids))

_columns = {

'cm_pt_id': fields.related('product_tmpl_id', 'cm_id', 'comun_denominador', string="Común denominador", type='char', store={

'product.template': (_get_comun_denominador_ids, ['cm_id'], 10),

'product.product': (lambda self, cr, uid, ids, c=None: ids, [], 10),

}, select=True)

}


el campo 'comun_denominador' es tipo char, quizá algo como esto te sea útil, pero con el campo tipo date.

Saludos!

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

1 follower(s)

Stats

Asked: 3/24/15, 11:31 AM
Seen: 818 times
Last updated: 3/24/15, 11:33 PM