[UPDATE]UPDATE
This commit is contained in:
parent
469ea3c834
commit
c3354d9ee0
|
|
@ -20,7 +20,7 @@ class DevMembership(models.Model):
|
|||
_description = 'Dev Membership'
|
||||
_order = 'name desc'
|
||||
|
||||
membrship_level = fields.Many2one('membership.level',string='Membrship level',store=True, required=False,compute='_compute_membership_level')
|
||||
membrship_level = fields.Many2one('membership.level',string='Membrship level',store=True,required=False,compute='_compute_membership_level')
|
||||
name = fields.Char(string='Name', readonly=1)
|
||||
date = fields.Date(string="Request Date", tracking=3, required=1, default=lambda self: datetime.now().date())
|
||||
from_date = fields.Date(string="Membership From Date", tracking=3, required=1, default=lambda *a: (datetime.now().date()))
|
||||
|
|
@ -37,6 +37,7 @@ class DevMembership(models.Model):
|
|||
duration = fields.Integer(string="Duration",)
|
||||
description = fields.Text(string="Description", related="product_id.description", readonly=False)
|
||||
interval = fields.Selection(string="Interval", related="product_id.interval")
|
||||
payment_state = fields.Selection(string='Payment State',related='invoice_id.payment_state')
|
||||
|
||||
state = fields.Selection(string="State", selection=([('draft', 'Draft'),
|
||||
('confirm', 'Confirm'),
|
||||
|
|
@ -49,24 +50,8 @@ class DevMembership(models.Model):
|
|||
user_id = fields.Many2one('res.users', string='Resposible', default=lambda self:self.env.user)
|
||||
cancel_reasone = fields.Many2one('cancellation.reason',string='Cancel Membership Reason')
|
||||
|
||||
# subscription_years = fields.Integer(string='Subscription Years', compute='_compute_subscription_years', store=True)
|
||||
|
||||
# @api.depends('partner_id')
|
||||
# def _compute_subscription_years(self):
|
||||
# for record in self:
|
||||
# total_years = 0
|
||||
# memberships = self.env['dev.membership'].search([
|
||||
# ('partner_id', '=', record.partner_id.id),
|
||||
# ('state', '=', 'active')
|
||||
# ])
|
||||
# for membership in memberships:
|
||||
# if membership.from_date and membership.to_date:
|
||||
# from_date = fields.Date.from_string(membership.from_date)
|
||||
# to_date = fields.Date.from_string(membership.to_date)
|
||||
# years_difference = (to_date - from_date).days / 365.25 # حساب الفرق بالسنوات
|
||||
# total_years += years_difference
|
||||
#
|
||||
# record.subscription_years = total_years
|
||||
|
||||
@api.onchange('product_id')
|
||||
def _onchange_membership_type(self):
|
||||
if self.product_id:
|
||||
|
|
@ -159,6 +144,8 @@ class DevMembership(models.Model):
|
|||
raise ValidationError(_('Please Create Membership Invoice'))
|
||||
if self.invoice_id.payment_state not in ['paid','in_payment'] and not self.is_free:
|
||||
raise ValidationError(_('Membership Invoice is not paid.\nPlease Paid membership invoice and active the membership.'))
|
||||
else:
|
||||
self.invoice_id = self.invoice_id.payment_state
|
||||
self.state = 'active'
|
||||
self.partner_id.product_id = self.product_id.id
|
||||
if not self.partner_id.join_date:
|
||||
|
|
@ -302,47 +289,19 @@ class DevMembership(models.Model):
|
|||
invoice_id = self.env['account.move'].create(vals)
|
||||
self.invoice_id = invoice_id and invoice_id.id or False
|
||||
|
||||
@api.depends('membership_fees')
|
||||
@api.depends('membership_fees','duration')
|
||||
def _compute_membership_level(self):
|
||||
for record in self:
|
||||
total_fees = 0
|
||||
memberships = self.env['dev.membership'].search([
|
||||
('partner_id', '=', record.partner_id.id),
|
||||
('state', '=', 'active')
|
||||
])
|
||||
total_fees = sum(membership.membership_fees for membership in memberships)
|
||||
|
||||
memberships = self.env['dev.membership'].search([('partner_id', '=', record.partner_id.id),('payment_state', 'in', ['paid','in_payment'])])
|
||||
total_fees = sum(membership.membership_fees for membership in memberships)+record.membership_fees
|
||||
total_duration = sum(membership.duration for membership in memberships)+record.duration
|
||||
# البحث عن مستوى العضوية بناءً على إجمالي الرسوم
|
||||
level_by_fees = self.env['membership.level'].search([
|
||||
('min', '<=', total_fees),
|
||||
('max', '>=', total_fees)
|
||||
], limit=1)
|
||||
|
||||
# البحث عن مستوى العضوية بناءً على عدد السنوات (≥ 3 سنوات)
|
||||
level_by_years = self.env['membership.level'].search([
|
||||
('years', '>=', 3)
|
||||
], limit=1)
|
||||
total_duration = sum(membership.duration for membership in memberships)
|
||||
# تعيين مستوى العضوية
|
||||
# if level_by_years:
|
||||
#
|
||||
# record.membrship_level_id = level_by_years.id
|
||||
if level_by_fees:
|
||||
record.membrship_level = level_by_fees.id
|
||||
if total_duration>=level_by_years.years and total_fees<=level_by_years.min:
|
||||
record.membrship_level = level_by_fees.id
|
||||
|
||||
# level = self.env['membership.level'].search(
|
||||
# ['|',
|
||||
# '&', ('min', '<=', total_fees), ('max', '>=', total_fees),
|
||||
# ('years', '<=', total_duration)],
|
||||
# limit=1
|
||||
# )
|
||||
#
|
||||
# if level:
|
||||
# record.membrship_level = level.id
|
||||
# else:
|
||||
# record.membrship_level = False
|
||||
('max', '>=', total_fees),('years', '<=',total_duration)
|
||||
],order='sequence desc',limit=1)
|
||||
if level_by_fees :
|
||||
record.membrship_level = level_by_fees
|
||||
|
||||
def view_invoice(self):
|
||||
if self.invoice_id:
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ from odoo import models,api, fields,_
|
|||
class MembershipLevel(models.Model):
|
||||
_name = 'membership.level'
|
||||
_description = 'Membership Level'
|
||||
_order='sequence'
|
||||
|
||||
name = fields.Char(string='Name', required=True)
|
||||
years = fields.Integer(string='NO Of Years Subscription.', required=True)
|
||||
|
|
|
|||
|
|
@ -13,30 +13,12 @@ from odoo import fields,api, models,_
|
|||
|
||||
class ProductTemplate(models.Model):
|
||||
_inherit = "product.template"
|
||||
_order='sequence_no'
|
||||
|
||||
type_no = fields.Char("Number", tracking=True,copy=False)
|
||||
sequence_no = fields.Integer(string="Sequence", help="Define the display order")
|
||||
company_id = fields.Many2one('res.company', string='Company', readonly=True,
|
||||
default=lambda self: self.env.company)
|
||||
|
||||
# @api.model
|
||||
# def _get_next_projectno(self):
|
||||
# next_sequence = "/ "
|
||||
# sequence = self.env['ir.sequence'].search(
|
||||
# ['|', ('company_id', '=', self.env.company[0].id), ('company_id', '=', False),
|
||||
# ('code', '=', 'seq.product.template')], limit=1)
|
||||
# if sequence:
|
||||
# next_sequence = sequence.get_next_char(sequence.number_next_actual)
|
||||
# return next_sequence
|
||||
|
||||
# @api.model
|
||||
# def create(self, vals):
|
||||
# company_id = vals.get('company_id', self.default_get(['company_id'])['company_id'])
|
||||
# self_comp = self.with_company(company_id)
|
||||
# if not vals.get('type_no', False):
|
||||
# vals['type_no'] = self_comp.env['ir.sequence'].next_by_code('seq.product.template') or '/'
|
||||
# return super().create(vals)
|
||||
|
||||
gender = fields.Selection(
|
||||
selection=[("male", "Male"), ("female", "Female")], default="male",string='Gender'
|
||||
)
|
||||
|
|
|
|||
|
|
@ -57,25 +57,10 @@ class ResConfigSettings(models.TransientModel):
|
|||
class CancellReason(models.Model):
|
||||
_name = 'cancellation.reason'
|
||||
_description = 'Cancellation Reason'
|
||||
_order = 'sequence'
|
||||
|
||||
name = fields.Char(string='Reasone of Cancellation')
|
||||
reasone_no = fields.Char("Number",tracking=True,copy=False)
|
||||
sequence = fields.Integer(string="Sequence", help="Define the display order")
|
||||
company_id = fields.Many2one('res.company', string='Company', readonly=True,default=lambda self: self.env.company)
|
||||
|
||||
# @api.model
|
||||
# def _get_next_reasone_no(self):
|
||||
# sequence = self.env['ir.sequence'].search(
|
||||
# ['|', ('company_id', '=', self.env.company.id), ('company_id', '=', False),
|
||||
# ('code', '=', 'seq.cancellation.reason')], limit=1)
|
||||
# if sequence:
|
||||
# return sequence.next_by_code('seq.cancellation.reason')
|
||||
# return '/'
|
||||
|
||||
# @api.model
|
||||
# def create(self, vals):
|
||||
# company_id = vals.get('company_id', self.default_get(['company_id'])['company_id'])
|
||||
# self_comp = self.with_company(company_id)
|
||||
# if not vals.get('reasone_no', False):
|
||||
# vals['reasone_no'] = self_comp.env['ir.sequence'].next_by_code('seq.cancellation.reason') or '/'
|
||||
# return super().create(vals)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class PartnerExtended(models.Model):
|
|||
is_member = fields.Boolean(string='Is Member')
|
||||
membership_count = fields.Integer(string="Membership Count", compute="_get_membership_count")
|
||||
active_membership_id = fields.Many2one('dev.membership', string='Membership', compute='check_active_membership')
|
||||
membrship_level = fields.Many2one(string='Mmembrship level', required=False,related='active_membership_id.membrship_level')
|
||||
membrship_level = fields.Many2one('membership.level',string='Mmembrship level',store=True, required=False,readonly=1)
|
||||
|
||||
nationality_id = fields.Many2one('res.country', string="Nationality")
|
||||
is_membership_expire = fields.Boolean('Expire Membership',store=True, compute='check_active_membership')
|
||||
|
|
@ -26,10 +26,10 @@ class PartnerExtended(models.Model):
|
|||
membrship_no = fields.Char('Membership Number')
|
||||
birth_date = fields.Date(string='Birth Date')
|
||||
join_date = fields.Date(string='Join Date')
|
||||
memebership_end_date = fields.Date(string='Memebership End Date',store=True,related='active_membership_id.to_date')
|
||||
memebership_end_date = fields.Date(string='Memebership End Date',readonly=1,store=True,related='active_membership_id.to_date')
|
||||
age = fields.Integer(string='Age',store=True,compute='_compute_age')
|
||||
employer = fields.Char(string='Employer',)
|
||||
product_id = fields.Many2one('product.product', string="Membership Type",store=True,related='active_membership_id.product_id')
|
||||
product_id = fields.Many2one('product.product', string="Membership Type",store=True,readonly=1,related='active_membership_id.product_id')
|
||||
gender = fields.Selection(
|
||||
selection=[("male", "Male"), ("female", "Female")], default="male",string='Gender'
|
||||
)
|
||||
|
|
@ -40,22 +40,6 @@ class PartnerExtended(models.Model):
|
|||
if rec.birth_date:
|
||||
rec.age = (datetime.today().year-rec.birth_date.year)
|
||||
|
||||
# @api.depends('active_membership_id')
|
||||
def _compute_info(self):
|
||||
for rec in self:
|
||||
if rec.active_membership_id:
|
||||
print('if in.....')
|
||||
# def check_memebership_status(self):
|
||||
# for partner in self:
|
||||
# partner.memebership_status = ''
|
||||
# if partner.membership_count == 0:
|
||||
# partner.memebership_status = 'No Membership'
|
||||
# else:
|
||||
# if partner.is_membership_expire:
|
||||
# partner.memebership_status = 'Membership Expire'
|
||||
# else:
|
||||
# if partner.active_membership_id:
|
||||
# partner.memebership_status = 'Membership : ' + partner.active_membership_id.name
|
||||
|
||||
def check_active_membership(self):
|
||||
for partner in self:
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
<field name="to_date"/>
|
||||
<field name="state" widget="badge" decoration-success="state in ['active', 'confirm']"
|
||||
decoration-danger="state == 'expire'" decoration-warning="state == 'draft'"/>
|
||||
<field name="payment_state" widget="badge" decoration-success="payment_state in ['paid','in_payment']"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@
|
|||
<field name="years"/>
|
||||
<field name="min"/>
|
||||
<field name="max"/>
|
||||
<field invisible="1" name="company_id"/>
|
||||
<field name="sequence" invisible="1"/>
|
||||
|
||||
<field invisible="1" name="company_id"/>
|
||||
|
||||
<field widget='color' name="color"/>
|
||||
</group>
|
||||
|
|
|
|||
|
|
@ -162,29 +162,23 @@
|
|||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
|
||||
<xpath expr="//field[@name='vat']" position="before">
|
||||
<field name="gender"/>
|
||||
<field name="nationality_id"/>
|
||||
<field name="birth_date"/>
|
||||
<field name="age"/>
|
||||
<field name="membrship_level"/>
|
||||
<field name="membrship_no"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='function']" position="after">
|
||||
<field name="employer"/>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//page" position="after">
|
||||
<page group="dev_membership.group_membership_user" name="memebership" string='Memebership'>
|
||||
<group>
|
||||
<group name="memeber">
|
||||
<field name="gender"/>
|
||||
<field name="nationality_id"/>
|
||||
<field name="birth_date"/>
|
||||
<field name="age"/>
|
||||
<field name="is_member"/>
|
||||
<field name="product_id"/>
|
||||
|
||||
</group>
|
||||
<group name="other">
|
||||
<field name="join_date"/>
|
||||
<field name="employer"/>
|
||||
<field name="membrship_level"/>
|
||||
<field name="membrship_no"/>
|
||||
<field name="memebership_end_date"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@
|
|||
<group>
|
||||
<field name="default_code"/>
|
||||
<field name="categ_id"/>
|
||||
<field name="sequence_no" invisible="1"/>
|
||||
|
||||
<field name="active"/>
|
||||
<field invisible="1" name="company_id"/>
|
||||
</group>
|
||||
|
|
|
|||
Loading…
Reference in New Issue