diff options
Diffstat (limited to 'indoteknik_custom/models/keywords.py')
| -rw-r--r-- | indoteknik_custom/models/keywords.py | 118 |
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, |
