Merge pull request #4710 from expsa/samir-aladawi-change-partner-account-type-logic
Samir aladawi change partner account type logic
This commit is contained in:
commit
0d43289b52
|
|
@ -52,7 +52,7 @@ class CreatePortalAccount(http.Controller):
|
|||
'name': f'{first_name} {second_name}',
|
||||
'email': email,
|
||||
'phone': formatted_phone,
|
||||
'account_type': account_type,
|
||||
# 'account_type': account_type,
|
||||
}
|
||||
partner = Partner.create(partner_vals)
|
||||
|
||||
|
|
@ -65,6 +65,9 @@ class CreatePortalAccount(http.Controller):
|
|||
'active': True,
|
||||
})
|
||||
|
||||
# Set partner account_type
|
||||
partner.set_partner_account_type(account_type)
|
||||
|
||||
# Update user fields similar to create_user and original flow
|
||||
user.sudo().write({
|
||||
'password': password,
|
||||
|
|
|
|||
|
|
@ -492,7 +492,8 @@ class GrantBenefitProfile(models.Model):
|
|||
exception_start_date = fields.Datetime(string='Exception Start Date')
|
||||
exception_end_date = fields.Datetime(string='Exception End Date')
|
||||
|
||||
sponsor_id = fields.Many2one('res.partner', string='Sponsor',domain="[('account_type','=','sponsor')]")
|
||||
# sponsor_id = fields.Many2one('res.partner', string='Sponsor',domain="[('account_type','=','sponsor')]")
|
||||
sponsor_id = fields.Many2one('res.partner', string='Sponsor',domain="[('is_sponsor_portal', '=', True)]")
|
||||
|
||||
family_monthly_income = fields.Float(string="Family Monthly Income", compute='_get_family_monthly_values')
|
||||
family_monthly_meals = fields.Float(string="Family Monthly Meals", compute='_get_family_monthly_values')
|
||||
|
|
@ -2068,7 +2069,8 @@ class GrantBenefitProfile(models.Model):
|
|||
'name': self.name,
|
||||
'email': self.email,
|
||||
'phone': self.phone,
|
||||
'account_type':'family',
|
||||
# 'account_type':'family',
|
||||
'is_family': True,
|
||||
'code':self.code,
|
||||
'bank_ids': [(0,0,bank_val)]
|
||||
})
|
||||
|
|
@ -2103,7 +2105,8 @@ class GrantBenefitProfile(models.Model):
|
|||
'name': self.name,
|
||||
'email': self.email,
|
||||
'phone': self.phone,
|
||||
'account_type': 'family',
|
||||
# 'account_type': 'family',
|
||||
'is_family': True,
|
||||
'code': self.code,
|
||||
})
|
||||
if bank_val['acc_number'] and bank_val['acc_holder_name'] and bank_val['bank_id']:
|
||||
|
|
|
|||
|
|
@ -228,7 +228,8 @@ class FamilyMemberProfile(models.Model):
|
|||
selection=[('temporarily_suspend', 'Temporarily Suspended'), ('suspend', 'Suspend')], string="Suspend Type")
|
||||
suspend_method = fields.Selection(selection=[('manual', 'Manual'), ('auto', 'Auto')], string="Suspend Method",default='auto')
|
||||
is_member_workflow = fields.Boolean('Is Member Workflow?')
|
||||
sponsor_id = fields.Many2one('res.partner', string='Sponsor Partner',domain="[('account_type','=','sponsor')]")
|
||||
# sponsor_id = fields.Many2one('res.partner', string='Sponsor Partner',domain="[('account_type','=','sponsor')]")
|
||||
sponsor_id = fields.Many2one('res.partner', string='Sponsor Partner',domain="[('is_sponsor_portal', '=', True)]")
|
||||
sponsor_related_id = fields.Many2one('takaful.sponsor', string='Sponsor')
|
||||
sponsorship_id = fields.Many2one('takaful.sponsorship', string='Sponsorship')
|
||||
required_attach = fields.Selection(selection=[('true', 'True'), ('false', 'False')], compute='get_required_attach',store=True,string='Member Required Attach')
|
||||
|
|
@ -436,6 +437,7 @@ class FamilyMemberProfile(models.Model):
|
|||
# 'email': self.email,
|
||||
# 'phone': self.phone,
|
||||
# 'account_type': 'benefit',
|
||||
# 'is_benefit': True,
|
||||
# 'code': self.benefit_id.code,
|
||||
# })
|
||||
|
||||
|
|
|
|||
|
|
@ -244,7 +244,8 @@ class TakafulSponsor(models.Model):
|
|||
|
||||
values.update({'lang': 'ar_001'})
|
||||
values.update({'tz': 'Asia/Riyadh'})
|
||||
values.update({'account_type':'sponsor'})
|
||||
# values.update({'account_type':'sponsor'})
|
||||
values.update({'is_sponsor_portal': True})
|
||||
if not values.get('serial_code'):
|
||||
values['serial_code'] = self.env['ir.sequence'].next_by_code('takaful.sponsor.sequence') or 'S/0000'
|
||||
|
||||
|
|
|
|||
|
|
@ -14,9 +14,13 @@ class AuthSignInHome(Home):
|
|||
if not kw.get('otp_mobile_phone'):
|
||||
data['msg'] = 'No mobile phone number provided for OTP!'
|
||||
else:
|
||||
# Get the target boolean field name for the account_type
|
||||
target_field = request.env['res.partner'].sudo().get_partner_target_account_type(kw.get('account_type'))
|
||||
|
||||
user = request.env['res.users'].sudo().search([
|
||||
('login', '=', kw.get('otp_mobile_phone')),
|
||||
('partner_id.account_type', '=', kw.get('account_type'))
|
||||
# ('partner_id.account_type', '=', kw.get('account_type'))
|
||||
('partner_id.%s' % target_field, '=', True)
|
||||
], limit=1)
|
||||
if user:
|
||||
data['status'] = True
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
'depends': ['mail', 'base', 'account'],
|
||||
'data': [
|
||||
# 'security/ir.model.access.csv',
|
||||
'data/server_action.xml',
|
||||
'views/res_city_view.xml',
|
||||
'views/config_view.xml',
|
||||
'views/bank_transfer_payment_view.xml',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="action_migrate_partner_account_type" model="ir.actions.server">
|
||||
<field name="name">Migrate Account Type to Booleans</field>
|
||||
<field name="model_id" ref="base.model_ir_actions_server"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
env['res.partner'].migrate_account_type_to_booleans()
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -28,8 +28,9 @@ msgstr ""
|
|||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_partner__account_type
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_users__account_type
|
||||
#: model_terms:ir.ui.view,arch_db:takaful_core.res_partner_data
|
||||
msgid "Account Type"
|
||||
msgstr ""
|
||||
msgstr "نوع الحساب"
|
||||
|
||||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_partner__activation_mode
|
||||
|
|
@ -988,4 +989,34 @@ msgstr ""
|
|||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_country_city__state_id
|
||||
msgid "State"
|
||||
msgstr "المحافظة"
|
||||
msgstr "المحافظة"
|
||||
|
||||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_family
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_family
|
||||
msgid "Is Family"
|
||||
msgstr "عائلة؟"
|
||||
|
||||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_sponsor_portal
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_sponsor
|
||||
msgid "Is Sponsor"
|
||||
msgstr "كافل؟"
|
||||
|
||||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_benefit
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_benefit
|
||||
msgid "Is Benefit"
|
||||
msgstr "مستفيد؟"
|
||||
|
||||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_vendor
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_vendor
|
||||
msgid "Is Vendor"
|
||||
msgstr "مورد؟"
|
||||
|
||||
#. module: takaful_core
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_partner__is_donor
|
||||
#: model:ir.model.fields,field_description:takaful_core.field_res_users__is_donor
|
||||
msgid "Is Donor"
|
||||
msgstr "متبرع؟"
|
||||
|
|
@ -9,7 +9,9 @@ from dateutil.relativedelta import relativedelta as rd
|
|||
from odoo.exceptions import UserError, ValidationError, Warning
|
||||
|
||||
import re
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
SAUDI_MOBILE_PATTERN = "(^(05|5)(5|0|3|6|4|9|1|8|7)([0-9]{7})$)"
|
||||
|
||||
|
||||
|
|
@ -51,6 +53,11 @@ class Partner(models.Model):
|
|||
('vendor', 'Vendor'),
|
||||
('donor', 'Donor')],
|
||||
required=False, )
|
||||
is_family = fields.Boolean()
|
||||
is_sponsor_portal = fields.Boolean(string='Is Sponsor')
|
||||
is_benefit = fields.Boolean()
|
||||
is_vendor = fields.Boolean()
|
||||
is_donor = fields.Boolean()
|
||||
code = fields.Char(string="Code", copy=False)
|
||||
|
||||
company_type = fields.Selection(selection_add=[('charity', _('Charity'))])
|
||||
|
|
@ -105,6 +112,45 @@ class Partner(models.Model):
|
|||
('user_id_uniq', 'unique (user_id)', 'The User Already Exist!'),
|
||||
]
|
||||
|
||||
|
||||
def get_partner_target_account_type(self, acc_type):
|
||||
# Special mappings for account_type -> boolean field names
|
||||
special_map = {
|
||||
'sponsor': 'is_sponsor_portal',
|
||||
}
|
||||
|
||||
# Determine the target boolean field name
|
||||
target_field = special_map.get(acc_type, f'is_{acc_type}')
|
||||
|
||||
return target_field
|
||||
|
||||
def set_partner_account_type(self, acc_type):
|
||||
self.ensure_one()
|
||||
|
||||
# Determine the target boolean field name
|
||||
target_field = self.get_partner_target_account_type(acc_type)
|
||||
|
||||
# Validate that acc_type is one of the selection values and field exists
|
||||
valid_types = {key for key, _ in self._fields['account_type'].selection}
|
||||
if target_field in self._fields and (acc_type in valid_types or target_field == 'is_sponsor_portal'):
|
||||
update_vals = {target_field: True}
|
||||
self.write(update_vals)
|
||||
|
||||
def migrate_account_type_to_booleans(self):
|
||||
"""
|
||||
Server action method to migrate the old `account_type` selection
|
||||
to the new `is_<type>` boolean fields for the given recordset.
|
||||
"""
|
||||
records = self.search([])
|
||||
_logger.info(f"-> Starting account type migration for {len(records)} partner(s).")
|
||||
for partner in records:
|
||||
acc_type = partner.account_type
|
||||
if not acc_type:
|
||||
continue
|
||||
partner.set_partner_account_type(acc_type)
|
||||
_logger.info("-> Partner account type migration finished.")
|
||||
return True
|
||||
|
||||
# @api.depends('father_family_name')
|
||||
# def get_partner_name(self):
|
||||
# for rec in self:
|
||||
|
|
|
|||
|
|
@ -10,12 +10,27 @@
|
|||
<xpath expr="//div/h1" position="after">
|
||||
<!-- Add your fields or attributes here -->
|
||||
<group>
|
||||
<field name="account_type" groups="odex_benefit.group_benefit_info"/>
|
||||
<!-- <field name="account_type" groups="odex_benefit.group_benefit_info"/> -->
|
||||
<field name="code" groups="odex_benefit.group_benefit_info"/>
|
||||
<field name="activation_mode" invisible="1"/>
|
||||
<field name="user_type" invisible="1"/>
|
||||
</group>
|
||||
</xpath>
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Account Type">
|
||||
<group>
|
||||
<group>
|
||||
<field name="is_family" />
|
||||
<field name="is_sponsor_portal" />
|
||||
<field name="is_benefit" />
|
||||
</group>
|
||||
<group>
|
||||
<field name="is_vendor" />
|
||||
<field name="is_donor" />
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_res_city_tree" model="ir.ui.view">
|
||||
|
|
|
|||
|
|
@ -7,11 +7,17 @@ class MyHome(CustomerPortal):
|
|||
@http.route('/my', type='http', auth="user", website=True)
|
||||
def home(self, **kw):
|
||||
partner = http.request.env['res.partner'].sudo().search([('id', '=', request.env.user.partner_id.id)], limit=1)
|
||||
# if partner.account_type == 'volunteer':
|
||||
# return request.redirect("/profile")
|
||||
# elif partner.account_type == 'benefit':
|
||||
# return request.redirect("/benefit_profile")
|
||||
# elif partner.account_type == 'sponsor':
|
||||
# return request.redirect("/sponsor_profile")
|
||||
if partner.account_type == 'volunteer':
|
||||
return request.redirect("/profile")
|
||||
elif partner.account_type == 'benefit':
|
||||
elif partner.is_benefit:
|
||||
return request.redirect("/benefit_profile")
|
||||
elif partner.account_type == 'sponsor':
|
||||
elif partner.is_sponsor_portal:
|
||||
return request.redirect("/sponsor_profile")
|
||||
else:
|
||||
# return super(AccountPortal, self).index(*args, **kw)
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
</ul>
|
||||
</li>
|
||||
<!-- <li class="dropdown" t-if="request.env.user.partner_id.account_type=='benefit'"> -->
|
||||
<li class="dropdown">
|
||||
<li class="dropdown" t-if="request.env.user.partner_id.is_benefit">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true">المستفيدين</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
|
|
@ -71,7 +71,7 @@
|
|||
</ul>
|
||||
</li>
|
||||
<!-- <li class="dropdown" t-if="request.env.user.partner_id.account_type=='sponsor'"> -->
|
||||
<li class="dropdown">
|
||||
<li class="dropdown" t-if="request.env.user.partner_id.is_sponsor_portal">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true">الكافل</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
|
|
|
|||
Loading…
Reference in New Issue