diff options
| author | it-fixcomart <it@fixcomart.co.id> | 2024-09-05 17:49:30 +0700 |
|---|---|---|
| committer | it-fixcomart <it@fixcomart.co.id> | 2024-09-05 17:49:30 +0700 |
| commit | 1b55d65464b9789164ba45bdef03c56428e026f2 (patch) | |
| tree | 23ddc69b19e7fd1b84bac952701f1cd449fa68a8 /indoteknik_custom/models | |
| parent | 4252e1b1b58499443a29c4a9fcf7d8ea8c2d2d31 (diff) | |
<iman> update category management
Diffstat (limited to 'indoteknik_custom/models')
| -rw-r--r-- | indoteknik_custom/models/solr/website_categories_management.py | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/indoteknik_custom/models/solr/website_categories_management.py b/indoteknik_custom/models/solr/website_categories_management.py index c3851f4b..fe85f8e7 100644 --- a/indoteknik_custom/models/solr/website_categories_management.py +++ b/indoteknik_custom/models/solr/website_categories_management.py @@ -2,19 +2,21 @@ 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): + """Returns the Solr connection object.""" return self.env['apache.solr'].connect('category_management') def update_last_update_solr(self): + """Updates the last sync time for the record.""" self.last_update_solr = datetime.utcnow() def _create_solr_queue(self, function_name): + """Creates unique Solr queue for each record.""" for rec in self: self.env['apache.solr.queue'].create_unique({ 'res_model': self._name, @@ -24,26 +26,30 @@ class WebsiteCategoriesHomepage(models.Model): @api.constrains('status') def _create_solr_queue_sync_status(self): + """Triggers Solr sync when the status changes.""" self._create_solr_queue('_sync_status_category_homepage_solr') @api.constrains('category_id', 'category_id2', 'sequence') def _create_solr_queue_sync_category_homepage(self): + """Triggers Solr sync when categories or sequence change.""" self._create_solr_queue('_sync_category_management_to_solr') def action_sync_to_solr(self): + """Manual action to sync selected categories to Solr.""" 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() + """Overrides unlink method to remove records from Solr.""" for rec in self: self.solr().delete(rec.id) self.solr().optimize() self.solr().commit() - return res + return super(WebsiteCategoriesHomepage, self).unlink() def _sync_status_category_homepage_solr(self): + """Syncs status to Solr or deletes if not active.""" for rec in self: if rec.status == 'tayang': rec._sync_category_management_to_solr() @@ -51,13 +57,14 @@ class WebsiteCategoriesHomepage(models.Model): rec.unlink() def _sync_category_management_to_solr(self): + """Syncs categories (Level 1, 2, and 3) to Solr.""" solr_model = self.env['apache.solr'] for category in self: if category.status != 'tayang': continue - # Level 1 Document + # Prepare Level 1 document document = solr_model.get_doc('category_management', category.id) document.update({ 'id': category.id, @@ -65,44 +72,39 @@ class WebsiteCategoriesHomepage(models.Model): '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), + 'numFound_i': len(category.category_id.product_tmpl_ids), }) - # Level 2 and Level 3 Documents + # Prepare Level 2 documents level_2_docs = [] - for x in category.category_id2: + for category_level_2 in category.line_ids.mapped('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), + 'id_level_2': category_level_2.id, + 'name_level_2': category_level_2.name, + 'numFound_level_2': len(category_level_2.product_tmpl_ids), + 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_2.id), 'categories_level_3': [] } - # Level 3 Data - for child in x.child_frontend_id2: + # Prepare Level 3 documents + for category_level_3 in category_level_2.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), + 'id_level_3': category_level_3.id, + 'name_level_3': category_level_3.name, + 'numFound_level_3': len(category_level_3.product_tmpl_ids), + 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_3.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 + # Add Level 2 documents to Level 1 document document['categories_level_2'] = level_2_docs - # Add document to Solr + # Sync document with Solr self.solr().add([document]) category.update_last_update_solr() + # Commit and optimize Solr changes 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 + self.solr().optimize() |
