summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/res_partner.py
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2025-05-14 09:23:14 +0700
committerit-fixcomart <it@fixcomart.co.id>2025-05-14 09:23:14 +0700
commitf120c760c6a837681ebed26d9eea33a8961cd1aa (patch)
tree728ecdd5ffd1530d97d58a9f18b850186b39aa67 /indoteknik_custom/models/res_partner.py
parenta571531bd8626f9bee25e89c62bbd9268ed30597 (diff)
parent2469ee37cfe854f0419a8c3fbabed5bc32bcaa6e (diff)
Merge branch 'odoo-backup' into CR/form-merchant
# Conflicts: # indoteknik_custom/models/__init__.py # indoteknik_custom/security/ir.model.access.csv
Diffstat (limited to 'indoteknik_custom/models/res_partner.py')
-rw-r--r--indoteknik_custom/models/res_partner.py70
1 files changed, 67 insertions, 3 deletions
diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py
index 7852682f..ff07c94c 100644
--- a/indoteknik_custom/models/res_partner.py
+++ b/indoteknik_custom/models/res_partner.py
@@ -2,6 +2,7 @@ from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
from odoo.http import request
+import re
class GroupPartner(models.Model):
_name = 'group.partner'
@@ -39,6 +40,14 @@ class ResPartner(models.Model):
estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun')
tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo')
tempo_limit = fields.Char(string='Limit Tempo')
+ minimum_amount = fields.Float(
+ string="Minimum Order",
+ help="Jika total belanja kurang dari ini, maka payment term akan otomatis menjadi CBD."
+ )
+ minimum_amount_tax = fields.Float(
+ string="Minimum Amount Tax",
+ help="Jika total belanja kurang dari ini, maka tax akan otomatis menjadi 0%."
+ )
category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', domain=lambda self: self._get_default_category_domain())
@api.model
@@ -58,6 +67,7 @@ class ResPartner(models.Model):
# Pengiriman
pic_name = fields.Char(string='Nama PIC Penerimaan Barang')
+ pic_mobile = fields.Char(string='Nomor HP PIC Penerimaan Barang')
street_pengiriman = fields.Char(string="Alamat Perusahaan")
state_id_pengiriman = fields.Many2one('res.country.state', string='State')
city_id_pengiriman = fields.Many2one('vit.kota', string='City')
@@ -65,6 +75,7 @@ class ResPartner(models.Model):
subDistrict_id_pengiriman = fields.Many2one('vit.kelurahan', string='Kelurahan')
zip_pengiriman = fields.Char(string="Zip")
invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice')
+ invoice_pic_mobile = fields.Char(string='Nomor HP PIC Penerimaan Invoice')
street_invoice = fields.Char(string="Alamat Perusahaan")
state_id_invoice = fields.Many2one('res.country.state', string='State')
city_id_invoice = fields.Many2one('vit.kota', string='City')
@@ -73,6 +84,7 @@ class ResPartner(models.Model):
zip_invoice = fields.Char(string="Zip")
tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice')
jadwal_bayar = fields.Char(string='Jadwal Pembayaran')
+ dokumen_prosedur = fields.Many2one('ir.attachment', string="Dokumen Pengiriman", tracking=3, readonly=True)
dokumen_pengiriman = fields.Char(string='Dokumen Tanda Terima yang Diberikan Pada Saat Pengiriman Barang')
dokumen_pengiriman_input = fields.Char(string='Dokumen yang Dibawa Saat Pengiriman Barang')
dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice')
@@ -124,8 +136,8 @@ class ResPartner(models.Model):
('PNR', 'Pareto Non Repeating'),
('NP', 'Non Pareto')
])
- email_finance = fields.Char(string='Email Finance')
- email_sales = fields.Char(string='Email Sales')
+ email_finance = fields.Char(string='Email Finance Vendor')
+ email_sales = fields.Char(string='Email Sales Vendor')
user_payment_terms_sales = fields.Many2one('res.users', string='Users Update Payment Terms')
date_payment_terms_sales = fields.Datetime(string='Date Update Payment Terms')
@@ -263,6 +275,45 @@ class ResPartner(models.Model):
# # raise UserError('You name it')
#
return res
+
+ @api.constrains('name')
+ def _check_duplicate_name(self):
+ for record in self:
+ if record.name:
+ existing_partner = self.env['res.partner'].search([
+ ('id', '!=', record.id),
+ ('name', '=', record.name),
+ ('email', '=', record.email)
+ ], limit=1)
+
+ if existing_partner:
+ raise ValidationError(f"Nama '{record.name}' sudah digunakan oleh partner lain!")
+
+ @api.constrains('npwp')
+ def _check_npwp(self):
+ for record in self:
+ npwp = record.npwp.strip() if record.npwp else ''
+ # Abaikan validasi jika NPWP kosong atau diisi "0"
+ if not npwp or npwp == '0' or npwp == '00.000.000.0-000.000':
+ continue
+
+ # Validasi untuk NPWP 15 digit (format: 99.999.999.9-999.999)
+ if len(npwp) == 20:
+ # Regex untuk 15 digit dengan format titik dan tanda hubung
+ pattern_15_digit = r'^\d{2}\.\d{3}\.\d{3}\.\d{1}-\d{3}\.\d{3}$'
+ if not re.match(pattern_15_digit, npwp):
+ raise ValidationError("Format NPWP 15 digit yang dimasukkan salah. Pastikan format yang benar adalah: 99.999.999.9-999.999")
+
+ # Validasi untuk NPWP 16 digit (hanya angka tanpa titik atau tanda hubung)
+ elif len(npwp) == 16:
+ pattern_16_digit = r'^\d{16}$'
+ if not re.match(pattern_16_digit, npwp):
+ raise ValidationError("Format NPWP 16 digit yang dimasukkan salah. Format yang benar adalah 16 digit angka tanpa titik atau tanda hubung.")
+
+ # Validasi panjang NPWP jika lebih atau kurang dari 15 atau 16 digit
+ else:
+ raise ValidationError("Digit NPWP yang dimasukkan tidak sesuai. Pastikan NPWP memiliki 15 digit dengan format tertentu (99.999.999.9-999.999) atau 16 digit tanpa tanda hubung.")
+
def write(self, vals):
# Fungsi rekursif untuk meng-update semua child, termasuk child dari child
@@ -321,6 +372,7 @@ class ResPartner(models.Model):
# Pengiriman
vals['pic_name'] = vals.get('pic_name', self.pic_name)
+ vals['pic_mobile'] = vals.get('pic_mobile', self.pic_mobile)
vals['street_pengiriman'] = vals.get('street_pengiriman', self.street_pengiriman)
vals['state_id_pengiriman'] = vals.get('state_id_pengiriman', self.state_id_pengiriman)
vals['city_id_pengiriman'] = vals.get('city_id_pengiriman', self.city_id_pengiriman)
@@ -328,6 +380,7 @@ class ResPartner(models.Model):
vals['subDistrict_id_pengiriman'] = vals.get('subDistrict_id_pengiriman', self.subDistrict_id_pengiriman)
vals['zip_pengiriman'] = vals.get('zip_pengiriman', self.zip_pengiriman)
vals['invoice_pic'] = vals.get('invoice_pic', self.invoice_pic)
+ vals['invoice_pic_mobile'] = vals.get('invoice_pic_mobile', self.invoice_pic_mobile)
vals['street_invoice'] = vals.get('street_invoice', self.street_invoice)
vals['state_id_invoice'] = vals.get('state_id_invoice', self.state_id_invoice)
vals['city_id_invoice'] = vals.get('city_id_invoice', self.city_id_invoice)
@@ -336,6 +389,7 @@ class ResPartner(models.Model):
vals['zip_invoice'] = vals.get('zip_invoice', self.zip_invoice)
vals['tukar_invoice'] = vals.get('tukar_invoice', self.tukar_invoice)
vals['jadwal_bayar'] = vals.get('jadwal_bayar', self.jadwal_bayar)
+ vals['dokumen_prosedur'] = vals.get('dokumen_prosedur', self.dokumen_prosedur)
vals['dokumen_pengiriman'] = vals.get('dokumen_pengiriman', self.dokumen_pengiriman)
vals['dokumen_pengiriman_input'] = vals.get('dokumen_pengiriman_input', self.dokumen_pengiriman_input)
vals['dokumen_invoice'] = vals.get('dokumen_invoice', self.dokumen_invoice)
@@ -444,6 +498,7 @@ class ResPartner(models.Model):
'finance_mobile': vals.get('finance_mobile'),
'finance_email': vals.get('finance_email'),
'pic_name': vals.get('pic_name'),
+ 'pic_mobile': vals.get('pic_mobile'),
'street_pengiriman': vals.get('street_pengiriman'),
'state_id_pengiriman': vals.get('state_id_pengiriman'),
'city_id_pengiriman': vals.get('city_id_pengiriman'),
@@ -451,6 +506,7 @@ class ResPartner(models.Model):
'subDistrict_id_pengiriman': vals.get('subDistrict_id_pengiriman'),
'zip_pengiriman': vals.get('zip_pengiriman'),
'invoice_pic': vals.get('invoice_pic'),
+ 'invoice_pic_mobile': vals.get('invoice_pic_mobile'),
'street_invoice': vals.get('street_invoice'),
'state_id_invoice': vals.get('state_id_invoice'),
'city_id_invoice': vals.get('city_id_invoice'),
@@ -459,6 +515,7 @@ class ResPartner(models.Model):
'zip_invoice': vals.get('zip_invoice'),
'tukar_invoice': vals.get('tukar_invoice'),
'jadwal_bayar': vals.get('jadwal_bayar'),
+ 'dokumen_prosedur': vals.get('dokumen_prosedur'),
'dokumen_pengiriman': vals.get('dokumen_pengiriman'),
'dokumen_pengiriman_input': vals.get('dokumen_pengiriman_input'),
'dokumen_invoice': vals.get('dokumen_invoice'),
@@ -625,6 +682,8 @@ class ResPartner(models.Model):
def _onchange_customer_type(self):
if self.customer_type == 'nonpkp':
self.npwp = '00.000.000.0-000.000'
+ elif self.customer_type == 'pkp':
+ self.npwp = '00.000.000.0-000.000'
def get_check_payment_term(self):
self.ensure_one()
@@ -639,4 +698,9 @@ class ResPartner(models.Model):
if not self.nitku.isdigit():
raise UserError("NITKU harus berupa angka.")
if len(self.nitku) != 22:
- raise UserError("NITKU harus memiliki tepat 22 angka.") \ No newline at end of file
+ raise UserError("NITKU harus memiliki tepat 22 angka.")
+
+ @api.onchange('name')
+ def _onchange_name(self):
+ if self.company_type == 'person':
+ self.nama_wajib_pajak = self.name \ No newline at end of file