summaryrefslogtreecommitdiff
path: root/fixco_custom/models/queue_job.py
diff options
context:
space:
mode:
authorMqdd <ahmadmiqdad27@gmail.com>2026-01-06 15:25:19 +0700
committerMqdd <ahmadmiqdad27@gmail.com>2026-01-06 15:25:19 +0700
commit163a039add87b9d3dc3d3b9240e72034edb9d597 (patch)
treefdace4793a6adc1d88cbcde6756e83f83a017016 /fixco_custom/models/queue_job.py
parent5230d59fcd311ff5d3fa53c3907e971e97d4fb44 (diff)
parentd221d6dd6bafba1c49fb942a802160832c0fdb82 (diff)
Merge branch 'main' of https://bitbucket.org/altafixco/fixco-addons
merge
Diffstat (limited to 'fixco_custom/models/queue_job.py')
-rw-r--r--fixco_custom/models/queue_job.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/fixco_custom/models/queue_job.py b/fixco_custom/models/queue_job.py
new file mode 100644
index 0000000..56926e3
--- /dev/null
+++ b/fixco_custom/models/queue_job.py
@@ -0,0 +1,56 @@
+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'), ('method_name', '=', 'get_order_id_and_create_detail_order')], order='create_date desc', limit=limit)
+ if not jobs:
+ jobs = self.search([('state', '=', 'draft'), ('method_name', '!=', 'get_order_id_and_create_detail_order')], order='create_date desc', limit=limit)
+ for job in jobs:
+ try:
+ job.write({'state': 'running'})
+ self.env.cr.commit()
+
+ 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')
+
+ with self.env.cr.savepoint():
+ method()
+
+ job.write({'state': 'done'})
+ self.env.cr.commit()
+
+ except Exception:
+ job.write({
+ 'state': 'error',
+ 'error_message': traceback.format_exc()
+ })
+ self.env.cr.commit()
+