summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/product_template.py
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2023-08-22 11:22:52 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2023-08-22 11:22:52 +0700
commitf6876ff69e37169909a40059d2945e1d84be0db3 (patch)
tree7674dcb239efe8350fed2a5a8786b1ed4d89a830 /indoteknik_custom/models/product_template.py
parent40b3ae941bce5c822d7297c8ccfc1c752409e21c (diff)
auto sync solr
Diffstat (limited to 'indoteknik_custom/models/product_template.py')
-rwxr-xr-xindoteknik_custom/models/product_template.py148
1 files changed, 144 insertions, 4 deletions
diff --git a/indoteknik_custom/models/product_template.py b/indoteknik_custom/models/product_template.py
index bc54b703..128297f1 100755
--- a/indoteknik_custom/models/product_template.py
+++ b/indoteknik_custom/models/product_template.py
@@ -1,5 +1,5 @@
from odoo import fields, models, api
-from datetime import datetime, timedelta
+from datetime import datetime, timedelta, timezone
from odoo.exceptions import AccessError, UserError, ValidationError
import logging
import requests
@@ -50,7 +50,14 @@ class ProductTemplate(models.Model):
is_new_product = fields.Boolean(string='Produk Baru',
help='Centang jika ingin ditammpilkan di website sebagai segment Produk Baru')
seq_new_product = fields.Integer(string='Seq New Product', help='Urutan Sequence New Product')
-
+ last_update_solr = fields.Datetime(string='Last Update Solr')
+ desc_update_solr = fields.Char(string='Desc Update Solr')
+
+ def change_solr_data(self, desc):
+ current_time = datetime.utcnow()
+ self.desc_update_solr = desc
+ self.last_update_solr = current_time
+
# def write(self, vals):
# if 'solr_flag' not in vals and self.solr_flag == 1:
# vals['solr_flag'] = 2
@@ -256,7 +263,66 @@ class ProductTemplate(models.Model):
self.env['token.storage'].create([values])
return values
-
+ @api.constrains(
+ 'name',
+ 'default_code',
+ 'virtual_rating',
+ 'product_variant_count',
+ 'weight',
+ 'x_manufacture',
+ 'public_categ_ids',
+ 'product_variant_ids.display_name',
+ 'product_variant_ids.default_code',
+ 'search_rank',
+ 'search_rank_weekly',
+ 'image_1920'
+ )
+ def _sync_product_template_to_solr(self, limit=500):
+ template = self
+ if not template.active or template.type != 'product':
+ return
+
+ variants_name = variants_code = ''
+ if template.product_variant_count > 1:
+ for variant in template.product_variant_ids:
+ variants_name += variant.display_name or ''+', '
+ variants_code += variant.default_code or ''+', '
+
+ category_id = ''
+ category_name = ''
+ for category in template.public_categ_ids:
+ category_id = category.id
+ category_name = category.name
+ solr_model = self.env['apache.solr']
+ solr = solr_model.connect('local_template')
+ document = solr_model.get_single_doc(solr, template.id)
+ document.update({
+ 'id': template.id,
+ 'display_name_s': template.display_name,
+ 'name_s': template.name,
+ 'default_code_s': template.default_code or '',
+ 'product_rating_f': template.virtual_rating,
+ 'product_id_i': template.id,
+ 'image_s': self.env['ir.attachment'].api_image('product.template', 'image_512', template.id),
+ 'variant_total_i': template.product_variant_count,
+ 'stock_total_f': template.qty_stock_vendor,
+ 'weight_f': template.weight,
+ 'manufacture_id_i': template.x_manufacture.id or 0,
+ 'manufacture_name_s': template.x_manufacture.x_name or '',
+ 'manufacture_name': template.x_manufacture.x_name or '',
+ 'image_promotion_1_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_1', template.x_manufacture.id),
+ 'image_promotion_2_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_2', template.x_manufacture.id),
+ 'variants_name_t': variants_name,
+ 'variants_code_t': variants_code,
+ 'search_rank_i': template.search_rank,
+ 'search_rank_weekly_i': template.search_rank_weekly,
+ 'category_id_i': category_id or 0,
+ 'category_name_s': category_name or '',
+ 'category_name': category_name or '',
+ })
+ solr.add([document])
+ self.change_solr_data('Perubahan pada data product')
+
class ProductProduct(models.Model):
_inherit = "product.product"
web_price = fields.Float(
@@ -278,6 +344,13 @@ class ProductProduct(models.Model):
qty_onhand_bandengan = fields.Float(string='Qty Incoming Bandengan', compute='_get_qty_onhand_bandengan')
qty_incoming_bandengan = fields.Float(string='Qty Incoming Bandengan', compute='_get_qty_incoming_bandengan')
sla_version = fields.Integer(string="SLA Version", default=0)
+ last_update_solr = fields.Datetime(string='Last Update Solr')
+ desc_update_solr = fields.Char(string='Desc Update Solr')
+
+ def change_solr_data(self, desc):
+ current_time = datetime.now()
+ self.desc_update_solr = desc
+ self.last_update_solr = current_time
def _get_qty_incoming_bandengan(self):
for product in self:
@@ -329,4 +402,71 @@ class ProductProduct(models.Model):
('start_date', '<=', current_time),
('end_date', '>=', current_time)
], limit=1)
- return pricelist \ No newline at end of file
+ return pricelist
+
+ @api.constrains(
+ 'name',
+ 'default_code',
+ 'virtual_rating',
+ 'weight',
+ 'x_manufacture',
+ 'public_categ_ids',
+ 'product_tmpl_id.default_code',
+ 'product_tmpl_id.image_1920',
+ 'search_rank',
+ 'search_rank_weekly',
+ 'image_1920'
+ )
+ def _sync_variants_to_solr(self):
+ variant = self
+ if not variant.product_tmpl_id.active and variant.product_tmpl_id.type != 'product':
+ return
+
+ price_excl_after_disc = price_excl = discount = tax = 0
+ 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()
+ flashsale_data = variant._get_flashsale_price()
+
+ category_id = ''
+ category_name = ''
+ for category in variant.product_tmpl_id.public_categ_ids:
+ category_id = category.id
+ category_name = category.name
+ solr_model = self.env['apache.solr']
+ solr = solr_model.connect('local_variant')
+ document = solr_model.get_single_doc(solr, variant.id)
+ document.update({
+ 'id': variant.id,
+ 'display_name_s': variant.display_name,
+ 'name_s': variant.name,
+ 'default_code_s': variant.default_code or '',
+ 'product_rating_f': variant.product_tmpl_id.virtual_rating,
+ 'product_id_i': variant.id,
+ 'template_id_i': variant.product_tmpl_id.id,
+ 'image_s': self.env['ir.attachment'].api_image('product.template', 'image_512', variant.product_tmpl_id.id),
+ 'price_f': price_excl,
+ 'discount_f': discount,
+ 'price_discount_f': price_excl_after_disc,
+ 'tax_f': tax,
+ 'stock_total_f': variant.qty_stock_vendor,
+ 'weight_f': variant.product_tmpl_id.weight,
+ 'manufacture_id_i': variant.product_tmpl_id.x_manufacture.id or 0,
+ 'manufacture_name_s': variant.product_tmpl_id.x_manufacture.x_name or '',
+ 'manufacture_name': variant.product_tmpl_id.x_manufacture.x_name or '',
+ 'image_promotion_1_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_1', variant.product_tmpl_id.x_manufacture.id),
+ 'image_promotion_2_s': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_2', variant.product_tmpl_id.x_manufacture.id),
+ 'category_id_i': category_id or 0,
+ 'category_name_s': category_name or '',
+ 'category_name': category_name or '',
+ 'search_rank_i': variant.product_tmpl_id.search_rank,
+ 'search_rank_weekly_i': variant.product_tmpl_id.search_rank_weekly,
+ 'flashsale_id_i': flashsale_data['flashsale_id'] or 0,
+ 'flashsale_name_s': flashsale_data['flashsale_name'] or '',
+ 'flashsale_base_price_f': flashsale_data['flashsale_base_price'] or 0,
+ 'flashsale_discount_f': flashsale_data['flashsale_discount'] or 0,
+ 'flashsale_price_f': flashsale_data['flashsale_price'] or 0,
+ })
+ solr.add([document])
+ self.change_solr_data('Perubahan pada data product') \ No newline at end of file