diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2023-08-22 11:22:52 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2023-08-22 11:22:52 +0700 |
| commit | f6876ff69e37169909a40059d2945e1d84be0db3 (patch) | |
| tree | 7674dcb239efe8350fed2a5a8786b1ed4d89a830 /indoteknik_custom/models/product_template.py | |
| parent | 40b3ae941bce5c822d7297c8ccfc1c752409e21c (diff) | |
auto sync solr
Diffstat (limited to 'indoteknik_custom/models/product_template.py')
| -rwxr-xr-x | indoteknik_custom/models/product_template.py | 148 |
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 |
