diff --git a/odex25_donation/affiliate_management/models/res_partner_inherit.py b/odex25_donation/affiliate_management/models/res_partner_inherit.py index 11756a13b..f9b43a7e5 100644 --- a/odex25_donation/affiliate_management/models/res_partner_inherit.py +++ b/odex25_donation/affiliate_management/models/res_partner_inherit.py @@ -21,13 +21,11 @@ from odoo.exceptions import UserError import logging _logger = logging.getLogger(__name__) class ResPartnerInherit(models.Model): - _inherit = 'res.partner' - _description = "ResPartner Inherit Model" is_affiliate = fields.Boolean(default=False) 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') approved_amt = fields.Float(compute='_compute_approved_amt', string='Approved Amount') @@ -64,7 +62,8 @@ class ResPartnerInherit(models.Model): aff_prgm = None new_res_partner = None 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'): vals.update({ 'affiliate_program_id': aff_prgm diff --git a/odex25_donation/ensan_sale_management/__manifest__.py b/odex25_donation/ensan_sale_management/__manifest__.py index d2333d778..86ad5a042 100644 --- a/odex25_donation/ensan_sale_management/__manifest__.py +++ b/odex25_donation/ensan_sale_management/__manifest__.py @@ -7,7 +7,7 @@ 'website': 'https://ensan.com', 'license': 'LGPL-3', 'category': 'Sales', - 'depends': ['base', 'website_sale', 'sms'], + 'depends': ['base', 'website_sale', 'sms', 'phone_validation'], 'data': [ 'security/ir.model.access.csv', 'data/sms_data.xml', diff --git a/odex25_donation/ensan_sale_management/models/__init__.py b/odex25_donation/ensan_sale_management/models/__init__.py index 482086164..e05101533 100644 --- a/odex25_donation/ensan_sale_management/models/__init__.py +++ b/odex25_donation/ensan_sale_management/models/__init__.py @@ -4,3 +4,5 @@ from . import sale_report from . import res_config_settings from . import sms_composer from . import website +from . import res_partner +from . import phone_validation_mixin diff --git a/odex25_donation/ensan_sale_management/models/phone_validation_mixin.py b/odex25_donation/ensan_sale_management/models/phone_validation_mixin.py new file mode 100644 index 000000000..88b470e3b --- /dev/null +++ b/odex25_donation/ensan_sale_management/models/phone_validation_mixin.py @@ -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('+', '') \ No newline at end of file diff --git a/odex25_donation/ensan_sale_management/models/res_partner.py b/odex25_donation/ensan_sale_management/models/res_partner.py new file mode 100644 index 000000000..cd2352e13 --- /dev/null +++ b/odex25_donation/ensan_sale_management/models/res_partner.py @@ -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 + diff --git a/odex25_donation/ensan_sale_management/models/sale_order.py b/odex25_donation/ensan_sale_management/models/sale_order.py index cf3676764..af69918a8 100644 --- a/odex25_donation/ensan_sale_management/models/sale_order.py +++ b/odex25_donation/ensan_sale_management/models/sale_order.py @@ -1,34 +1,11 @@ from odoo import models, fields, api, _ from odoo.exceptions import UserError, ValidationError from odoo.tools.json import scriptsafe as json_scriptsafe - -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 - +from odoo.addons.phone_validation.tools import phone_validation class SaleOrder(models.Model): - _inherit = 'sale.order' + _name = 'sale.order' + _inherit = ['sale.order', 'phone.validation.mixin'] done_with_quick_donation = fields.Boolean(default=False) 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_name = fields.Char("Receiver Name", compute="_compute_receiver_details", store=True) 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): for sale in self: 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')), 'donated_amount': float(i.get('donated_amount')), '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_mobile = i.get("gift_sender_mobile") diff --git a/odex25_donation/ensan_sale_management/models/sale_report.py b/odex25_donation/ensan_sale_management/models/sale_report.py index 22d8ba215..887851922 100644 --- a/odex25_donation/ensan_sale_management/models/sale_report.py +++ b/odex25_donation/ensan_sale_management/models/sale_report.py @@ -10,6 +10,7 @@ class SaleReport(models.Model): first_receiver_name = fields.Char("Receiver Name", readonly=True) order_mobile_number = fields.Char("Donor Number", 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): fields['is_gift'] = ", s.is_gift" @@ -17,10 +18,11 @@ class SaleReport(models.Model): fields['first_receiver_name'] = ", s.first_receiver_name" fields['order_mobile_number'] = ", s.order_mobile_number" fields['order_name'] = ", s.order_name" + fields['is_first_time'] = ", s.is_first_time" return super()._select_additional_fields(fields) def _group_by_sale(self, 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 \ No newline at end of file diff --git a/odex25_donation/ensan_sale_management/views/sale_order_views.xml b/odex25_donation/ensan_sale_management/views/sale_order_views.xml index cbf527405..b95de3dde 100644 --- a/odex25_donation/ensan_sale_management/views/sale_order_views.xml +++ b/odex25_donation/ensan_sale_management/views/sale_order_views.xml @@ -9,6 +9,7 @@ +