[UPDATE]UPDATE

This commit is contained in:
zainab8585 2024-08-12 09:06:14 +02:00
parent 469ea3c834
commit c3354d9ee0
9 changed files with 32 additions and 122 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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'
)

View File

@ -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)

View File

@ -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:

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>