summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-06-16 08:48:39 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-06-16 08:48:39 +0700
commit2ff882e9f591a25b6b9f5adbd4dd90e7402017a9 (patch)
treea89978195b775656ed886136c46993499c2d49ba
parentdf02e9c6f0db21b43ae25d77c7072a5dd15f9848 (diff)
(andri) comment map view
-rw-r--r--indoteknik_custom/models/res_partner.py254
-rwxr-xr-xindoteknik_custom/models/sale_order.py1
-rw-r--r--indoteknik_custom/views/res_partner.xml4
3 files changed, 130 insertions, 129 deletions
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py
index a8ce95d1..1786efa3 100644
--- a/indoteknik_custom/models/res_partner.py
+++ b/indoteknik_custom/models/res_partner.py
@@ -148,7 +148,7 @@ class ResPartner(models.Model):
date_payment_terms_purchase = fields.Datetime(string='Date Update Payment Terms')
longtitude = fields.Char(string='Longtitude')
latitude = fields.Char(string='Latitude')
- map_view = fields.Char(string='Map')
+ # map_view = fields.Char(string='Map')
address_map = fields.Char(string='Address Map', help='Alamat ini diisi otomatis berdasarkan koordinat pin pada peta. Silakan koreksi dan ubah jika terdapat ketidaksesuaian', tracking=3)
company_type = fields.Selection(string='Company Type',
selection=[('person', 'Individual'), ('company', 'Company')],
@@ -549,130 +549,130 @@ class ResPartner(models.Model):
'target': 'current',
}
- def geocode_address(self):
- for rec in self:
- # Daftar field penting
- required_fields = {
- 'Alamat Jalan (street)': rec.street,
- 'Kelurahan': rec.kelurahan_id.name if rec.kelurahan_id else '',
- 'Kecamatan': rec.kecamatan_id.name if rec.kecamatan_id else '',
- 'Kota': rec.kota_id.name if rec.kota_id else '',
- 'Kode Pos': rec.zip,
- 'Provinsi': rec.state_id.name if rec.state_id else '',
- }
-
- # Cek jika ada yang kosong
- missing = [label for label, val in required_fields.items() if not val]
- if missing:
- raise UserError(
- "Alamat tidak lengkap. Mohon lengkapi field berikut:\n- " + "\n- ".join(missing)
- )
-
- # Susun alamat lengkap
- address = ', '.join([
- required_fields['Alamat Jalan (street)'],
- required_fields['Kelurahan'],
- required_fields['Kecamatan'],
- required_fields['Kota'],
- required_fields['Kode Pos'],
- required_fields['Provinsi'],
- ])
-
- # Ambil API Key
- api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
- if not api_key:
- raise UserError("API Key Google Maps belum dikonfigurasi. Silakan isi melalui Settings.")
-
- # Request ke Google Maps
- url = f'https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={api_key}'
- response = requests.get(url)
-
- if response.ok:
- result = response.json()
- if result.get('results'):
- location = result['results'][0]['geometry']['location']
- formatted_address = result['results'][0].get('formatted_address', '')
-
- rec.latitude = location['lat']
- rec.longtitude = location['lng']
- rec.address_map = formatted_address # ✅ Simpan alamat lengkap
- else:
- raise UserError("Tidak ditemukan hasil geocode untuk alamat tersebut.")
- else:
- raise UserError("Permintaan ke Google Maps gagal. Periksa koneksi internet atau API Key.")
-
- def _update_address_from_coords(self):
- for rec in self:
- if rec.latitude and rec.longtitude:
- try:
- components, formatted, parsed = rec._reverse_geocode(rec.latitude, rec.longtitude)
- if not parsed:
- continue
-
- updates = {
- 'street': parsed.get('road') or '',
- 'zip': parsed.get('postcode') or '',
- 'address_map': formatted or '',
- }
-
- state = self.env['res.country.state'].search([('name', 'ilike', parsed.get('state'))], limit=1)
- if state:
- updates['state_id'] = state.id
-
- kota = self.env['vit.kota'].search([('name', 'ilike', parsed.get('city'))], limit=1)
- if kota:
- updates['kota_id'] = kota.id
-
- kec = self.env['vit.kecamatan'].search([('name', 'ilike', parsed.get('district'))], limit=1)
- if kec:
- updates['kecamatan_id'] = kec.id
-
- kel = self.env['vit.kelurahan'].search([('name', 'ilike', parsed.get('suburb'))], limit=1)
- if kel:
- updates['kelurahan_id'] = kel.id
-
- rec.update(updates)
-
- except Exception as e:
- raise UserError(f"Gagal update alamat dari koordinat: {str(e)}")
-
-
- def _reverse_geocode(self, lat, lng):
- api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
- if not api_key:
- raise UserError("API Key Google Maps belum dikonfigurasi.")
-
- url = f'https://maps.googleapis.com/maps/api/geocode/json?latlng={lat},{lng}&key={api_key}'
- response = requests.get(url)
- if response.ok:
- result = response.json()
- if result.get('results'):
- components = result['results'][0]['address_components']
- formatted = result['results'][0]['formatted_address']
- return components, formatted, self._parse_google_address(components)
- return {}, '', {}
-
- def _parse_google_address(self, components):
- def get(types):
- for comp in components:
- if types in comp['types']:
- return comp['long_name']
- return ''
-
- street_number = get('street_number')
- route = get('route')
- neighborhood = get('neighborhood') # Bisa jadi nama RW
- subpremise = get('subpremise') # Bisa jadi no kamar/ruko
-
- # Gabungkan informasi jalan
- road = " ".join(filter(None, [route, street_number, subpremise, neighborhood]))
+ # def geocode_address(self):
+ # for rec in self:
+ # # Daftar field penting
+ # required_fields = {
+ # 'Alamat Jalan (street)': rec.street,
+ # 'Kelurahan': rec.kelurahan_id.name if rec.kelurahan_id else '',
+ # 'Kecamatan': rec.kecamatan_id.name if rec.kecamatan_id else '',
+ # 'Kota': rec.kota_id.name if rec.kota_id else '',
+ # 'Kode Pos': rec.zip,
+ # 'Provinsi': rec.state_id.name if rec.state_id else '',
+ # }
- return {
- 'road': road.strip(),
- 'postcode': get('postal_code'),
- 'state': get('administrative_area_level_1'),
- 'city': get('administrative_area_level_2') or get('locality'),
- 'district': get('administrative_area_level_3'),
- 'suburb': get('administrative_area_level_4'),
- 'formatted': get('formatted_address'),
- }
+ # # Cek jika ada yang kosong
+ # missing = [label for label, val in required_fields.items() if not val]
+ # if missing:
+ # raise UserError(
+ # "Alamat tidak lengkap. Mohon lengkapi field berikut:\n- " + "\n- ".join(missing)
+ # )
+
+ # # Susun alamat lengkap
+ # address = ', '.join([
+ # required_fields['Alamat Jalan (street)'],
+ # required_fields['Kelurahan'],
+ # required_fields['Kecamatan'],
+ # required_fields['Kota'],
+ # required_fields['Kode Pos'],
+ # required_fields['Provinsi'],
+ # ])
+
+ # # Ambil API Key
+ # api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
+ # if not api_key:
+ # raise UserError("API Key Google Maps belum dikonfigurasi. Silakan isi melalui Settings.")
+
+ # # Request ke Google Maps
+ # url = f'https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={api_key}'
+ # response = requests.get(url)
+
+ # if response.ok:
+ # result = response.json()
+ # if result.get('results'):
+ # location = result['results'][0]['geometry']['location']
+ # formatted_address = result['results'][0].get('formatted_address', '')
+
+ # rec.latitude = location['lat']
+ # rec.longtitude = location['lng']
+ # rec.address_map = formatted_address # ✅ Simpan alamat lengkap
+ # else:
+ # raise UserError("Tidak ditemukan hasil geocode untuk alamat tersebut.")
+ # else:
+ # raise UserError("Permintaan ke Google Maps gagal. Periksa koneksi internet atau API Key.")
+
+ # def _update_address_from_coords(self):
+ # for rec in self:
+ # if rec.latitude and rec.longtitude:
+ # try:
+ # components, formatted, parsed = rec._reverse_geocode(rec.latitude, rec.longtitude)
+ # if not parsed:
+ # continue
+
+ # updates = {
+ # 'street': parsed.get('road') or '',
+ # 'zip': parsed.get('postcode') or '',
+ # 'address_map': formatted or '',
+ # }
+
+ # state = self.env['res.country.state'].search([('name', 'ilike', parsed.get('state'))], limit=1)
+ # if state:
+ # updates['state_id'] = state.id
+
+ # kota = self.env['vit.kota'].search([('name', 'ilike', parsed.get('city'))], limit=1)
+ # if kota:
+ # updates['kota_id'] = kota.id
+
+ # kec = self.env['vit.kecamatan'].search([('name', 'ilike', parsed.get('district'))], limit=1)
+ # if kec:
+ # updates['kecamatan_id'] = kec.id
+
+ # kel = self.env['vit.kelurahan'].search([('name', 'ilike', parsed.get('suburb'))], limit=1)
+ # if kel:
+ # updates['kelurahan_id'] = kel.id
+
+ # rec.update(updates)
+
+ # except Exception as e:
+ # raise UserError(f"Gagal update alamat dari koordinat: {str(e)}")
+
+
+ # def _reverse_geocode(self, lat, lng):
+ # api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key')
+ # if not api_key:
+ # raise UserError("API Key Google Maps belum dikonfigurasi.")
+
+ # url = f'https://maps.googleapis.com/maps/api/geocode/json?latlng={lat},{lng}&key={api_key}'
+ # response = requests.get(url)
+ # if response.ok:
+ # result = response.json()
+ # if result.get('results'):
+ # components = result['results'][0]['address_components']
+ # formatted = result['results'][0]['formatted_address']
+ # return components, formatted, self._parse_google_address(components)
+ # return {}, '', {}
+
+ # def _parse_google_address(self, components):
+ # def get(types):
+ # for comp in components:
+ # if types in comp['types']:
+ # return comp['long_name']
+ # return ''
+
+ # street_number = get('street_number')
+ # route = get('route')
+ # neighborhood = get('neighborhood') # Bisa jadi nama RW
+ # subpremise = get('subpremise') # Bisa jadi no kamar/ruko
+
+ # # Gabungkan informasi jalan
+ # road = " ".join(filter(None, [route, street_number, subpremise, neighborhood]))
+
+ # return {
+ # 'road': road.strip(),
+ # 'postcode': get('postal_code'),
+ # 'state': get('administrative_area_level_1'),
+ # 'city': get('administrative_area_level_2') or get('locality'),
+ # 'district': get('administrative_area_level_3'),
+ # 'suburb': get('administrative_area_level_4'),
+ # 'formatted': get('formatted_address'),
+ # }
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index bfc4e5fd..d0017115 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -75,6 +75,7 @@ class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
def unlink(self):
+
lines_to_reject = []
for line in self:
if line.order_id:
diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml
index 2a4b03a7..7405e27b 100644
--- a/indoteknik_custom/views/res_partner.xml
+++ b/indoteknik_custom/views/res_partner.xml
@@ -70,9 +70,9 @@
<!-- <group>
<button name="geocode_address" type="object" string="Get Pin Point Location" class="btn btn-primary"/>
</group> -->
- <div style="margin: 16px 0;">
+ <!-- <div style="margin: 16px 0;">
<field name="map_view" widget="googlemap" nolabel="1"/>
- </div>
+ </div> -->
<group>
<field name="address_map" readonly="1" force_save="1"/>
<field name="latitude" readonly="1" force_save="1"/>