diff --git a/odex25_sales/dev_membership/data/sequence.xml b/odex25_sales/dev_membership/data/sequence.xml index 37ace0587..15bbea5de 100644 --- a/odex25_sales/dev_membership/data/sequence.xml +++ b/odex25_sales/dev_membership/data/sequence.xml @@ -5,7 +5,33 @@ For Module Support : devintelle@gmail.com or Skype : devintelle --> + + + Membership Type Number + seq.product.template + MEMT%(y)s- + 5 + + + + Membership resonse Number + se.cancellation.reason + MEMR%(y)s- + 5 + + + + + Membership level Number + seq.membership.level + MEML%(y)s- + 5 + + + + + seq.dev.membership seq.dev.membership diff --git a/odex25_sales/dev_membership/models/dev_membership.py b/odex25_sales/dev_membership/models/dev_membership.py index 6a18374a1..66631765f 100644 --- a/odex25_sales/dev_membership/models/dev_membership.py +++ b/odex25_sales/dev_membership/models/dev_membership.py @@ -148,15 +148,12 @@ class DevMembership(models.Model): if self.product_id.nationality_ids: if self.partner_id.nationality_id not in self.product_id.nationality_ids: raise ValidationError(_("The member's nationality does not meet the membership requirements")) - if self.partner_id.age < 18: - raise ValidationError(_('The member must be at least 18 years old.')) + if self.product_id.age!=0 and self.partner_id.age !=self.product_id.age: + raise ValidationError(_('The member must be at least %s years old.')%self.product_id.age) if self.partner_id.gender != self.product_id.gender and self.product_id.gender != False: - raise ValidationError(_('Membership is only allowed for %s') % self.product_id.gender) - - - - + raise ValidationError(_('Membership is only %s allowed') % self.product_id.gender) self.state = 'confirm' + def action_active_membership(self): if not self.invoice_id and not self.is_free: raise ValidationError(_('Please Create Membership Invoice')) @@ -166,6 +163,8 @@ class DevMembership(models.Model): self.partner_id.product_id = self.product_id.id if not self.partner_id.join_date: self.partner_id.join_date = self.from_date + if not self.partner_id.memebership_end_date: + self.partner_id.memebership_end_date = self.to_date def action_cancel_membership(self): self.state = 'cancel' diff --git a/odex25_sales/dev_membership/models/membershib_level.py b/odex25_sales/dev_membership/models/membershib_level.py index 4af6143e6..45a31b938 100644 --- a/odex25_sales/dev_membership/models/membershib_level.py +++ b/odex25_sales/dev_membership/models/membershib_level.py @@ -9,3 +9,25 @@ class MembershipLevel(models.Model): min = fields.Integer(string='Maximum', required=True) max = fields.Integer(string='Maximum', required=True) color = fields.Char(string='Membership Card Color') + level_no = fields.Char("Number", default=lambda self: self._get_next_levelno(), tracking=True,copy=False) + sequence = fields.Integer(string="Sequence", help="Define the display order") + + + @api.model + def _get_next_levelno(self): + next_sequence = "/ " + sequence = self.env['ir.sequence'].search( + ['|', ('company_id', '=', self.env.company[0].id), ('company_id', '=', False), + ('code', '=', 'seq.membership.level')], 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('level_no', False): + vals['level_no'] = self_comp.env['ir.sequence'].next_by_code('seq.membership.level') or '/' + return super().create(vals) + diff --git a/odex25_sales/dev_membership/models/product_template.py b/odex25_sales/dev_membership/models/product_template.py index 031346608..e1bac225a 100644 --- a/odex25_sales/dev_membership/models/product_template.py +++ b/odex25_sales/dev_membership/models/product_template.py @@ -14,6 +14,27 @@ from odoo import fields,api, models,_ class ProductTemplate(models.Model): _inherit = "product.template" + type_no = fields.Char("Number", default=lambda self: self._get_next_projectno(), tracking=True,copy=False) + sequence_no = fields.Integer(string="Sequence", help="Define the display order") + + @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 0f548b8f1..505160c27 100644 --- a/odex25_sales/dev_membership/models/res_config_settings.py +++ b/odex25_sales/dev_membership/models/res_config_settings.py @@ -59,3 +59,26 @@ class CancellReason(models.Model): _description = 'Cancellation Reason' name = fields.Char(string='Reasone of Cancellation') + reasone_no = fields.Char("Number", default=lambda self: self._get_next_reasone_no(), tracking=True,copy=False) + sequence = fields.Integer(string="Sequence", help="Define the display order") + + + @api.model + def _get_next_reasone_no(self): + next_sequence = "/ " + sequence = self.env['ir.sequence'].search( + ['|', ('company_id', '=', self.env.company[0].id), ('company_id', '=', False), + ('code', '=', 'seq.cancellation.reason')], 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('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 0ccff0170..9cd8ec49a 100644 --- a/odex25_sales/dev_membership/models/res_partner.py +++ b/odex25_sales/dev_membership/models/res_partner.py @@ -44,38 +44,17 @@ class PartnerExtended(models.Model): for rec in self: if rec.active_membership_id: print('if in.....') - # todo end - 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.active_membership_id: - partner.memebership_status = 'Membership : ' + partner.active_membership_id.name - else: - # البحث عن حالة الاشتراك الأخيرة - last_membership = self.env['dev.membership'].search([('partner_id', '=', partner.id)], order='to_date desc', limit=1) - print('last_membership = ',last_membership) - if last_membership: - if last_membership.state=='draft': - partner.memebership_status = 'Membership Waitting' - elif last_membership.state=='cancel': - partner.memebership_status = 'Membership Cancelled' - elif last_membership.state=='confirm': - if not last_membership.invoice_id and not last_membership.is_free: - partner.memebership_status = 'Membership Waitting invoice' - elif last_membership.invoice_id.payment_state in ['paid','in_payment']: - partner.memebership_status = 'Membership Paid' - elif last_membership.invoice_id.payment_state not in ['paid','in_payment']: - partner.memebership_status = 'Membership Waitting Paid' -############################################################################################################################################## - # 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_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: @@ -92,6 +71,38 @@ class PartnerExtended(models.Model): else: partner.is_membership_expire = True + + # todo end + 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 + else: + # البحث عن حالة الاشتراك الأخيرة + last_membership = self.env['dev.membership'].search([('partner_id', '=', partner.id)], + order='to_date desc', limit=1) + if last_membership: + if last_membership.state == 'draft': + partner.memebership_status = 'Membership Waitting' + elif last_membership.state == 'cancel': + partner.memebership_status = 'Membership Cancelled' + elif last_membership.state == 'confirm': + if not last_membership.invoice_id and not last_membership.is_free: + partner.memebership_status = 'Membership Waitting invoice' + elif last_membership.invoice_id.payment_state in ['paid', 'in_payment']: + partner.memebership_status = 'Membership Paid' + elif last_membership.invoice_id.payment_state not in ['paid', 'in_payment']: + partner.memebership_status = 'Membership Waitting Paid' + ############################################################################################################################################## + + def _get_membership_count(self): for rec in self: membership_count = self.env['dev.membership'].search_count([('partner_id', '=', rec.id)]) @@ -107,4 +118,4 @@ class PartnerExtended(models.Model): 'view_mode': 'tree,form', 'target': 'current', 'context': ctx, - } \ No newline at end of file + } diff --git a/odex25_sales/dev_membership/views/membership_level.xml b/odex25_sales/dev_membership/views/membership_level.xml index cb8aee351..df6031bec 100644 --- a/odex25_sales/dev_membership/views/membership_level.xml +++ b/odex25_sales/dev_membership/views/membership_level.xml @@ -4,6 +4,8 @@ membership.level + + diff --git a/odex25_sales/dev_membership/views/partner_extended.xml b/odex25_sales/dev_membership/views/partner_extended.xml index 439dc2e0d..46f940ee3 100644 --- a/odex25_sales/dev_membership/views/partner_extended.xml +++ b/odex25_sales/dev_membership/views/partner_extended.xml @@ -48,6 +48,7 @@ + @@ -133,7 +134,7 @@
- +
@@ -168,7 +169,7 @@ - + @@ -189,7 +190,7 @@ True -