summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/solr/apache_solr_queue.py
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-08-26 12:13:28 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-08-26 12:13:28 +0700
commit315b832420eb8314e809b1c0f549304d423b45f3 (patch)
treebf31b1f24ffa511308bec829b7e57ff09eabd294 /indoteknik_custom/models/solr/apache_solr_queue.py
parent52f4b12c0b211f958c2704346d7da24d1d4767c6 (diff)
Create apache solr queue and implement to product.template and website.categories.homepage
Diffstat (limited to 'indoteknik_custom/models/solr/apache_solr_queue.py')
-rw-r--r--indoteknik_custom/models/solr/apache_solr_queue.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/indoteknik_custom/models/solr/apache_solr_queue.py b/indoteknik_custom/models/solr/apache_solr_queue.py
new file mode 100644
index 00000000..eb5a99a8
--- /dev/null
+++ b/indoteknik_custom/models/solr/apache_solr_queue.py
@@ -0,0 +1,69 @@
+from odoo import models, fields
+from datetime import datetime
+import logging
+
+
+_logger = logging.getLogger(__name__)
+
+class ApacheSolrQueue(models.Model):
+ _name = 'apache.solr.queue'
+
+ display_name = fields.Char('Display Name', compute="_compute_display_name")
+ res_model = fields.Char('Resource Model')
+ res_id = fields.Integer('Resource ID')
+ function_name = fields.Char('Function Name')
+ execute_status = fields.Selection([
+ ('success', 'Success'),
+ ('failed', 'Failed'),
+ ('not_found', 'Record not found')
+ ], 'Execute Status')
+ execute_date = fields.Datetime('Execute Date')
+
+ def _compute_display_name(self):
+ for rec in self:
+ try:
+ res_model = rec.res_model
+ res_id = int(rec.res_id)
+ model_instance = self.env[res_model].browse(res_id)
+ rec.display_name = model_instance.display_name or ''
+ except:
+ rec.display_name = ''
+
+ def process_queue_item(self, limit=100):
+ records = self.search([('execute_status', '=', False)], order='create_date asc', limit=limit)
+ for rec in records:
+ rec.execute_queue()
+
+ def execute_queue(self):
+ for rec in self:
+ try:
+ res_model = rec.res_model
+ res_id = int(rec.res_id)
+ function_name = rec.function_name
+ _logger.info(f'Execute Queue: {res_model}.{function_name}() -> {res_id}')
+
+ domain = [('id', '=', res_id)]
+ if res_model in ['product.template']:
+ domain.append(('active', 'in', [True, False]))
+
+ model_instance = self.env[res_model].search(domain)
+ if model_instance:
+ getattr(model_instance, function_name)()
+ rec.execute_status = 'success'
+ else:
+ rec.execute_status = 'not_found'
+ except:
+ rec.execute_status = 'failed'
+ rec.execute_date = datetime.utcnow()
+ self.env.cr.commit()
+
+ def create_unique(self, payload={}):
+ count = self.search_count([
+ ('res_model', '=', payload['res_model']),
+ ('res_id', '=', payload['res_id']),
+ ('function_name', '=', payload['function_name']),
+ ('execute_status', '=', False)
+ ])
+ if count == 0:
+ self.create(payload)
+