from odoo import fields, models, api from datetime import datetime class XBannerCategory(models.Model): _inherit = "x_banner.category" last_update_solr = fields.Datetime(string='Last Update Solr') def update_last_update_solr(self): self.last_update_solr = datetime.utcnow() def solr(self): return self.env['apache.solr'].connect('banner_categories') 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('x_name', 'x_banner_subtitle', 'x_studio_field_KKVl4', 'banner_ids') def _create_solr_queue_sync_banner_categories(self): self._create_solr_queue('_sync_banner_categories_to_solr') def action_sync_to_solr(self): banner_ids = self.env.context.get('active_ids', []) banners = self.search([('id', 'in', banner_ids)]) banners._create_solr_queue('_sync_banner_categories_to_solr') def _sync_banner_categories_to_solr(self): for banners in self: document = {} document.update({ 'id': banners.id, 'display_name_s': banners.display_name, 'name_s': banners.x_name, 'banner_subtitle_s': banners.x_banner_subtitle or '', 'x_studio_field_KKVl4_s': banners.x_studio_field_KKVl4 or '', 'banners': [x.id for x in banners.banner_ids], }) self.solr().add([document]) banners.update_last_update_solr() self.solr().commit() def unlink(self): res = super(XBannerCategory, self).unlink() for rec in self: self.solr().delete(rec.id) self.solr().optimize() self.solr().commit() return res