commit
a3919bb30b
|
|
@ -21,13 +21,11 @@ from odoo.exceptions import UserError
|
||||||
import logging
|
import logging
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
class ResPartnerInherit(models.Model):
|
class ResPartnerInherit(models.Model):
|
||||||
|
|
||||||
_inherit = 'res.partner'
|
_inherit = 'res.partner'
|
||||||
_description = "ResPartner Inherit Model"
|
|
||||||
|
|
||||||
is_affiliate = fields.Boolean(default=False)
|
is_affiliate = fields.Boolean(default=False)
|
||||||
res_affiliate_key = fields.Char(string="Affiliate key")
|
res_affiliate_key = fields.Char(string="Affiliate key")
|
||||||
affiliate_program_id = fields.Many2one("affiliate.program", string="Program")
|
affiliate_program_id = fields.Many2one("affiliate.program", string="Program", groups="affiliate_management.affiliate_security_user_group")
|
||||||
pending_amt = fields.Float(compute='_compute_pending_amt', string='Pending Amount')
|
pending_amt = fields.Float(compute='_compute_pending_amt', string='Pending Amount')
|
||||||
approved_amt = fields.Float(compute='_compute_approved_amt', string='Approved Amount')
|
approved_amt = fields.Float(compute='_compute_approved_amt', string='Approved Amount')
|
||||||
|
|
||||||
|
|
@ -64,7 +62,8 @@ class ResPartnerInherit(models.Model):
|
||||||
aff_prgm = None
|
aff_prgm = None
|
||||||
new_res_partner = None
|
new_res_partner = None
|
||||||
for vals in vals_list:
|
for vals in vals_list:
|
||||||
aff_prgm = self.env['affiliate.program'].search([])[-1].id if len(self.env['affiliate.program'].search([])) > 0 else ''
|
programs = self.env['affiliate.program'].sudo().search([])
|
||||||
|
aff_prgm = programs[-1].id if len(programs) > 0 else ''
|
||||||
if vals.get('is_affiliate'):
|
if vals.get('is_affiliate'):
|
||||||
vals.update({
|
vals.update({
|
||||||
'affiliate_program_id': aff_prgm
|
'affiliate_program_id': aff_prgm
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
'website': 'https://ensan.com',
|
'website': 'https://ensan.com',
|
||||||
'license': 'LGPL-3',
|
'license': 'LGPL-3',
|
||||||
'category': 'Sales',
|
'category': 'Sales',
|
||||||
'depends': ['base', 'website_sale', 'sms'],
|
'depends': ['base', 'website_sale', 'sms', 'phone_validation'],
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'data/sms_data.xml',
|
'data/sms_data.xml',
|
||||||
|
|
|
||||||
|
|
@ -4,3 +4,5 @@ from . import sale_report
|
||||||
from . import res_config_settings
|
from . import res_config_settings
|
||||||
from . import sms_composer
|
from . import sms_composer
|
||||||
from . import website
|
from . import website
|
||||||
|
from . import res_partner
|
||||||
|
from . import phone_validation_mixin
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
from odoo import models
|
||||||
|
from odoo.addons.phone_validation.tools import phone_validation
|
||||||
|
|
||||||
|
class PhoneValidationMixin(models.AbstractModel):
|
||||||
|
_inherit = 'phone.validation.mixin'
|
||||||
|
|
||||||
|
def phone_format(self, number, country=None, company=None):
|
||||||
|
country = country or self._phone_get_country()
|
||||||
|
if not country:
|
||||||
|
return number
|
||||||
|
return phone_validation.phone_format(
|
||||||
|
number,
|
||||||
|
country.code if country else None,
|
||||||
|
country.phone_code if country else None,
|
||||||
|
force_format='E164',
|
||||||
|
raise_exception=False
|
||||||
|
).replace('+', '')
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
from odoo import models, fields, api
|
||||||
|
from odoo.addons.phone_validation.tools import phone_validation
|
||||||
|
|
||||||
|
|
||||||
|
class ResPartner(models.Model):
|
||||||
|
_inherit = 'res.partner'
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals_list):
|
||||||
|
res = super().create(vals_list)
|
||||||
|
order_ids = self.env['sale.order'].search([])
|
||||||
|
portal_user_id = self.env.ref('base.public_partner').id
|
||||||
|
for rec in res:
|
||||||
|
phone = rec.phone or rec.mobile
|
||||||
|
partner_orders = order_ids.filtered(lambda o: o.order_mobile_number == phone and o.partner_id.id == portal_user_id)
|
||||||
|
partner_orders.write({'partner_id': rec.id})
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
@ -1,34 +1,11 @@
|
||||||
from odoo import models, fields, api, _
|
from odoo import models, fields, api, _
|
||||||
from odoo.exceptions import UserError, ValidationError
|
from odoo.exceptions import UserError, ValidationError
|
||||||
from odoo.tools.json import scriptsafe as json_scriptsafe
|
from odoo.tools.json import scriptsafe as json_scriptsafe
|
||||||
|
from odoo.addons.phone_validation.tools import phone_validation
|
||||||
def check_mobile_number_validation(phone):
|
|
||||||
if phone[0] == '+' and phone[1] != '0':
|
|
||||||
if phone[1:4] == '966':
|
|
||||||
if len(phone[4:]) >= 8:
|
|
||||||
return phone
|
|
||||||
else:
|
|
||||||
phone = phone[0] + '966' + phone[1:]
|
|
||||||
elif phone[0] == '+' and phone[1] == '0':
|
|
||||||
phone = phone[0] + '966' + phone[2:]
|
|
||||||
elif phone[0] == '0' and phone[1] == '5':
|
|
||||||
phone = '+966' + phone[1:]
|
|
||||||
elif phone[0:2] == '00': # 00966555555555
|
|
||||||
if phone[2:5] == '966':
|
|
||||||
phone = '+' + '966' + phone[5:]
|
|
||||||
elif phone[0] == '0': # 0966555555555
|
|
||||||
if phone[1:4] == '966':
|
|
||||||
phone = '+' + '966' + phone[4:]
|
|
||||||
else:
|
|
||||||
if phone[0:3] == '966':
|
|
||||||
phone = '+' + phone
|
|
||||||
else:
|
|
||||||
phone = '+' + '966' + phone
|
|
||||||
return phone
|
|
||||||
|
|
||||||
|
|
||||||
class SaleOrder(models.Model):
|
class SaleOrder(models.Model):
|
||||||
_inherit = 'sale.order'
|
_name = 'sale.order'
|
||||||
|
_inherit = ['sale.order', 'phone.validation.mixin']
|
||||||
|
|
||||||
done_with_quick_donation = fields.Boolean(default=False)
|
done_with_quick_donation = fields.Boolean(default=False)
|
||||||
order_mobile_number = fields.Char("Donor Number")
|
order_mobile_number = fields.Char("Donor Number")
|
||||||
|
|
@ -39,7 +16,18 @@ class SaleOrder(models.Model):
|
||||||
first_receiver_number = fields.Char("Receiver Number", compute="_compute_receiver_details", store=True)
|
first_receiver_number = fields.Char("Receiver Number", compute="_compute_receiver_details", store=True)
|
||||||
first_receiver_name = fields.Char("Receiver Name", compute="_compute_receiver_details", store=True)
|
first_receiver_name = fields.Char("Receiver Name", compute="_compute_receiver_details", store=True)
|
||||||
cart_recovery_sms_sent = fields.Boolean('Cart recovery sms already sent')
|
cart_recovery_sms_sent = fields.Boolean('Cart recovery sms already sent')
|
||||||
|
is_first_time = fields.Boolean('First Time Donation')
|
||||||
|
|
||||||
|
def write(self, vals):
|
||||||
|
if 'order_mobile_number' in vals:
|
||||||
|
vals['order_mobile_number'] = self.phone_format(vals['order_mobile_number'])
|
||||||
|
numbers = set(self.search([('state', '=', 'sale'), ('id', 'not in', self.ids)]).mapped('order_mobile_number'))
|
||||||
|
if vals['order_mobile_number'] in numbers:
|
||||||
|
vals['is_first_time'] = False
|
||||||
|
else:
|
||||||
|
vals['is_first_time'] = True
|
||||||
|
return super().write(vals)
|
||||||
|
|
||||||
def get_sale_order_portal_url(self):
|
def get_sale_order_portal_url(self):
|
||||||
for sale in self:
|
for sale in self:
|
||||||
sale.sale_order_portal_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + sale.get_portal_url()
|
sale.sale_order_portal_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + sale.get_portal_url()
|
||||||
|
|
@ -69,7 +57,7 @@ class SaleOrder(models.Model):
|
||||||
'product_id': int(i.get('product_id')),
|
'product_id': int(i.get('product_id')),
|
||||||
'donated_amount': float(i.get('donated_amount')),
|
'donated_amount': float(i.get('donated_amount')),
|
||||||
'donator_name': i.get('donator_name'),
|
'donator_name': i.get('donator_name'),
|
||||||
'donator_mobile_number': check_mobile_number_validation(i.get('donator_mobile_number')).replace('+', '')
|
'donator_mobile_number': self.phone_format(i.get('donator_mobile_number'))
|
||||||
}))
|
}))
|
||||||
gift_sender_name = i.get("gift_sender_name")
|
gift_sender_name = i.get("gift_sender_name")
|
||||||
gift_sender_mobile = i.get("gift_sender_mobile")
|
gift_sender_mobile = i.get("gift_sender_mobile")
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ class SaleReport(models.Model):
|
||||||
first_receiver_name = fields.Char("Receiver Name", readonly=True)
|
first_receiver_name = fields.Char("Receiver Name", readonly=True)
|
||||||
order_mobile_number = fields.Char("Donor Number", readonly=True)
|
order_mobile_number = fields.Char("Donor Number", readonly=True)
|
||||||
order_name = fields.Char("Donor Name", readonly=True)
|
order_name = fields.Char("Donor Name", readonly=True)
|
||||||
|
is_first_time = fields.Boolean("First Time Donation", readonly=True)
|
||||||
|
|
||||||
def _select_additional_fields(self, fields):
|
def _select_additional_fields(self, fields):
|
||||||
fields['is_gift'] = ", s.is_gift"
|
fields['is_gift'] = ", s.is_gift"
|
||||||
|
|
@ -17,10 +18,11 @@ class SaleReport(models.Model):
|
||||||
fields['first_receiver_name'] = ", s.first_receiver_name"
|
fields['first_receiver_name'] = ", s.first_receiver_name"
|
||||||
fields['order_mobile_number'] = ", s.order_mobile_number"
|
fields['order_mobile_number'] = ", s.order_mobile_number"
|
||||||
fields['order_name'] = ", s.order_name"
|
fields['order_name'] = ", s.order_name"
|
||||||
|
fields['is_first_time'] = ", s.is_first_time"
|
||||||
return super()._select_additional_fields(fields)
|
return super()._select_additional_fields(fields)
|
||||||
|
|
||||||
def _group_by_sale(self, groupby=''):
|
def _group_by_sale(self, groupby=''):
|
||||||
res = super()._group_by_sale(groupby)
|
res = super()._group_by_sale(groupby)
|
||||||
res += """, s.is_gift, s.first_receiver_number,s.first_receiver_name,s.order_mobile_number,s.order_name"""
|
res += """, s.is_gift, s.first_receiver_number,s.first_receiver_name,s.order_mobile_number,s.order_name,s.is_first_time"""
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
<xpath expr="//field[@name='partner_id']" position="before">
|
<xpath expr="//field[@name='partner_id']" position="before">
|
||||||
<field name="order_name" />
|
<field name="order_name" />
|
||||||
<field name="order_mobile_number" />
|
<field name="order_mobile_number" />
|
||||||
|
<field name="is_first_time" readonly="1" />
|
||||||
<field name="done_with_quick_donation" readonly="1" />
|
<field name="done_with_quick_donation" readonly="1" />
|
||||||
<field name="is_gift" string="Order Contains Gift?" />
|
<field name="is_gift" string="Order Contains Gift?" />
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue