summaryrefslogtreecommitdiff
path: root/fixco_custom/models/queue_job.py
blob: 68ddf8c76b1b08314b392179078c6692f5532b07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from odoo import models, fields, api
from odoo.exceptions import UserError
import traceback

class QueueJob(models.Model):
    _name = 'queue.job'
    _description = 'Queueing Job Runner'
    _order = 'create_date desc'

    name = fields.Char(required=True)
    model_name = fields.Char(required=True)
    method_name = fields.Char(required=True)
    res_id = fields.Integer(string='Record ID')
    state = fields.Selection([
        ('draft', 'Draft'),
        ('running', 'Running'),
        ('done', 'Done'),
        ('error', 'Error'),
    ], default='draft')

    error_message = fields.Text()

    def action_run_selected(self):
        for job in self:
            job.action_run()

    def action_run(self, limit=10):
        jobs = self.search([('state', '=', 'draft')], order='create_date desc', limit=limit)
        for job in jobs:
            job.state = 'running'
            try:

                record = self.env[job.model_name].browse(job.res_id)
                if not record.exists():
                    raise UserError('Target record not found')

                method = getattr(record, job.method_name, None)
                if not method:
                    raise UserError('Method not found')

                method()  # 🔥 EXECUTE
                job.state = 'done'

            except Exception as e:
                job.state = 'error'
                job.error_message = traceback.format_exc()