first push message
This commit is contained in:
@@ -0,0 +1 @@
|
||||
from . import models
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,68 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import models, fields, api
|
||||
|
||||
class AddressAddress(models.Model):
|
||||
_name = 'address.address'
|
||||
# loc_code = fields.Char()
|
||||
_rec_name = "location_name"
|
||||
_description = "Address_Add"
|
||||
location_name = fields.Char(string='ឈ្មោះទីតាំង', required=True)
|
||||
parent_location = fields.Many2one('address.address', string='ទីកន្លែងមេ')
|
||||
children_ids = fields.One2many('address.address', 'parent_location', 'Children', copy=True)
|
||||
loc_code = fields.Selection([('1', 'រាជធានី/ខេត្ត'),
|
||||
('2', 'ស្រុក/ខ័ណ្ឌ/ក្រុង'),
|
||||
('3', 'ឃុំ/សង្កាត់'),
|
||||
('4', 'ភូមិ')], string='ជា')
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Helper Methods for Portal
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
@api.model
|
||||
def get_locations_by_level(self, level_code, parent_id=None):
|
||||
"""
|
||||
Get locations filtered by level and optional parent
|
||||
@param level_code: '1', '2', '3', or '4'
|
||||
@param parent_id: ID of parent location (for levels 2-4)
|
||||
@return: recordset of address.address
|
||||
"""
|
||||
domain = [('loc_code', '=', level_code)]
|
||||
if parent_id and level_code != '1':
|
||||
domain.append(('parent_location', '=', parent_id))
|
||||
return self.sudo().search(domain, order='location_name')
|
||||
|
||||
@api.model
|
||||
def get_location_path(self, location_id):
|
||||
"""
|
||||
Get full path string for a location
|
||||
@return: "Province > District > Commune > Village"
|
||||
"""
|
||||
location = self.browse(location_id)
|
||||
if not location.exists():
|
||||
return ''
|
||||
|
||||
path = []
|
||||
current = location
|
||||
while current:
|
||||
path.insert(0, current.location_name)
|
||||
current = current.parent_location
|
||||
|
||||
return ' > '.join(path)
|
||||
|
||||
@api.model
|
||||
def get_cascading_options(self, parent_id=None):
|
||||
"""
|
||||
Get all child options for cascading dropdowns
|
||||
Useful for pre-loading in form context
|
||||
@return: dict of {loc_code: [{id, name}]}
|
||||
"""
|
||||
result = {}
|
||||
for code in ['2', '3', '4']: # District, Commune, Village
|
||||
domain = [('loc_code', '=', code)]
|
||||
if parent_id:
|
||||
# Get children of this parent at any level
|
||||
domain.append(('parent_location', '=', parent_id))
|
||||
items = self.sudo().search(domain, order='location_name')
|
||||
result[code] = [{'id': i.id, 'name': i.location_name} for i in items]
|
||||
return result
|
||||
Reference in New Issue
Block a user