diff --git a/odex25_sales/dev_membership/models/dev_membership.py b/odex25_sales/dev_membership/models/dev_membership.py
index 66631765f..8bc12bb3b 100644
--- a/odex25_sales/dev_membership/models/dev_membership.py
+++ b/odex25_sales/dev_membership/models/dev_membership.py
@@ -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:
diff --git a/odex25_sales/dev_membership/models/membershib_level.py b/odex25_sales/dev_membership/models/membershib_level.py
index ce1473083..0e8de33be 100644
--- a/odex25_sales/dev_membership/models/membershib_level.py
+++ b/odex25_sales/dev_membership/models/membershib_level.py
@@ -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)
diff --git a/odex25_sales/dev_membership/models/product_template.py b/odex25_sales/dev_membership/models/product_template.py
index 6e11c3257..fc7c57235 100644
--- a/odex25_sales/dev_membership/models/product_template.py
+++ b/odex25_sales/dev_membership/models/product_template.py
@@ -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'
)
diff --git a/odex25_sales/dev_membership/models/res_config_settings.py b/odex25_sales/dev_membership/models/res_config_settings.py
index 3575f60d3..25d9f4896 100644
--- a/odex25_sales/dev_membership/models/res_config_settings.py
+++ b/odex25_sales/dev_membership/models/res_config_settings.py
@@ -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)
diff --git a/odex25_sales/dev_membership/models/res_partner.py b/odex25_sales/dev_membership/models/res_partner.py
index 04d8d0f6c..2835fa776 100644
--- a/odex25_sales/dev_membership/models/res_partner.py
+++ b/odex25_sales/dev_membership/models/res_partner.py
@@ -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:
diff --git a/odex25_sales/dev_membership/views/dev_membership.xml b/odex25_sales/dev_membership/views/dev_membership.xml
index b417efc4b..df97a64b2 100644
--- a/odex25_sales/dev_membership/views/dev_membership.xml
+++ b/odex25_sales/dev_membership/views/dev_membership.xml
@@ -20,6 +20,7 @@
+
diff --git a/odex25_sales/dev_membership/views/membership_level.xml b/odex25_sales/dev_membership/views/membership_level.xml
index c983de070..8781f1bf8 100644
--- a/odex25_sales/dev_membership/views/membership_level.xml
+++ b/odex25_sales/dev_membership/views/membership_level.xml
@@ -25,7 +25,9 @@
-
+
+
+
diff --git a/odex25_sales/dev_membership/views/partner_extended.xml b/odex25_sales/dev_membership/views/partner_extended.xml
index a7e116ea6..6f4ee3fc4 100644
--- a/odex25_sales/dev_membership/views/partner_extended.xml
+++ b/odex25_sales/dev_membership/views/partner_extended.xml
@@ -162,29 +162,23 @@
res.partner
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/odex25_sales/dev_membership/views/product_template.xml b/odex25_sales/dev_membership/views/product_template.xml
index a48e974b8..b852cc206 100644
--- a/odex25_sales/dev_membership/views/product_template.xml
+++ b/odex25_sales/dev_membership/views/product_template.xml
@@ -50,6 +50,8 @@
+
+