47 lines
1.7 KiB
Python
Executable File
47 lines
1.7 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import models, fields, api
|
|
import time
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class sos_inventory_customers(models.Model):
|
|
_name = 'sos_inventory_customers'
|
|
_description = 'Inventory Customers'
|
|
_rec_name = 'customer_name'
|
|
_order = 'id desc'
|
|
|
|
customer_name = fields.Char(string="Customer Name")
|
|
customer_location = fields.Char(string="Location")
|
|
@api.model
|
|
def create(self, vals):
|
|
new_name = (vals.get('customer_name') or '').lower()
|
|
|
|
if new_name and len(new_name) >= 5:
|
|
# Words/phrases to exclude
|
|
blacklist = [
|
|
'private limited', 'pvt ltd', 'pvt. ltd.', 'ltd', 'llp', 'inc', 'co', 'company', 'corporation'
|
|
]
|
|
|
|
def clean_name(name):
|
|
for word in blacklist:
|
|
name = name.replace(word, '')
|
|
return name.strip()
|
|
|
|
new_name_clean = clean_name(new_name)
|
|
|
|
existing_customers = self.search([])
|
|
for customer in existing_customers:
|
|
existing_name = (customer.customer_name or '').lower()
|
|
existing_name_clean = clean_name(existing_name)
|
|
|
|
# Check all substrings of length 7 or more
|
|
for i in range(len(new_name_clean) - 6):
|
|
substring = new_name_clean[i:i+7]
|
|
if substring in existing_name_clean:
|
|
raise UserError(
|
|
f"A customer with a similar name already exists: '{customer.customer_name}' "
|
|
f"(matched substring: '{substring}')"
|
|
)
|
|
|
|
return super().create(vals) |