Server IP : 127.0.0.2 / Your IP : 3.140.250.173 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /opt/odoo/odoo/addons/base/res/ |
Upload File : |
# -*- coding: utf-8 -*- import re from odoo import api, fields, models from odoo.osv import expression def sanitize_account_number(acc_number): if acc_number: return re.sub(r'\W+', '', acc_number).upper() return False class Bank(models.Model): _description = 'Bank' _name = 'res.bank' _order = 'name' name = fields.Char(required=True) street = fields.Char() street2 = fields.Char() zip = fields.Char() city = fields.Char() state = fields.Many2one('res.country.state', 'Fed. State', domain="[('country_id', '=', country)]") country = fields.Many2one('res.country') email = fields.Char() phone = fields.Char() fax = fields.Char() active = fields.Boolean(default=True) bic = fields.Char('Bank Identifier Code', index=True, help="Sometimes called BIC or Swift.") @api.multi @api.depends('name', 'bic') def name_get(self): result = [] for bank in self: name = bank.name + (bank.bic and (' - ' + bank.bic) or '') result.append((bank.id, name)) return result @api.model def name_search(self, name, args=None, operator='ilike', limit=100): args = args or [] domain = [] if name: domain = ['|', ('bic', '=ilike', name + '%'), ('name', operator, name)] if operator in expression.NEGATIVE_TERM_OPERATORS: domain = ['&'] + domain banks = self.search(domain + args, limit=limit) return banks.name_get() class ResPartnerBank(models.Model): _name = 'res.partner.bank' _rec_name = 'acc_number' _description = 'Bank Accounts' _order = 'sequence' acc_type = fields.Char(compute='_compute_acc_type', help='Bank account type, inferred from account number') acc_number = fields.Char('Account Number', required=True) sanitized_acc_number = fields.Char(compute='_compute_sanitized_acc_number', string='Sanitized Account Number', readonly=True, store=True) partner_id = fields.Many2one('res.partner', 'Account Holder', ondelete='cascade', index=True, domain=['|', ('is_company', '=', True), ('parent_id', '=', False)]) bank_id = fields.Many2one('res.bank', string='Bank') bank_name = fields.Char(related='bank_id.name') bank_bic = fields.Char(related='bank_id.bic') sequence = fields.Integer() currency_id = fields.Many2one('res.currency', string='Currency') company_id = fields.Many2one('res.company', 'Company', default=lambda self: self.env.user.company_id, ondelete='cascade') _sql_constraints = [ ('unique_number', 'unique(sanitized_acc_number, company_id)', 'Account Number must be unique'), ] @api.depends('acc_number') def _compute_sanitized_acc_number(self): for bank in self: bank.sanitized_acc_number = sanitize_account_number(bank.acc_number) @api.multi def _compute_acc_type(self): for bank in self: bank.acc_type = 'bank' @api.model def search(self, args, offset=0, limit=None, order=None, count=False): pos = 0 while pos < len(args): if args[pos][0] == 'acc_number': op = args[pos][1] value = args[pos][2] if hasattr(value, '__iter__'): value = [sanitize_account_number(i) for i in value] else: value = sanitize_account_number(value) if 'like' in op: value = '%' + value + '%' args[pos] = ('sanitized_acc_number', op, value) pos += 1 return super(ResPartnerBank, self).search(args, offset, limit, order, count=count)