Skip to Content
Menu
This question has been flagged
3 Replies
1463 Views

Hi can someone help me please with a automated action to check if my field is over or under current date based on the result set field status

Situation:
model = stock.move

x_so_dispatch_date = date field

x_status = select field


so_x_dispatch_date if after now set x_status late

this condition to be only evaluated for moves not done 


thank you

Avatar
Discard
Best Answer

Hi,

You can try this code


Let us assume the field property is the given format


x_so_dispatch_date = fields.Date(string="Dispatch Date")

x_status = fields.Selection([('on_time', 'On Time'), ('late', 'Late')], string="Status")


then add the method like


@api.model

    def update_move_status(self):

        # Find moves that are not done and have a dispatch date after the current date

        late_moves = self.env['stock.move'].search([

            ('state', '!=', 'done'),

            ('x_so_dispatch_date', '>', fields.Date.today())

        ])


        # Update the status for late moves

        for move in late_moves:

            move.x_status = 'late'


        # Update the status for on-time moves

        on_time_moves = self.env['stock.move'].search([

            ('state', '!=', 'done'),

            ('x_so_dispatch_date', '        ])

        for move in on_time_moves:

            move.x_status = 'on_time'


Hope it helps

Avatar
Discard
Author Best Answer

After fixing some indents errors and filed mismatchs i get the  "forbidden opcode(s) in 'lambda': STORE_ATTR" error on action save 
any idea why?

thank you 

Avatar
Discard
Best Answer

class StockMove(models.Model):

    _inherit = 'stock.move'


    x_so_dispatch_date = fields.Date(string='Dispatch Date')

    x_status = fields.Selection([

        ('on_time', 'On Time'),

        ('late', 'Late'),

    ], string='Status', compute='_compute_status', store=True)


    def _compute_status(self):

        for move in self:

            if move.state != 'done' and move.x_so_dispatch_date:

                if move.x_so_dispatch_date > fields.Date.today():

                    move.x_status = 'on_time'

                else:

                    move.x_status = 'late'

            else:

                move.x_status = False


Avatar
Discard
Related Posts Replies Views Activity
1
Sep 23
1447
5
Jul 20
5398
0
Mar 17
2522
1
Sep 24
819
0
Oct 21
1449