diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-10-10 09:27:49 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-10-10 09:27:49 +0700 |
| commit | 35e308b24e8a9ae6c158d65c68d4a30e0be40cba (patch) | |
| tree | 1378348155be8b170f238029ce64823a416ad267 /indoteknik_custom/models/solr/promotion_program.py | |
| parent | 070656b5a8c7a304810af193bc79ff324503db01 (diff) | |
Add sync to solr on model
- promotion program
- promotion program line
Diffstat (limited to 'indoteknik_custom/models/solr/promotion_program.py')
| -rw-r--r-- | indoteknik_custom/models/solr/promotion_program.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/indoteknik_custom/models/solr/promotion_program.py b/indoteknik_custom/models/solr/promotion_program.py new file mode 100644 index 00000000..c288c165 --- /dev/null +++ b/indoteknik_custom/models/solr/promotion_program.py @@ -0,0 +1,61 @@ +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) |
