From 5ca33915f1e3d052cfa989163d43a15dbc9ddec9 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Tue, 10 Jun 2025 11:17:57 +0700 Subject: (andri) add button get koordinat pada contact --- indoteknik_custom/models/res_partner.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index f1e362e6..0f1edac2 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -3,6 +3,7 @@ from odoo.exceptions import UserError, ValidationError from datetime import datetime from odoo.http import request import re +import requests class GroupPartner(models.Model): _name = 'group.partner' @@ -521,4 +522,28 @@ class ResPartner(models.Model): @api.onchange('name') def _onchange_name(self): if self.company_type == 'person': - self.nama_wajib_pajak = self.name \ No newline at end of file + self.nama_wajib_pajak = self.name + + def geocode_address(self): + for rec in self: + address = ', '.join(filter(None, [ + rec.street, + rec.city, + rec.state_id.name if rec.state_id else '', + rec.zip, + rec.country_id.name if rec.country_id else '' + ])) + + if not address: + continue + + api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key') + 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'] + rec.latitude = location['lat'] + rec.longtitude = location['lng'] \ No newline at end of file -- cgit v1.2.3 From df0467f8e493840f3013bc58ca26fc6d98793c95 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Tue, 10 Jun 2025 15:47:32 +0700 Subject: (andri) add openstreetmaps pada contact --- indoteknik_custom/models/res_partner.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 0f1edac2..fee0e73b 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -146,6 +146,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') address_map = fields.Char(string='Address Map') company_type = fields.Selection(string='Company Type', selection=[('person', 'Individual'), ('company', 'Company')], @@ -526,12 +527,24 @@ class ResPartner(models.Model): def geocode_address(self): for rec in self: + # Ambil nama dari relasi (Many2one) atau gunakan nilai default + 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 '' + zip_code = rec.zip or '' + state = rec.state_id.name if rec.state_id else '' + country = rec.country_id.name if rec.country_id else '' + street = rec.street or '' + + # Susun alamat lengkap sesuai urutan lokal address = ', '.join(filter(None, [ - rec.street, - rec.city, - rec.state_id.name if rec.state_id else '', - rec.zip, - rec.country_id.name if rec.country_id else '' + street, + kelurahan, + kecamatan, + kota, + zip_code, + state, + country, ])) if not address: @@ -539,6 +552,7 @@ class ResPartner(models.Model): api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key') url = f'https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={api_key}' + response = requests.get(url) if response.ok: @@ -546,4 +560,4 @@ class ResPartner(models.Model): if result.get('results'): location = result['results'][0]['geometry']['location'] rec.latitude = location['lat'] - rec.longtitude = location['lng'] \ No newline at end of file + rec.longtitude = location['lng'] -- cgit v1.2.3 From a6629db53b6080bd2217e426b434c2ecc72588ab Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Wed, 11 Jun 2025 09:14:42 +0700 Subject: (andri) add button INFORMATION DETAIL pada popup detail contact & addresses --- indoteknik_custom/models/res_partner.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index fee0e73b..b8bdfe22 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -525,6 +525,16 @@ class ResPartner(models.Model): if self.company_type == 'person': self.nama_wajib_pajak = self.name + def action_open_full_form(self): + return { + 'type': 'ir.actions.act_window', + 'name': 'Partner', + 'res_model': 'res.partner', + 'res_id': self.id, + 'view_mode': 'form', + 'target': 'current', + } + def geocode_address(self): for rec in self: # Ambil nama dari relasi (Many2one) atau gunakan nilai default -- cgit v1.2.3 From 771cd3b9f5c0a6594b6e276bc47e3599d6c751e4 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Wed, 11 Jun 2025 09:50:05 +0700 Subject: (andri) add validasi tidak bisa pinpoint ketika alamat yang diisikan belum lengkap --- indoteknik_custom/models/res_partner.py | 62 ++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 24 deletions(-) (limited to 'indoteknik_custom/models') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index b8bdfe22..a15398c7 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -537,32 +537,42 @@ class ResPartner(models.Model): def geocode_address(self): for rec in self: - # Ambil nama dari relasi (Many2one) atau gunakan nilai default - 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 '' - zip_code = rec.zip or '' - state = rec.state_id.name if rec.state_id else '' - country = rec.country_id.name if rec.country_id else '' - street = rec.street or '' - - # Susun alamat lengkap sesuai urutan lokal - address = ', '.join(filter(None, [ - street, - kelurahan, - kecamatan, - kota, - zip_code, - state, - country, - ])) - - if not address: - continue - + # 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 '', + 'Negara': rec.country_id.name if rec.country_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'], + required_fields['Negara'], + ]) + + # Ambil API Key api_key = self.env['ir.config_parameter'].sudo().get_param('google.maps.api_key') - url = f'https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={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: @@ -571,3 +581,7 @@ class ResPartner(models.Model): location = result['results'][0]['geometry']['location'] rec.latitude = location['lat'] rec.longtitude = location['lng'] + else: + raise UserError("Tidak ditemukan hasil geocode untuk alamat tersebut.") + else: + raise UserError("Permintaan ke Google Maps gagal. Periksa koneksi internet atau API Key.") -- cgit v1.2.3