summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-09-04 17:18:02 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-09-04 17:18:02 +0700
commit013a3e4d73327c138ede6f224b32969dc8f85c1f (patch)
tree24ca3a872c4d9f70c1568221d4088c3e097c73ec
parentcf52a49f77c744c47f2f2f3d807a1dafcd8733ee (diff)
solr category management
-rw-r--r--indoteknik_custom/models/solr/__init__.py3
-rw-r--r--indoteknik_custom/models/solr/website_categories_management.py108
-rw-r--r--indoteknik_custom/views/website_categories_management.xml7
3 files changed, 117 insertions, 1 deletions
diff --git a/indoteknik_custom/models/solr/__init__.py b/indoteknik_custom/models/solr/__init__.py
index 606c0035..dafd5a1e 100644
--- a/indoteknik_custom/models/solr/__init__.py
+++ b/indoteknik_custom/models/solr/__init__.py
@@ -10,4 +10,5 @@ from . import x_banner_banner
from . import product_public_category
from . import x_banner_category
from . import promotion_program
-from . import promotion_program_line \ No newline at end of file
+from . import promotion_program_line
+from . import website_categories_management \ No newline at end of file
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..c3851f4b
--- /dev/null
+++ b/indoteknik_custom/models/solr/website_categories_management.py
@@ -0,0 +1,108 @@
+from odoo import models, fields, api
+from datetime import datetime
+import json
+
+
+class WebsiteCategoriesHomepage(models.Model):
+ _inherit = 'website.categories.management'
+
+ last_update_solr = fields.Datetime('Last Update Solr')
+
+ def solr(self):
+ return self.env['apache.solr'].connect('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_homepage_solr')
+
+ @api.constrains('category_id', 'category_id2', '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(WebsiteCategoriesHomepage, self).unlink()
+ for rec in self:
+ self.solr().delete(rec.id)
+ self.solr().optimize()
+ self.solr().commit()
+ return res
+
+ def _sync_status_category_homepage_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 != 'tayang':
+ continue
+
+ # Level 1 Document
+ document = solr_model.get_doc('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('product.public.category', 'image_1920', category.category_id.id),
+ 'sequence_i': category.sequence or '',
+ 'numFound_i': len(category.category_id.product_tmpl_ids.ids),
+ })
+
+ # Level 2 and Level 3 Documents
+ level_2_docs = []
+ for x in category.category_id2:
+ level_2_doc = {
+ 'id_level_2': x.id,
+ 'name_level_2': x.name,
+ 'numFound_level_2': len(x.product_tmpl_ids.ids),
+ 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', x.id),
+ 'categories_level_3': []
+ }
+
+ # Level 3 Data
+ for child in x.child_frontend_id2:
+ level_3_doc = {
+ 'id_level_3': child.id,
+ 'name_level_3': child.name,
+ 'numFound_level_3': len(child.product_tmpl_ids.ids),
+ 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', child.id),
+ }
+ level_2_doc['categories_level_3'].append(level_3_doc)
+
+ level_2_docs.append(level_2_doc)
+
+ # Add level 2 documents to level 1 document
+ document['categories_level_2'] = level_2_docs
+
+ # Add document to Solr
+ 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
diff --git a/indoteknik_custom/views/website_categories_management.xml b/indoteknik_custom/views/website_categories_management.xml
index 648814e2..9dbe20d8 100644
--- a/indoteknik_custom/views/website_categories_management.xml
+++ b/indoteknik_custom/views/website_categories_management.xml
@@ -55,6 +55,13 @@
<!-- <field name="state">code</field>-->
<!-- <field name="code">model.action_sync_to_solr()</field>-->
<!-- </record>-->
+ <record id="ir_actions_server_website_categories_management_sync_to_solr" model="ir.actions.server">
+ <field name="name">Sync to solr</field>
+ <field name="model_id" ref="indoteknik_custom.model_website_categories_management"/>
+ <field name="binding_model_id" ref="indoteknik_custom.model_website_categories_management"/>
+ <field name="state">code</field>
+ <field name="code">model.action_sync_to_solr()</field>
+ </record>
<menuitem
id="website_categories_management"