diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-09-04 17:18:02 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-09-04 17:18:02 +0700 |
| commit | 013a3e4d73327c138ede6f224b32969dc8f85c1f (patch) | |
| tree | 24ca3a872c4d9f70c1568221d4088c3e097c73ec | |
| parent | cf52a49f77c744c47f2f2f3d807a1dafcd8733ee (diff) | |
solr category management
| -rw-r--r-- | indoteknik_custom/models/solr/__init__.py | 3 | ||||
| -rw-r--r-- | indoteknik_custom/models/solr/website_categories_management.py | 108 | ||||
| -rw-r--r-- | indoteknik_custom/views/website_categories_management.xml | 7 |
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" |
