diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-08-18 09:02:59 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-08-18 09:02:59 +0700 |
| commit | 90fb71ebdd4f7324a5491780f24dc18b8bd7ccc4 (patch) | |
| tree | f6887dddf1484bf1428b3ebf1de331603430f145 /indoteknik_custom | |
| parent | b133092eb4d27174f774d96f0a090670ad694d19 (diff) | |
| parent | 28c2d4175eae1b363d1a306737705aaae067515b (diff) | |
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into pum-v2
Diffstat (limited to 'indoteknik_custom')
| -rw-r--r-- | indoteknik_custom/models/res_partner.py | 151 | ||||
| -rw-r--r-- | indoteknik_custom/models/user_company_request.py | 10 |
2 files changed, 128 insertions, 33 deletions
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index cf9fbea4..e5e382a1 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -199,16 +199,20 @@ class ResPartner(models.Model): alamat_lengkap_text = fields.Text(string="Alamat Lengkap", required=False, tracking=3) - def write(self, vals): - res = super(ResPartner, self).write(vals) + # def write(self, vals): + # res = super(ResPartner, self).write(vals) - for rec in self: - if 'latitude' in vals or 'longtitude' in vals: - rec._update_address_from_coords() + # use_pin = bool(self.env.context.get('use_pin')) - # Sinkronisasi payment_difficulty ke semua anak jika partner ini adalah parent - if not rec.parent_id and 'payment_difficulty' in vals: - rec.child_ids.write({'payment_difficulty': vals['payment_difficulty']}) + # for rec in self: + # if use_pin and 'latitude' in vals or 'longtitude' in vals: + # # rec._update_address_from_coords() + # rec.with_context(overwrite_street_from_pin=False)._update_address_from_coords() + + + # # Sinkronisasi payment_difficulty ke semua anak jika partner ini adalah parent + # if not rec.parent_id and 'payment_difficulty' in vals: + # rec.child_ids.write({'payment_difficulty': vals['payment_difficulty']}) # # # if 'property_payment_term_id' in vals: # # if not self.env.user.is_accounting and vals['property_payment_term_id'] != 26: @@ -219,17 +223,47 @@ class ResPartner(models.Model): # # if self.env.user.id not in users_in_group.mapped('id'): # # raise UserError('You name it') # + def write(self, vals): + res = super(ResPartner, self).write(vals) + + use_pin = bool(self.env.context.get('use_pin')) + for rec in self: + # Hanya jalan kalau explicit use_pin DAN ada lat/lng di payload + if use_pin and (('latitude' in vals) or ('longtitude' in vals)): + # optional guard: pastikan bukan kosong/0 + lat = rec.latitude + lng = rec.longtitude + if lat and lng and str(lat) not in ('0', '0.0') and str(lng) not in ('0', '0.0'): + rec.with_context(overwrite_street_from_pin=False)._update_address_from_coords() + + # Sinkronisasi payment_difficulty ke anak + if not rec.parent_id and 'payment_difficulty' in vals: + rec.child_ids.write({'payment_difficulty': vals['payment_difficulty']}) return res + + # @api.model + # def create(self, vals): + # records = super().create(vals) + # use_pin = bool(self.env.context.get('use_pin')) + # for rec in records: + # if use_pin and vals.get('latitude') and vals.get('longtitude'): + # rec._update_address_from_coords() + # if rec.parent_id and not vals.get('payment_difficulty'): + # rec.payment_difficulty = rec.parent_id.payment_difficulty + # return records + @api.model def create(self, vals): records = super().create(vals) + use_pin = bool(self.env.context.get('use_pin')) for rec in records: - if vals.get('latitude') and vals.get('longtitude'): - rec._update_address_from_coords() + if use_pin and vals.get('latitude') and vals.get('longtitude'): + rec.with_context(overwrite_street_from_pin=False)._update_address_from_coords() if rec.parent_id and not vals.get('payment_difficulty'): - rec.payment_difficulty = rec.parent_id.payment_difficulty + rec.payment_difficulty = rec.parent_id.payment_difficulty return records + @api.constrains('email') def _check_duplicate_name(self): @@ -621,6 +655,44 @@ class ResPartner(models.Model): 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 '', + # } + + # if self.env.context.get('overwrite_street_from_pin', False): + # updates['street'] = parsed.get('road') or rec.street + + # 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 _update_address_from_coords(self): for rec in self: if rec.latitude and rec.longtitude: @@ -630,28 +702,45 @@ class ResPartner(models.Model): continue updates = { - 'street': parsed.get('road') or '', - 'zip': parsed.get('postcode') or '', - 'address_map': formatted or '', + 'address_map': formatted or rec.address_map 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) + # ❌ Jangan isi street kecuali diminta eksplisit via context + if self.env.context.get('overwrite_street_from_pin', False): + road = parsed.get('road') + if road: + updates['street'] = road + + # (Opsional) admin area & zip hanya jika kosong agar tidak menimpa input user + if (not rec.zip) and parsed.get('postcode'): + updates['zip'] = parsed.get('postcode') + + state_name = parsed.get('state') + if state_name and not rec.state_id: + state = self.env['res.country.state'].search([('name', 'ilike', state_name)], limit=1) + if state: + updates['state_id'] = state.id + + city_name = parsed.get('city') + if city_name and not rec.kota_id: + kota = self.env['vit.kota'].search([('name', 'ilike', city_name)], limit=1) + if kota: + updates['kota_id'] = kota.id + + dist_name = parsed.get('district') + if dist_name and not rec.kecamatan_id: + kec = self.env['vit.kecamatan'].search([('name', 'ilike', dist_name)], limit=1) + if kec: + updates['kecamatan_id'] = kec.id + + sub_name = parsed.get('suburb') + if sub_name and not rec.kelurahan_id: + kel = self.env['vit.kelurahan'].search([('name', 'ilike', sub_name)], limit=1) + if kel: + updates['kelurahan_id'] = kel.id + + if updates: + rec.update(updates) except Exception as e: raise UserError(f"Gagal update alamat dari koordinat: {str(e)}") diff --git a/indoteknik_custom/models/user_company_request.py b/indoteknik_custom/models/user_company_request.py index 9216e8eb..284575aa 100644 --- a/indoteknik_custom/models/user_company_request.py +++ b/indoteknik_custom/models/user_company_request.py @@ -1,6 +1,9 @@ from odoo import models, fields, api from odoo.exceptions import UserError from odoo.http import request +import logging + +_logger = logging.getLogger(__name__) class UserCompanyRequest(models.Model): _name = 'user.company.request' @@ -65,8 +68,8 @@ class UserCompanyRequest(models.Model): is_approve = vals.get('is_approve') is_internal_input = vals.get('internal_input') is_company_id = vals.get('user_company_id') - if self.is_approve and is_approve: - raise UserError('Tidak dapat mengubah approval yang sudah diisi') + # if self.is_approve and is_approve: + # raise UserError('Tidak dapat mengubah approval yang sudah diisi') if is_internal_input: if self.user_company_id.nama_wajib_pajak == self.user_company_id.name: @@ -75,6 +78,7 @@ class UserCompanyRequest(models.Model): user_company_id = [] if is_company_id: user_company_id = request.env['res.partner'].search([('id', '=', is_company_id)], limit=1) + _logger.info('User Company ID: %s', user_company_id) # self.user_company_id.customer_type = self.similar_company_ids.customer_type # self.user_company_id.npwp = self.similar_company_ids.npwp # self.user_company_id.sppkp = self.similar_company_ids.sppkp @@ -101,6 +105,8 @@ class UserCompanyRequest(models.Model): self.user_id.property_account_payable_id = user_company_id.property_account_payable_id if user_company_id else self.user_company_id.property_account_payable_id self.user_id.property_payment_term_id = user_company_id.property_payment_term_id if user_company_id else self.user_company_id.property_payment_term_id self.user_id.property_supplier_payment_term_id = user_company_id.property_supplier_payment_term_id if user_company_id else self.user_company_id.property_supplier_payment_term_id + # self.user_id.is_company = True + # self.user_id.active = True self.user_company_id.active = True user.send_company_switch_approve_mail() if vals.get('is_switch_account') == True else user.send_company_request_approve_mail() else: |
