You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

287 lines
10 KiB

from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError, Warning
from psycopg2 import sql, DatabaseError
from werkzeug import utils
import re
class partner(models.Model):
_inherit = 'res.partner'
# @api.depends('qualifier_ids.partner_id')
# def _compute_text_qualifier_count(self):
# # The current user may not have access rights for donations
# for partner in self:
# try:
# partner.text_qualifier_count = len(partner.qualifier_ids)
# except Exception:
# partner.text_qualifier_count = 0
# @api.depends('qualifier_ids.partner_id')
# def _compute_bool_qualifier_count(self):
# # The current user may not have access rights for donations
# for partner in self:
# try:
# for qualifier_id in partner.qualifier_ids:
# partner.bool_qualifier_count =self.env['opendons_qualifier.partnerqualifier'].search([(partner.qual_i
# except Exception:
# partner.bool_qualifier_count = 0
def _compute_address_count(self):
# The current user may not have access rights for donations
for partner in self:
try:
partner.address_count = len(partner.address_ids)
except Exception:
partner.address_count = 0
def _compute_email_count(self):
# The current user may not have access rights for donations
for partner in self:
try:
partner.email_count = len(partner.email_ids)
except Exception:
partner.email_count = 0
def _compute_phone_count(self):
# The current user may not have access rights for donations
for partner in self:
try:
partner.phone_count = len(partner.phone_ids)
except Exception:
partner.phone_count = 0
def _compute_relationshipPartner_count(self):
# The current user may not have access rights for donations
for partner in self:
try:
partner.relationshipPartner_count = len(partner.relationshipPartner_ids)
except Exception:
partner.relationshipPartner_count = 0
def _compute_recurring_donation_count(self):
# The current user may not have access rights for donations
for partner in self:
try:
partner.recurring_donation_count=self.env['donation.donation'].search_count(['&',('recurring_template','!=',''),('partner_id','=',int(partner.id))])
except Exception:
partner.recurring_donation_count = 0
qualifier_ids = fields.One2many(
'opendons_qualifier.partnerqualifier',
'partner_id',
string='Qualifier',
readonly=True
)
# text_qualifier_count = fields.Integer(
# compute='_compute_text_qualifier_count',
# string="# of Qualifiers",
# readonly=True
# )
# bool_qualifier_count = fields.Integer(
# compute='_compute_bool_qualifier_count',
# string="# of Qualifiers",
# readonly=True
# )
address_ids = fields.One2many(
'opendons.partneraddress',
'partner_id',
string='Address',
readonly=True
)
# request_ids = fields.One2many(
# 'opendons.request',
# 'partner_ids',
# string='Request',
# readonly=True
# )
request_ids = fields.Many2many('opendons.request', 'request_partner_rel', 'partner_id', 'request_id', string='requests')
operation_ids = fields.Many2many('opendons.operation', 'operation_partner_rel', 'partner_id', 'operation_id', string='operations')
operation_excl_ids = fields.Many2many('opendons.operation', 'operation_excl_partner_rel', 'partner_id', 'operation_id', string='excluded operations')
segment_ids = fields.Many2many('opendons.segment', 'segment_partner_rel', 'partner_id', 'segment_id', string='segments')
address_count = fields.Integer(
compute='_compute_address_count',
string="# of Addresses",
readonly=True
)
relationshipPartner_ids = fields.One2many(
'opendons_relationship.partner',
'partner_id',
string='Relationship',
readonly=True
)
relationshipPartner_count = fields.Integer(
compute='_compute_relationshipPartner_count',
string="# of Relationship",
readonly=True
)
email_ids = fields.One2many(
'opendons.partneremail',
'partner_id',
string='Email',
readonly=True
)
email_count = fields.Integer(
compute='_compute_email_count',
string="# of email",
readonly=True
)
phone_ids = fields.One2many(
'opendons.partnerphone',
'partner_id',
string='Phone',
readonly=True
)
phone_count = fields.Integer(
compute='_compute_phone_count',
string="# of phone",
readonly=True
)
recurring_donation_count = fields.Integer(
compute='_compute_recurring_donation_count',
string="# of recurring donation",
readonly=True
)
key=fields.Integer(
#compute='_compute_key',
string="Key",
#store=True,
readonly=True
)
firstname=fields.Char(string="First name")
npai_count=fields.Integer(String="NPAI count", readonly=True)
source=fields.Char(String="source")
def _compute_key(self):
for rec in self:
rec.key=int(rec.id)*40456
def _compute_all_key(self):
#for rec in self.env:
#rec.write({'key':3})
#raise Warning(rec.id)
for rec in self.env['res.partner'].search([]):
rec.key=int(rec.id)*40456
#raise Warning(len())
def _update_source(self):
#for rec in self.env:
#rec.write({'key':3})
#raise Warning(rec.id)
for rec in self.env['res.partner'].search([]):
rec.source='joomla'
#raise Warning(len())
def _remove_source(self):
#for rec in self.env:
#rec.write({'key':3})
#raise Warning(rec.id)
self.env["res.partner"].search([('source','=','joomla')]).unlink()
#raise Warning(len())
@api.onchange('street')
def _onchange_street(self):
for rec in self:
rec.npai_count=0
return
@api.constrains('email')
def _onchange_email(self):
if self.email:
if not self.image_1920 and self._context.get('gravatar_image') and self.email:
self.image_1920 = self._get_gravatar_image(self.email)
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
if not re.fullmatch(regex, self.email):
raise ValidationError('Invalid email')
@api.constrains('phone')
def _onchange_phone(self):
regex = re.compile(r'(^(?:(?:\+|00)33[\s.-]{0,3}(?:\(0\)[\s.-]{0,3})?|0)[1-9](?:(?:[\s.-]?\d{2}){4}|\d{2}(?:[\s.-]?\d{3}){2})$)+')
# 0123456789
# 01 23 45 67 89
# 01.23.45.67.89
# 0123 45.67.89
# 0033 123-456-789
# +33-1.23.45.67.89
# +33 - 123 456 789
# +33(0) 123 456 789
# +33 (0)123 45 67 89
# +33 (0)1 2345-6789
# +33(0) - 123456789
if not re.fullmatch(regex, self.phone):
raise ValidationError('Invalid phone')
@api.constrains('mobile')
def _onchange_mobile(self):
regex = re.compile(r'(^(?:(?:\+|00)33[\s.-]{0,3}(?:\(0\)[\s.-]{0,3})?|0)[1-9](?:(?:[\s.-]?\d{2}){4}|\d{2}(?:[\s.-]?\d{3}){2})$)+')
# 0123456789
# 01 23 45 67 89
# 01.23.45.67.89
# 0123 45.67.89
# 0033 123-456-789
# +33-1.23.45.67.89
# +33 - 123 456 789
# +33(0) 123 456 789
# +33 (0)123 45 67 89
# +33 (0)1 2345-6789
# +33(0) - 123456789
if not re.fullmatch(regex, self.mobile):
raise ValidationError('Invalid mobile')
class ResPartnerBank(models.Model):
_inherit = 'res.partner.bank'
@api.onchange('acc_number')
def _onchange_acc_number(self):
#validation IBAN
#https://www.regextester.com/115565
if self.acc_number:
regex = re.compile(r'(^(?:(?:IT|SM)\d{2}[A-Z]\d{22}|CY\d{2}[A-Z]\d{23}|NL\d{2}[A-Z]{4}\d{10}|LV\d{2}[A-Z]{4}\d{13}|(?:BG|BH|GB|IE)\d{2}[A-Z]{4}\d{14}|GI\d{2}[A-Z]{4}\d{15}|RO\d{2}[A-Z]{4}\d{16}|KW\d{2}[A-Z]{4}\d{22}|MT\d{2}[A-Z]{4}\d{23}|NO\d{13}|(?:DK|FI|GL|FO)\d{16}|MK\d{17}|(?:AT|EE|KZ|LU|XK)\d{18}|(?:BA|HR|LI|CH|CR)\d{19}|(?:GE|DE|LT|ME|RS)\d{20}|IL\d{21}|(?:AD|CZ|ES|MD|SA)\d{22}|PT\d{23}|(?:BE|IS)\d{24}|(?:FR|MR|MC)\d{25}|(?:AL|DO|LB|PL)\d{26}|(?:AZ|HU)\d{27}|(?:GR|MU)\d{28})$)+')
if not re.fullmatch(regex, self.acc_number):
raise Warning('Invalid IBAN')
@api.constrains('acc_number')
def _onchange_acc_number(self):
#validation IBAN
#https://www.regextester.com/115565
if self.acc_number:
regex = re.compile(r'(^(?:(?:IT|SM)\d{2}[A-Z]\d{22}|CY\d{2}[A-Z]\d{23}|NL\d{2}[A-Z]{4}\d{10}|LV\d{2}[A-Z]{4}\d{13}|(?:BG|BH|GB|IE)\d{2}[A-Z]{4}\d{14}|GI\d{2}[A-Z]{4}\d{15}|RO\d{2}[A-Z]{4}\d{16}|KW\d{2}[A-Z]{4}\d{22}|MT\d{2}[A-Z]{4}\d{23}|NO\d{13}|(?:DK|FI|GL|FO)\d{16}|MK\d{17}|(?:AT|EE|KZ|LU|XK)\d{18}|(?:BA|HR|LI|CH|CR)\d{19}|(?:GE|DE|LT|ME|RS)\d{20}|IL\d{21}|(?:AD|CZ|ES|MD|SA)\d{22}|PT\d{23}|(?:BE|IS)\d{24}|(?:FR|MR|MC)\d{25}|(?:AL|DO|LB|PL)\d{26}|(?:AZ|HU)\d{27}|(?:GR|MU)\d{28})$)+')
if not re.fullmatch(regex, self.acc_number):
raise Warning('Invalid IBAN')