summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/solr
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/solr')
-rw-r--r--indoteknik_custom/models/solr/__init__.py1
-rw-r--r--indoteknik_custom/models/solr/product_public_category.py1
-rw-r--r--indoteknik_custom/models/solr/website_categories_homepage.py26
-rw-r--r--indoteknik_custom/models/solr/website_categories_management.py93
4 files changed, 101 insertions, 20 deletions
diff --git a/indoteknik_custom/models/solr/__init__.py b/indoteknik_custom/models/solr/__init__.py
index 606c0035..925a8c14 100644
--- a/indoteknik_custom/models/solr/__init__.py
+++ b/indoteknik_custom/models/solr/__init__.py
@@ -5,6 +5,7 @@ from . import product_pricelist_item
from . import product_product
from . import product_template
from . import website_categories_homepage
+from . import website_categories_management
from . import x_manufactures
from . import x_banner_banner
from . import product_public_category
diff --git a/indoteknik_custom/models/solr/product_public_category.py b/indoteknik_custom/models/solr/product_public_category.py
index 2e2c09f7..0bcdc915 100644
--- a/indoteknik_custom/models/solr/product_public_category.py
+++ b/indoteknik_custom/models/solr/product_public_category.py
@@ -53,6 +53,7 @@ class ProductPublicCategory(models.Model):
'website_meta_desc_t': category.website_meta_description or '',
'tampil_di_index': category.x_studio_field_4qhoN if category.x_studio_field_4qhoN is not None else False,
'sequence_frontend_i': category.sequence_frontend or 0,
+ 'image_s': category.image or '',
'parent_frontend_id_i': parent_frontend.id if parent_frontend else 0,
'parent_frontend_name_s': parent_frontend.name if parent_frontend else '',
'product_template': [x.id for x in category.product_tmpl_ids],
diff --git a/indoteknik_custom/models/solr/website_categories_homepage.py b/indoteknik_custom/models/solr/website_categories_homepage.py
index 70c7860d..c930882a 100644
--- a/indoteknik_custom/models/solr/website_categories_homepage.py
+++ b/indoteknik_custom/models/solr/website_categories_homepage.py
@@ -2,10 +2,6 @@ from odoo import models, fields, api
from datetime import datetime
import json
-import logging
-
-_logger = logging.getLogger(__name__)
-
class WebsiteCategoriesHomepage(models.Model):
_inherit = 'website.categories.homepage'
@@ -46,7 +42,7 @@ class WebsiteCategoriesHomepage(models.Model):
self.solr().optimize()
self.solr().commit()
return res
-
+
def _sync_status_category_homepage_solr(self):
for rec in self:
if rec.status == 'tayang':
@@ -61,15 +57,6 @@ class WebsiteCategoriesHomepage(models.Model):
if category.status == 'tidak_tayang':
continue
- category_id2_data = [
- {
- x.id: {
- 'child_frontend_id_i': [child.id for child in x.child_frontend_id]
- }
- }
- for x in category.category_id2
- ]
-
document = solr_model.get_doc('product_category_homepage', category.id)
document.update({
'id': category.id,
@@ -78,13 +65,12 @@ class WebsiteCategoriesHomepage(models.Model):
'image_s': self.env['ir.attachment'].api_image('website.categories.homepage', 'image', category.id),
'sequence_i': category.sequence or '',
'url_s': category.url or '',
- 'category_id2': category_id2_data,
+ 'product_ids': [x.id for x in category.product_ids]
})
- _logger.info('Category %s synchronized to Solr with document: %s', category.id, json.dumps(document))
- # self.solr().add([document])
- # category.update_last_update_solr()
-
- # self.solr().commit()
+ self.solr().add([document])
+ category.update_last_update_solr()
+
+ self.solr().commit()
# def _sync_delete_solr(self):
# for rec in self:
diff --git a/indoteknik_custom/models/solr/website_categories_management.py b/indoteknik_custom/models/solr/website_categories_management.py
new file mode 100644
index 00000000..fca01673
--- /dev/null
+++ b/indoteknik_custom/models/solr/website_categories_management.py
@@ -0,0 +1,93 @@
+from odoo import models, fields, api
+from datetime import datetime
+import json
+
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+class WebsiteCategoriesManagement(models.Model):
+ _inherit = 'website.categories.management'
+
+ last_update_solr = fields.Datetime('Last Update Solr')
+
+ def solr(self):
+ return self.env['apache.solr'].connect('product_category_management')
+
+ def update_last_update_solr(self):
+ self.last_update_solr = datetime.utcnow()
+
+ def _create_solr_queue(self, function_name):
+ for rec in self:
+ self.env['apache.solr.queue'].create_unique({
+ 'res_model': self._name,
+ 'res_id': rec.id,
+ 'function_name': function_name
+ })
+
+ @api.constrains('status')
+ def _create_solr_queue_sync_status(self):
+ self._create_solr_queue('_sync_status_category_management_solr')
+
+ @api.constrains('category_id', 'image', 'url', 'sequence',)
+ def _create_solr_queue_sync_category_homepage(self):
+ self._create_solr_queue('_sync_category_management_to_solr')
+
+ def action_sync_to_solr(self):
+ category_ids = self.env.context.get('active_ids', [])
+ categories = self.search([('id', 'in', category_ids)])
+ categories._create_solr_queue('_sync_category_management_to_solr')
+
+ def unlink(self):
+ res = super(WebsiteCategoriesManagement, self).unlink()
+ for rec in self:
+ self.solr().delete(rec.id)
+ self.solr().optimize()
+ self.solr().commit()
+ return res
+
+ def _sync_status_category_management_solr(self):
+ for rec in self:
+ if rec.status == 'tayang':
+ rec._sync_category_management_to_solr()
+ else:
+ rec.unlink()
+
+ def _sync_category_management_to_solr(self):
+ solr_model = self.env['apache.solr']
+
+ for category in self:
+ if category.status == 'tidak_tayang':
+ continue
+
+ category_id2_data = [
+ {
+ x.id: {
+ 'child_frontend_id_i': [child.id for child in x.child_frontend_id2]
+ }
+ }
+ for x in category.category_id2
+ ]
+
+ document = solr_model.get_doc('product_category_management', category.id)
+ document.update({
+ 'id': category.id,
+ 'category_id_i': category.category_id.id,
+ 'name_s': category.category_id.name,
+ 'image_s': self.env['ir.attachment'].api_image('website.categories.management', 'image', category.id),
+ 'sequence_i': category.sequence or '',
+ 'url_s': category.url or '',
+ 'category_id2': category_id2_data,
+ })
+ _logger.info('Category %s synchronized to Solr with document: %s', category.id, json.dumps(document))
+ self.solr().add([document])
+ category.update_last_update_solr()
+
+ self.solr().commit()
+
+ # def _sync_delete_solr(self):
+ # for rec in self:
+ # self.solr().delete(rec.id)
+ # self.solr().optimize()
+ # self.solr().commit() \ No newline at end of file