diff options
Diffstat (limited to 'indoteknik_custom/models/solr')
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 |
