diff options
| author | Mqdd <ahmadmiqdad27@gmail.com> | 2025-12-09 09:20:20 +0700 |
|---|---|---|
| committer | Mqdd <ahmadmiqdad27@gmail.com> | 2025-12-09 09:20:20 +0700 |
| commit | b92137264988d43477da7d308ecc9ac7e68f36f1 (patch) | |
| tree | ee72c688a2753b3dfebfe817e0a44274b5166068 | |
| parent | f71156bc5e0ce9ceb22215a4345518b02f5250ed (diff) | |
<Miqdad> solr & fix cannot fetch data
| -rw-r--r-- | indoteknik_custom/models/keywords.py | 91 |
1 files changed, 36 insertions, 55 deletions
diff --git a/indoteknik_custom/models/keywords.py b/indoteknik_custom/models/keywords.py index b1f2642d..de7636b7 100644 --- a/indoteknik_custom/models/keywords.py +++ b/indoteknik_custom/models/keywords.py @@ -35,6 +35,16 @@ class Keywords(models.Model): if not record.name: record.name = record.keywords + # @api.constrains('keywords') + # def check_already_exist(self): + # model = self.env['keywords'] + # for record in self: + # match = model.search([ + # ('name', 'ilike', record.name) + # ]) + # if match: + # raise UserError("Tidak bisa create/write/duplicate karena keywords sudah dipakai") + def generate_products(self): for record in self: @@ -43,6 +53,7 @@ class Keywords(models.Model): keyword = "%" + record.keywords.strip() + "%" + # Query dasar sql = """ SELECT pp.id FROM product_product pp @@ -59,11 +70,16 @@ class Keywords(models.Model): params = [keyword, keyword] + # Filter kategori ke child if record.category_id: - sql += " AND rel.product_public_category_id = %s" - params.append(record.category_id.id) - - # Exec query + child_categs = self.env['product.public.category'].search([ + ('id', 'child_of', record.category_id.id) + ]) + sql += " AND rel.product_public_category_id = ANY(%s)" + params.append(child_categs.ids) + + # Exec SQL + self.env.cr.execute(sql, params) rows = self.env.cr.fetchall() product_ids = [r[0] for r in rows] @@ -73,66 +89,31 @@ class Keywords(models.Model): }) _logger.info( - "SQL : Found %s products for keyword '%s'", + "Product Found: Found %s products for keyword '%s'", len(product_ids), record.keywords ) - def sync_solr(self): - solr = self.env['apache.solr'] # pastikan ini model Solr sudah ada + # solr_model = self.env['apache.solr'] documents = [] - - # Sync Keywords + data = {} for keyword in self.search([]): - doc = { - 'id': f'keyword_{keyword.id}', # prefix biar unik di Solr - 'type_s': 'keyword', - 'name_s': keyword.keywords, - 'category_id_i': keyword.category_id.id if keyword.category_id else 0, - 'product_ids_ii': keyword.product_ids.ids, - } - documents.append(doc) - _logger.info('Prepared Solr document for keyword %s', keyword.keywords) - - # Sync Products - products = self.env['product.product'].search([]) - for product in products: - category_ids = [c.id for c in product.public_categ_ids] - doc = { - 'id': f'product_{product.id}', - 'type_s': 'product', - 'name_s': product.name, - 'default_code_s': product.default_code or '', - 'category_ids_ii': category_ids, - 'website_description_t': product.website_description or '', - 'product_rating_f': getattr(product, 'virtual_rating', 0), - 'active_b': product.active, - } - documents.append(doc) - _logger.info('Prepared Solr document for product %s', product.name) - - # Sync Categories - categories = self.env['product.public.category'].search([]) - for cat in categories: - doc = { - 'id': f'category_{cat.id}', - 'type_s': 'category', - 'name_s': cat.name, - 'parent_id_i': cat.parent_id.id if cat.parent_id else 0, - } - documents.append(doc) - _logger.info('Prepared Solr document for category %s', cat.name) - - # Kirim ke Solr - if documents: try: - solr.add(documents, softCommit=True) - _logger.info('Synced %d documents to Solr', len(documents)) + doc = { + 'id': f'keyword_{keyword.id}', + 'type_s': 'keyword', + 'name_s': keyword.keywords, + 'category_id_i': keyword.category_id.id if keyword.category_id else 0, + 'product_ids_ii': keyword.product_ids.ids, + } + documents.append(doc) + data = doc except Exception as e: - _logger.error('Failed to sync documents to Solr: %s', e) - else: - _logger.warning('No documents to sync to Solr') + _logger.error('failed %s', e) + _logger.error('doc data: %s', data) + solr.add(documents) + return True @api.model def create(self, vals): |
