from odoo import models, fields, api import logging from datetime import datetime _logger = logging.getLogger(__name__) class XManufactures(models.Model): _inherit = "x_manufactures" 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('brands') 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_logo_manufacture', 'sequence', 'x_negara_asal', 'x_manufacture_level', 'x_short_desc', 'x_produk_aksesoris_sparepart','category_ids') def _create_solr_queue_sync_brands(self): self._create_solr_queue('_sync_brands_to_solr') def action_sync_to_solr(self): manufacture_ids = self.env.context.get('active_ids', []) manufactures = self.search([('id', 'in', manufacture_ids)]) manufactures._create_solr_queue('_sync_brands_to_solr') def _sync_brands_to_solr(self): solr_model = self.env['apache.solr'] for brands in self: document = {} document.update({ 'id': brands.id, 'display_name_s': brands.display_name, 'name_s': brands.x_name.lower(), 'sequence_i': brands.sequence or '', 'negara_asal_s': brands.x_negara_asal or '', 'short_desc_s': brands.x_short_desc or '', 'level_s': brands.x_manufacture_level or '', 'image_s': self.env['ir.attachment'].api_image('x_manufactures', 'x_logo_manufacture', brands.id), 'produk_aksesoris_sparepart_s': brands.x_produk_aksesoris_sparepart or '', 'category_ids': [x.id for x in brands.category_ids], 'banner_ids': [x.id for x in brands.x_manufactures_banners], }) self.solr().add([document]) brands.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() def unlink(self): res = super(XManufactures, self).unlink() for rec in self: self.solr().delete(rec.id) self.solr().optimize() self.solr().commit() return res