from odoo import models, fields, api import logging from datetime import datetime _logger = logging.getLogger(__name__) class XBannerBanner(models.Model): _inherit = "x_banner.banner" 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('banners') 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_url_banner', 'background_color', 'x_banner_image', 'x_banner_category', 'x_relasi_manufacture', 'x_sequence_banner', 'x_status_banner', 'sequence', 'group_by_week', 'headline_banner_s', 'description_banner_s', 'x_keyword_banner') def _create_solr_queue_sync_brands(self): self._create_solr_queue('_sync_banners_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_banners_to_solr') def _sync_banners_to_solr(self): solr_model = self.env['apache.solr'] for banners in self: document = {} document.update({ 'id': banners.id, 'display_name_s': banners.display_name, 'name_s': banners.x_name, 'sequence_i': banners.sequence or '', 'url_s': banners.x_url_banner or '', 'background_color_s': banners.background_color or '', 'image_s': self.env['ir.attachment'].api_image('x_banner.banner', 'x_banner_image', banners.id), 'status_s': banners.x_status_banner or '', 'category_id_i': banners.x_banner_category.id or '', 'manufacture_id_i': banners.x_relasi_manufacture.id or '', 'group_by_week': banners.group_by_week or '', 'headline_banner_s': banners.x_headline_banner or '', 'description_banner_s': banners.x_description_banner or '', 'keyword_banner_s': banners.x_keyword_banner or '', }) self.solr().add([document]) banners.update_last_update_solr() self.solr().commit() def unlink(self): res = super(XBannerBanner, self).unlink() for rec in self: self.solr().delete(rec.id) self.solr().optimize() self.solr().commit() return res