summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-09-05 17:49:30 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-09-05 17:49:30 +0700
commit1b55d65464b9789164ba45bdef03c56428e026f2 (patch)
tree23ddc69b19e7fd1b84bac952701f1cd449fa68a8
parent4252e1b1b58499443a29c4a9fcf7d8ea8c2d2d31 (diff)
<iman> update category management
-rw-r--r--indoteknik_api/controllers/api_v1/category_management.py46
-rw-r--r--indoteknik_custom/models/solr/website_categories_management.py54
-rw-r--r--indoteknik_custom/views/website_categories_management.xml2
3 files changed, 57 insertions, 45 deletions
diff --git a/indoteknik_api/controllers/api_v1/category_management.py b/indoteknik_api/controllers/api_v1/category_management.py
index 836f4493..8015bffc 100644
--- a/indoteknik_api/controllers/api_v1/category_management.py
+++ b/indoteknik_api/controllers/api_v1/category_management.py
@@ -2,11 +2,12 @@ from odoo import http
from odoo.http import request
from .. import controller
+
class CategoryManagement(controller.Controller):
prefix = '/api/v1/'
@http.route(prefix + 'categories_management', auth='public', methods=['GET', 'OPTIONS'], csrf=False)
- @controller.Controller.must_authorized()
+ # @controller.Controller.must_authorized()
def get_categories_management(self, **kw):
base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
@@ -14,33 +15,42 @@ class CategoryManagement(controller.Controller):
categories = request.env['website.categories.management'].search(query, order='sequence')
data = []
+
for category in categories:
category_id2_data = []
- for x in category.category_id2:
- child_data = [
- {'id_level_3': child.id,
- 'name': child.name,
- 'numFound': len(child.product_tmpl_ids.ids),
- 'image': request.env['ir.attachment'].api_image('product.public.category', 'image_1920', child.id)}
- for child in x.child_frontend_id2
+
+ # Loop through each line to get Category Level 2 and Level 3
+ for line in category.line_ids:
+ category_id3_data = [
+ {
+ 'id_level_3': child.id,
+ 'name': child.name,
+ 'numFound': len(child.product_tmpl_ids.ids),
+ 'image': request.env['ir.attachment'].api_image('product.public.category', 'image_1920',
+ child.id)
+ }
+ for child in line.category_id3_ids # Loop through Many2many Category Level 3
]
+
category_id2_data.append({
- 'id_level_2': x.id,
- 'name': x.name,
- 'numFound': len(x.product_tmpl_ids.ids),
- 'image': request.env['ir.attachment'].api_image('product.public.category', 'image_1920', x.id),
- 'child_frontend_id_i': child_data
+ 'id_level_2': line.category_id2.id,
+ 'name': line.category_id2.name,
+ 'numFound': len(line.category_id2.product_tmpl_ids.ids),
+ 'image': request.env['ir.attachment'].api_image('product.public.category', 'image_1920',
+ line.category_id2.id),
+ 'child_frontend_id_i': category_id3_data # Add Category Level 3 data
})
+ # Add data for Category Level 1 along with its lines (Category Level 2)
data.append({
'id': category.id,
'sequence': category.sequence,
'category_id_i': category.category_id.id,
'name': category.category_id.name,
- 'numFound': len(category.category_id.product_tmpl_ids.ids) ,
- 'image': request.env['ir.attachment'].api_image('product.public.category', 'image_1920', category.category_id.id),
- 'categories': category_id2_data,
+ 'numFound': len(category.category_id.product_tmpl_ids.ids),
+ 'image': request.env['ir.attachment'].api_image('product.public.category', 'image_1920',
+ category.category_id.id),
+ 'categories': category_id2_data, # Category Level 2 with Level 3 nested inside
})
- return self.response(data, headers=[('Cache-Control', 'max-age=3600, public')])
-
+ return self.response(data, headers=[('Cache-Control', 'max-age=3600, public')])
diff --git a/indoteknik_custom/models/solr/website_categories_management.py b/indoteknik_custom/models/solr/website_categories_management.py
index c3851f4b..fe85f8e7 100644
--- a/indoteknik_custom/models/solr/website_categories_management.py
+++ b/indoteknik_custom/models/solr/website_categories_management.py
@@ -2,19 +2,21 @@ from odoo import models, fields, api
from datetime import datetime
import json
-
class WebsiteCategoriesHomepage(models.Model):
_inherit = 'website.categories.management'
last_update_solr = fields.Datetime('Last Update Solr')
def solr(self):
+ """Returns the Solr connection object."""
return self.env['apache.solr'].connect('category_management')
def update_last_update_solr(self):
+ """Updates the last sync time for the record."""
self.last_update_solr = datetime.utcnow()
def _create_solr_queue(self, function_name):
+ """Creates unique Solr queue for each record."""
for rec in self:
self.env['apache.solr.queue'].create_unique({
'res_model': self._name,
@@ -24,26 +26,30 @@ class WebsiteCategoriesHomepage(models.Model):
@api.constrains('status')
def _create_solr_queue_sync_status(self):
+ """Triggers Solr sync when the status changes."""
self._create_solr_queue('_sync_status_category_homepage_solr')
@api.constrains('category_id', 'category_id2', 'sequence')
def _create_solr_queue_sync_category_homepage(self):
+ """Triggers Solr sync when categories or sequence change."""
self._create_solr_queue('_sync_category_management_to_solr')
def action_sync_to_solr(self):
+ """Manual action to sync selected categories to Solr."""
category_ids = self.env.context.get('active_ids', [])
categories = self.search([('id', 'in', category_ids)])
categories._create_solr_queue('_sync_category_management_to_solr')
def unlink(self):
- res = super(WebsiteCategoriesHomepage, self).unlink()
+ """Overrides unlink method to remove records from Solr."""
for rec in self:
self.solr().delete(rec.id)
self.solr().optimize()
self.solr().commit()
- return res
+ return super(WebsiteCategoriesHomepage, self).unlink()
def _sync_status_category_homepage_solr(self):
+ """Syncs status to Solr or deletes if not active."""
for rec in self:
if rec.status == 'tayang':
rec._sync_category_management_to_solr()
@@ -51,13 +57,14 @@ class WebsiteCategoriesHomepage(models.Model):
rec.unlink()
def _sync_category_management_to_solr(self):
+ """Syncs categories (Level 1, 2, and 3) to Solr."""
solr_model = self.env['apache.solr']
for category in self:
if category.status != 'tayang':
continue
- # Level 1 Document
+ # Prepare Level 1 document
document = solr_model.get_doc('category_management', category.id)
document.update({
'id': category.id,
@@ -65,44 +72,39 @@ class WebsiteCategoriesHomepage(models.Model):
'name_s': category.category_id.name,
'image_s': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category.category_id.id),
'sequence_i': category.sequence or '',
- 'numFound_i': len(category.category_id.product_tmpl_ids.ids),
+ 'numFound_i': len(category.category_id.product_tmpl_ids),
})
- # Level 2 and Level 3 Documents
+ # Prepare Level 2 documents
level_2_docs = []
- for x in category.category_id2:
+ for category_level_2 in category.line_ids.mapped('category_id2'):
level_2_doc = {
- 'id_level_2': x.id,
- 'name_level_2': x.name,
- 'numFound_level_2': len(x.product_tmpl_ids.ids),
- 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', x.id),
+ 'id_level_2': category_level_2.id,
+ 'name_level_2': category_level_2.name,
+ 'numFound_level_2': len(category_level_2.product_tmpl_ids),
+ 'image_level_2': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_2.id),
'categories_level_3': []
}
- # Level 3 Data
- for child in x.child_frontend_id2:
+ # Prepare Level 3 documents
+ for category_level_3 in category_level_2.child_frontend_id2:
level_3_doc = {
- 'id_level_3': child.id,
- 'name_level_3': child.name,
- 'numFound_level_3': len(child.product_tmpl_ids.ids),
- 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', child.id),
+ 'id_level_3': category_level_3.id,
+ 'name_level_3': category_level_3.name,
+ 'numFound_level_3': len(category_level_3.product_tmpl_ids),
+ 'image_level_3': self.env['ir.attachment'].api_image('product.public.category', 'image_1920', category_level_3.id),
}
level_2_doc['categories_level_3'].append(level_3_doc)
level_2_docs.append(level_2_doc)
- # Add level 2 documents to level 1 document
+ # Add Level 2 documents to Level 1 document
document['categories_level_2'] = level_2_docs
- # Add document to Solr
+ # Sync document with Solr
self.solr().add([document])
category.update_last_update_solr()
+ # Commit and optimize Solr changes
self.solr().commit()
-
-
- # def _sync_delete_solr(self):
- # for rec in self:
- # self.solr().delete(rec.id)
- # self.solr().optimize()
- # self.solr().commit() \ No newline at end of file
+ self.solr().optimize()
diff --git a/indoteknik_custom/views/website_categories_management.xml b/indoteknik_custom/views/website_categories_management.xml
index 8f6ecc61..6ad85944 100644
--- a/indoteknik_custom/views/website_categories_management.xml
+++ b/indoteknik_custom/views/website_categories_management.xml
@@ -38,7 +38,7 @@
<tree editable="bottom">
<field name="category_id2" domain="[('parent_frontend_id', '=', parent.category_id)]"/> <!-- Category Level 2 -->
<field name="category_id3_ids" widget="many2many_tags"/> <!-- Category Level 3 -->
- <field name="sequence"/>
+ <field name="sequence" widget="handle" />
</tree>
</field>
</page>