summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/solr/product_template.py
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-11-10 13:40:58 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-11-10 13:40:58 +0700
commit2aee5a44abbe36961dfe23cc3d656aa48e11e0f9 (patch)
tree8ec2b6552aaef4e14539aa52ed796552e24180d6 /indoteknik_custom/models/solr/product_template.py
parent6a87e59e7220bdfa78e98b23003ccc4ef41bd0ce (diff)
parentb4e74170aeaf00937f78e5af9047218ddb17516c (diff)
Merge branch 'production' into change/feature/promotion-program
Diffstat (limited to 'indoteknik_custom/models/solr/product_template.py')
-rw-r--r--indoteknik_custom/models/solr/product_template.py94
1 files changed, 49 insertions, 45 deletions
diff --git a/indoteknik_custom/models/solr/product_template.py b/indoteknik_custom/models/solr/product_template.py
index d7439bcb..648a0625 100644
--- a/indoteknik_custom/models/solr/product_template.py
+++ b/indoteknik_custom/models/solr/product_template.py
@@ -5,6 +5,7 @@ from datetime import datetime
class ProductTemplate(models.Model):
_inherit = "product.template"
+ unpublished = fields.Boolean(string='Unpublished')
last_update_solr = fields.Datetime(string='Last Update Solr')
desc_update_solr = fields.Char(string='Desc Update Solr')
@@ -23,7 +24,7 @@ class ProductTemplate(models.Model):
'function_name': function_name
})
- @api.constrains('name', 'default_code', 'weight', 'x_manufacture', 'public_categ_ids', 'search_rank', 'search_rank_weekly', 'image_1920', 'active')
+ @api.constrains('name', 'default_code', 'weight', 'x_manufacture', 'public_categ_ids', 'search_rank', 'search_rank_weekly', 'image_1920', 'unpublished')
def _create_solr_queue_sync_product_template(self):
self._create_solr_queue('_sync_product_template_to_solr')
@@ -35,6 +36,7 @@ class ProductTemplate(models.Model):
def solr_flag_to_solr(self, limit=500):
template_products = self.search([('solr_flag', '=', 2)], limit=limit)
for product in template_products:
+ product._create_solr_queue('_sync_product_template_to_solr')
product._create_solr_queue('_sync_price_to_solr')
product.solr_flag = 1
@@ -80,7 +82,8 @@ class ProductTemplate(models.Model):
"category_name": category_name,
"description_t": template.website_description or '',
'has_product_info_b': True,
- 'publish_b': template.active and template.type == 'product'
+ 'publish_b': not template.unpublished,
+ "qty_sold_f": template.qty_sold
})
self.solr().add(docs=[document], softCommit=True)
@@ -96,56 +99,52 @@ class ProductTemplate(models.Model):
def _sync_price_to_solr(self):
solr_model = self.env['apache.solr']
+ TIER_NUMBERS = ['1_v2', '2_v2', '3_v2', '4_v2', '5_v2']
for template in self:
- flashsale_data = {}
- price_excl = price_excl_after_disc = discount = tax = 0
- tier_data = {}
+ cheapest_flashsale = {}
for variant in template.product_variant_ids:
variant_flashsale = variant.with_context(price_for="web")._get_flashsale_price()
variant_flashsale_price = variant_flashsale.get('flashsale_price', 0)
- flashsale_data_price = flashsale_data.get('flashsale_price', 0)
-
- if flashsale_data_price == 0 or (variant_flashsale_price != 0 and variant_flashsale_price < flashsale_data_price):
- flashsale_data = variant_flashsale
-
- price_excl = variant._get_website_price_exclude_tax()
- price_excl_after_disc = variant._get_website_price_after_disc_and_tax()
- discount = variant._get_website_disc(0)
- tax = variant._get_website_tax()
-
- price_excl_v2 = variant._v2_get_website_price_exclude_tax()
- price_excl_after_disc_v2 = variant._v2_get_website_price_after_disc_and_tax()
- tax_v2 = variant._v2_get_website_tax()
-
+ cheapest_flashsale_price = cheapest_flashsale.get('flashsale_price', 0)
+
+ if cheapest_flashsale_price == 0 or (variant_flashsale_price != 0 and variant_flashsale_price < cheapest_flashsale_price):
+ cheapest_flashsale = variant_flashsale
+
+ flashsale_doc = {
+ "flashsale_id_i": cheapest_flashsale.get('flashsale_id', 0),
+ "flashsale_tag_s": cheapest_flashsale.get('flashsale_tag', ''),
+ "flashsale_name_s": cheapest_flashsale.get('flashsale_name', ''),
+ "flashsale_start_date_s": cheapest_flashsale.get('flashsale_start_date', ''),
+ "flashsale_end_date_s": cheapest_flashsale.get('flashsale_end_date', ''),
+ "flashsale_base_price_f": cheapest_flashsale.get('flashsale_base_price', 0),
+ "flashsale_discount_f": cheapest_flashsale.get('flashsale_discount', 0),
+ "flashsale_price_f": cheapest_flashsale.get('flashsale_price', 0)
+ }
+
+ price_doc = {}
+
+ # Loop tier to get each variant price
+ for tier_number in TIER_NUMBERS:
+ for variant in template.product_variant_ids:
+ tier = variant._get_pricelist_tier(tier_number)
+ discount_tier_key = f'discount_tier{tier_number}'
+ price_tier_key = f'price_tier{tier_number}'
+
+ variant_discount = tier.get(discount_tier_key, 0)
+ variant_price = tier.get(price_tier_key, 0)
+
+ price_tier = price_doc.get(f"{price_tier_key}_f", 0)
+ # When price tier is 0 or variant_price less than price tier then use variant price
+ if price_tier == 0 or (variant_price < price_tier and variant_price > 0):
+ price_doc[f"{discount_tier_key}_f"] = variant_discount
+ price_doc[f"{price_tier_key}_f"] = variant_price
+
document = solr_model.get_doc('product', template.id)
- document.update({
- "id": template.id,
- "flashsale_id_i": flashsale_data.get('flashsale_id', 0),
- "flashsale_tag_s": flashsale_data.get('flashsale_tag', ''),
- "flashsale_name_s": flashsale_data.get('flashsale_name', ''),
- "flashsale_start_date_s": flashsale_data.get('flashsale_start_date', ''),
- "flashsale_end_date_s": flashsale_data.get('flashsale_end_date', ''),
- "flashsale_base_price_f": flashsale_data.get('flashsale_base_price', 0),
- "flashsale_discount_f": flashsale_data.get('flashsale_discount', 0),
- "flashsale_price_f": flashsale_data.get('flashsale_price', 0),
- "price_f": price_excl,
- "discount_f": discount,
- "price_discount_f": price_excl_after_disc,
- "tax_f": tax,
- "price_v2_f": price_excl_v2,
- "price_discount_v2_f": price_excl_after_disc_v2,
- "tax_v2_f": tax_v2,
- })
-
- for tier_number in [1, 2, 3, '1_v2', '2_v2', '3_v2', '4_v2', '5_v2']:
- tier = variant._get_pricelist_tier(tier_number)
- document.update({
- f"discount_tier{tier_number}_f": tier.get(f'discount_tier{tier_number}', 0),
- f"price_tier{tier_number}_f": tier.get(f'price_tier{tier_number}', 0),
- })
-
+ document['id'] = template.id
+ document.update(flashsale_doc)
+ document.update(price_doc)
document.update({"has_price_info_b": True})
self.solr().add(docs=[document], softCommit=True)
@@ -220,3 +219,8 @@ class ProductTemplate(models.Model):
results.append(result)
return results
+
+ @api.constrains('active')
+ def constrains_active(self):
+ for rec in self:
+ rec._create_solr_queue_sync_product_template() \ No newline at end of file