summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMqdd <ahmadmiqdad27@gmail.com>2025-12-09 09:20:20 +0700
committerMqdd <ahmadmiqdad27@gmail.com>2025-12-09 09:20:20 +0700
commitb92137264988d43477da7d308ecc9ac7e68f36f1 (patch)
treeee72c688a2753b3dfebfe817e0a44274b5166068
parentf71156bc5e0ce9ceb22215a4345518b02f5250ed (diff)
<Miqdad> solr & fix cannot fetch data
-rw-r--r--indoteknik_custom/models/keywords.py91
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):