From c3354d9ee054bce0e676f5b3814e1de66d8f44d7 Mon Sep 17 00:00:00 2001 From: zainab8585 Date: Mon, 12 Aug 2024 09:06:14 +0200 Subject: [PATCH] [UPDATE]UPDATE --- .../dev_membership/models/dev_membership.py | 67 ++++--------------- .../dev_membership/models/membershib_level.py | 1 + .../dev_membership/models/product_template.py | 20 +----- .../models/res_config_settings.py | 17 +---- .../dev_membership/models/res_partner.py | 22 +----- .../dev_membership/views/dev_membership.xml | 1 + .../dev_membership/views/membership_level.xml | 4 +- .../dev_membership/views/partner_extended.xml | 20 ++---- .../dev_membership/views/product_template.xml | 2 + 9 files changed, 32 insertions(+), 122 deletions(-) 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 @@ + +