NeoVe
NeoVe

Reputation: 3907

Translate old API Odoo function field into Odoo v9 community

so, as far as I know, function fields are deprecated on Odoo v9.

Take this example:

state = fields.function(_state_get, type="selection", copy=False,
        store={
            stock.picking = (lambda self, cr, uid, ids, ctx: ids, ['move_type', 'launch_pack_operations'], 20),
            stock.move = (_get_pickings, ['state', 'picking_id', 'partially_available'], 20)},
        selection=[
            ('draft', 'Draft'),
            ('cancel', 'Cancelled'),
            ('waiting', 'Waiting Another Operation'),
            ('confirmed', 'Waiting Availability'),
            ('partially_available', 'Partially Available'),
            ('assigned', 'Available'),
            ('done', 'Done'),
            ], string='Status', readonly=True, select=True, track_visibility='onchange',
        help="""
            * Draft: not confirmed yet and will not be scheduled until confirmed\n
            * Waiting Another Operation: waiting for another move to proceed before it becomes automatically available (e.g. in Make-To-Order flows)\n
            * Waiting Availability: still waiting for the availability of products\n
            * Partially Available: some products are available and reserved\n
            * Ready to Transfer: products reserved, simply waiting for confirmation.\n
            * Transferred: has been processed, can't be modified or cancelled anymore\n
            * Cancelled: has been cancelled, can't be confirmed anymore"""
    ),

This calls two functions _state_get and _get_pickings

The functions work as they are on v9, but how do I declare something similar to this field into the new API?

Upvotes: 0

Views: 116

Answers (1)

You can declare field this way in new API.

@api.depends('move_lines.state')
def _state_get(self)
    #your code
    pass

state = fields.Selection(compute=_state_get,store=True,copy=False,selection=[
            ('draft', 'Draft'),
            ('cancel', 'Cancelled'),
            ('waiting', 'Waiting Another Operation'),
            ('confirmed', 'Waiting Availability'),
            ('partially_available', 'Partially Available'),
            ('assigned', 'Available'),
            ('done', 'Done'),
            ], string='Status', readonly=True, select=True, track_visibility='onchange',
        help="""
            * Draft: not confirmed yet and will not be scheduled until confirmed\n
            * Waiting Another Operation: waiting for another move to proceed before it becomes automatically available (e.g. in Make-To-Order flows)\n
            * Waiting Availability: still waiting for the availability of products\n
            * Partially Available: some products are available and reserved\n
            * Ready to Transfer: products reserved, simply waiting for confirmation.\n
            * Transferred: has been processed, can't be modified or cancelled anymore\n
            * Cancelled: has been cancelled, can't be confirmed anymore"""
    )

Upvotes: 1

Related Questions