summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/solr
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/solr')
-rw-r--r--indoteknik_custom/models/solr/__init__.py4
-rw-r--r--indoteknik_custom/models/solr/product_product.py19
-rw-r--r--indoteknik_custom/models/solr/product_template.py5
-rw-r--r--indoteknik_custom/models/solr/promotion_program.py68
-rw-r--r--indoteknik_custom/models/solr/promotion_program_line.py69
5 files changed, 156 insertions, 9 deletions
diff --git a/indoteknik_custom/models/solr/__init__.py b/indoteknik_custom/models/solr/__init__.py
index f2d13116..606c0035 100644
--- a/indoteknik_custom/models/solr/__init__.py
+++ b/indoteknik_custom/models/solr/__init__.py
@@ -8,4 +8,6 @@ from . import website_categories_homepage
from . import x_manufactures
from . import x_banner_banner
from . import product_public_category
-from . import x_banner_category \ No newline at end of file
+from . import x_banner_category
+from . import promotion_program
+from . import promotion_program_line \ No newline at end of file
diff --git a/indoteknik_custom/models/solr/product_product.py b/indoteknik_custom/models/solr/product_product.py
index fe2a08dc..ac41dbff 100644
--- a/indoteknik_custom/models/solr/product_product.py
+++ b/indoteknik_custom/models/solr/product_product.py
@@ -1,6 +1,7 @@
-from odoo import models, fields, api
from datetime import datetime
+from odoo import api, fields, models
+
class ProductProduct(models.Model):
_inherit = 'product.product'
@@ -37,17 +38,23 @@ class ProductProduct(models.Model):
def _sync_variants_to_solr(self):
solr_model = self.env['apache.solr']
+ ir_attachment = self.env['ir.attachment']
for variant in self:
-
category_id = 0
category_name = ''
for category in variant.product_tmpl_id.public_categ_ids:
category_id = category.id
category_name = category.name
- break
document = solr_model.get_doc('variants', variant.id)
+
+ image = ''
+ if variant.image_256:
+ image = ir_attachment.api_image('product.product', 'image_256', variant.id)
+ else:
+ image = ir_attachment.api_image('product.template', 'image_256', variant.product_tmpl_id.id)
+
document.update({
'id': variant.id,
'display_name_s': variant.display_name,
@@ -56,14 +63,14 @@ class ProductProduct(models.Model):
'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),
+ "image_s": image,
'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),
+ 'image_promotion_1_s': ir_attachment.api_image('x_manufactures', 'image_promotion_1', variant.product_tmpl_id.x_manufacture.id),
+ 'image_promotion_2_s': ir_attachment.api_image('x_manufactures', 'image_promotion_2', variant.product_tmpl_id.x_manufacture.id),
'category_id_i': category_id,
'category_name_s': category_name,
'category_name': category_name,
diff --git a/indoteknik_custom/models/solr/product_template.py b/indoteknik_custom/models/solr/product_template.py
index bba98edc..062f1455 100644
--- a/indoteknik_custom/models/solr/product_template.py
+++ b/indoteknik_custom/models/solr/product_template.py
@@ -1,6 +1,7 @@
-from odoo import models, fields, api
from datetime import datetime
+from odoo import api, fields, models
+
class ProductTemplate(models.Model):
_inherit = "product.template"
@@ -70,7 +71,7 @@ class ProductTemplate(models.Model):
"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),
+ "image_s": self.env['ir.attachment'].api_image('product.template', 'image_256', template.id),
"variant_total_i": template.product_variant_count,
"stock_total_f": template.qty_stock_vendor,
"weight_f": template.weight,
diff --git a/indoteknik_custom/models/solr/promotion_program.py b/indoteknik_custom/models/solr/promotion_program.py
new file mode 100644
index 00000000..0d417b3e
--- /dev/null
+++ b/indoteknik_custom/models/solr/promotion_program.py
@@ -0,0 +1,68 @@
+from odoo import models, api
+from datetime import datetime
+from pytz import timezone
+from typing import Type
+import pysolr
+
+
+class PromotionProgram(models.Model):
+ _inherit = 'promotion.program'
+ _solr_schema = 'promotion_programs'
+
+ def solr(self) -> Type[pysolr.Solr]:
+ return self.env['apache.solr'].connect(self._solr_schema)
+
+ def _create_solr_queue(self, function_name: str):
+ for rec in self:
+ self.env['apache.solr.queue'].create_unique({
+ 'res_model': self._name,
+ 'res_id': rec.id,
+ 'function_name': function_name
+ })
+
+ def _sync_to_solr(self):
+ ir_attachment = self.env['ir.attachment']
+ solr_model = self.env['apache.solr']
+
+ for rec in self:
+ document = solr_model.get_doc(self._solr_schema, rec.id)
+ document.update({
+ 'id': rec.id,
+ 'name_s': rec.name,
+ 'banner_s': ir_attachment.api_image(self._name, 'banner', rec.id) if rec.banner else '',
+ 'keywords': [x.name for x in rec.keyword_ids],
+ 'line_ids': [x.id for x in rec.program_line],
+ 'start_time_s': self._time_format(rec.start_time),
+ 'end_time_s': self._time_format(rec.end_time),
+ 'applies_to_s': rec.applies_to,
+ 'icon_s': ir_attachment.api_image(self._name, 'icon', rec.id) if rec.icon else '',
+ 'icon_top_s': ir_attachment.api_image(self._name, 'icon_top', rec.id) if rec.icon_top else '',
+ 'icon_bottom_s': ir_attachment.api_image(self._name, 'icon_bottom', rec.id) if rec.icon_bottom else '',
+ })
+
+ self.solr().add([document])
+
+ self.solr().commit()
+
+ def _time_format(self, object) -> str:
+ time = ''
+ tz_jakarta = timezone('Asia/Jakarta')
+ if isinstance(object, datetime):
+ time = object.astimezone(tz_jakarta).strftime("%Y-%m-%d %H:%M:%S")
+ return time
+
+ @api.model
+ def create(self, vals):
+ self._create_solr_queue('_sync_to_solr')
+ return super(PromotionProgram, self).create(vals)
+
+ def write(self, vals):
+ self._create_solr_queue('_sync_to_solr')
+ return super(PromotionProgram, self).write(vals)
+
+ @api.constrains('program_line')
+ def constrains_program_line(self):
+ for rec in self:
+ for line in rec.program_line:
+ line._create_solr_queue('_sync_to_solr')
+
diff --git a/indoteknik_custom/models/solr/promotion_program_line.py b/indoteknik_custom/models/solr/promotion_program_line.py
new file mode 100644
index 00000000..6e182324
--- /dev/null
+++ b/indoteknik_custom/models/solr/promotion_program_line.py
@@ -0,0 +1,69 @@
+from odoo import models, api
+from typing import Type
+import pysolr
+import json
+
+
+class PromotionProgramLine(models.Model):
+ _inherit = 'promotion.program.line'
+ _solr_schema = 'promotion_program_lines'
+
+ def solr(self) -> Type[pysolr.Solr]:
+ return self.env['apache.solr'].connect(self._solr_schema)
+
+ def _create_solr_queue(self, function_name: str):
+ for rec in self:
+ self.env['apache.solr.queue'].create_unique({
+ 'res_model': self._name,
+ 'res_id': rec.id,
+ 'function_name': function_name
+ })
+
+ def _sync_to_solr(self):
+ solr_model = self.env['apache.solr']
+
+ for rec in self:
+ document = solr_model.get_doc(self._solr_schema, rec.id)
+
+ products = [{
+ 'product_id': x.product_id.id,
+ 'qty': x.qty
+ } for x in rec.product_ids]
+
+ free_products = [{
+ 'product_id': x.product_id.id,
+ 'qty': x.qty
+ } for x in rec.free_product_ids]
+
+ promotion_type = rec._res_promotion_type()
+
+ document.update({
+ 'id': rec.id,
+ 'program_id_i': rec.program_id.id,
+ 'name_s': rec.name,
+ 'image_s': self.env['ir.attachment'].api_image(self._name, 'image', rec.id) if rec.image else '',
+ 'type_value_s': promotion_type['value'],
+ 'type_label_s': promotion_type['label'],
+ 'package_limit_i': rec.package_limit,
+ 'package_limit_user_i': rec.package_limit_user,
+ 'package_limit_trx_i': rec.package_limit_trx,
+ 'price_f': rec.price,
+ 'product_ids': [x.product_id.id for x in rec.product_ids],
+ 'products_s': json.dumps(products),
+ 'free_product_ids': [x.product_id.id for x in rec.free_product_ids],
+ 'free_products_s': json.dumps(free_products),
+ 'total_qty_i': sum([x.qty for x in rec.product_ids] + [x.qty for x in rec.free_product_ids]),
+ })
+
+ self.solr().add([document])
+
+ self.solr().commit()
+
+ @api.model
+ def create(self, vals):
+ self._create_solr_queue('_sync_to_solr')
+ return super(PromotionProgramLine, self).create(vals)
+
+ def write(self, vals):
+ self._create_solr_queue('_sync_to_solr')
+ return super(PromotionProgramLine, self).write(vals)