summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/keywords.py118
1 files changed, 27 insertions, 91 deletions
diff --git a/indoteknik_custom/models/keywords.py b/indoteknik_custom/models/keywords.py
index b5c7ae8c..f4774bbd 100644
--- a/indoteknik_custom/models/keywords.py
+++ b/indoteknik_custom/models/keywords.py
@@ -41,25 +41,16 @@ class Keywords(models.Model):
for record in self:
record.sum = len(record.product_ids)
-
- @api.depends('keywords', 'brand_id')
+ @api.depends('keywords')
def _compute_url(self):
prefix = "https://indoteknik.com/searchkey/"
for record in self:
- if not record.keywords:
- record.url = False
- continue
- slug = re.sub(r'[^a-zA-Z0-9]+', '-', record.keywords.strip().lower()).strip('-')
-
- if record.brand_id:
- brand_slug = re.sub(
- r'[^a-zA-Z0-9]+',
- '-',
- record.brand_id.x_name.strip().lower()
- ).strip('-')
- record.url = f"{prefix}{slug}-{brand_slug}"
+ if record.keywords:
+ slug = re.sub(r'[^a-zA-Z0-9]+', '-', record.keywords.strip().lower())
+ slug = slug.strip('-')
+ record.url = prefix + slug
else:
- record.url = f"{prefix}{slug}"
+ record.url = False
def _compute_name(self):
for record in self:
@@ -68,14 +59,13 @@ class Keywords(models.Model):
@api.constrains('keywords', 'category_id')
def check_already_exist(self):
+ model = self.env['keywords']
for record in self:
- if not (record.keywords and record.category_id):
- continue
- match = self.search([
- ('id', '!=', record.id),
+ match = model.search([
('keywords', '=', record.keywords),
- ('category_id', '=', record.category_id.id)
- ], limit = 1)
+ ('category_id.id', '=', record.category_id.id),
+ ('id', '!=', record.id)
+ ])
if match:
raise UserError("Tidak bisa create karena keywords sudah dipakai")
@@ -87,23 +77,14 @@ class Keywords(models.Model):
for record in self:
record.product_ids = [(5, 0, 0)]
-
def generate_products(self):
for record in self:
- if record.skip:
+ if not record.keywords or record.skip:
continue
- if not record.keywords:
- raise UserError("Keyword wajib diisi")
-
- if not record.category_id:
- raise UserError(
- f"Category wajib diisi untuk keyword '{record.keywords}'"
- )
-
- keyword_raw = record.keywords.strip()
- keyword = f"%{keyword_raw}%"
+ keyword = f"%{record.keywords.strip()}%"
+ # AND (pt.unpublished IS FALSE OR pt.unpublished IS NULL)
sql = """
SELECT DISTINCT pp.id
FROM product_product pp
@@ -119,66 +100,26 @@ class Keywords(models.Model):
)
"""
- params = [keyword, keyword]
-
- # ======================
- # CATEGORY (WAJIB)
- # ======================
- 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)
-
- # ======================
- # BRAND (OPTIONAL)
- # ======================
- if record.brand_id:
- brand = record.brand_id.x_name
+ params = [
+ keyword,
+ keyword,
+ ]
- brand_kw_1 = f"%{brand} {keyword_raw}%"
- brand_kw_2 = f"%{keyword_raw} {brand}%"
- keyword = f"%{keyword_raw}%"
- sql += "AND pt.x_manufacture = %s"
-
- sql += """
- AND (
- pt.name ILIKE %s
- OR pt.name ILIKE %s
- OR pt.website_description ILIKE %s
- OR pt.website_description ILIKE %s
- )
- OR (
- pt.x_manufacture = %s
- AND (pt.name ilike %s
- OR pt.website_description ilike %s)
- )
- """
-
- params.extend([
- record.brand_id.id,
- brand_kw_1,
- brand_kw_2,
- brand_kw_1,
- brand_kw_2,
- record.brand_id.id,
- keyword,
- keyword
+ if record.category_id:
+ 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)
- # ======================
- # EXECUTE
- # ======================
self.env.cr.execute(sql, params)
- rows = self.env.cr.fetchall()
+ rows = self.env.cr.fetchall()
product_ids = [r[0] for r in rows]
if not product_ids:
raise UserError(
- f"Tidak menemukan product untuk keyword "
- f"'{record.keywords}' di category '{record.category_id.name}'"
+ f"Tidak berhasil menemukan barang untuk keyword '{record.keywords}'"
)
record.with_context(skip_generate=True).write({
@@ -186,10 +127,9 @@ class Keywords(models.Model):
})
_logger.info(
- "Product Found: %s products | keyword='%s' | category='%s'",
+ "Product Found: Found %s products for keyword '%s'",
len(product_ids),
- record.keywords,
- record.category_id.name
+ record.keywords
)
def sync_solr(self):
@@ -197,16 +137,12 @@ class Keywords(models.Model):
if not active_ids:
_logger.warning("No active_ids found, nothing to sync")
return True
- elif active_ids and self.sum < 1:
- raise UserError("Tidak ada product untuk keyword ini, sync ke solr dibatalkan")
keywords = self.browse(active_ids)
documents = []
for keyword in keywords:
searchkey = (keyword.keywords or '').strip().lower().replace(' ', '-')
- if keyword.brand_id:
- searchkey = f"{searchkey}-{keyword.brand_id.x_name.strip().lower().replace(' ', '-')}"
try:
doc = {
'id': keyword.id,