# -*- coding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution # Copyright (C) 2015 DevIntelle Consulting Service Pvt.Ltd (). # # For Module Support : devintelle@gmail.com or Skype : devintelle # ############################################################################## from odoo import fields, models, api from datetime import datetime class PartnerExtended(models.Model): _inherit = 'res.partner' 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('membership.level',string='Membrship 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') memebership_status = fields.Char('Membership Status', compute='check_memebership_status') 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',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,readonly=1,related='active_membership_id.product_id') gender = fields.Selection( selection=[("male", "Male"), ("female", "Female")], default="male",string='Gender' ) # todo start @api.depends('birth_date') def _compute_age(self): for rec in self: if rec.birth_date: rec.age = (datetime.today().year-rec.birth_date.year) def check_active_membership(self): for partner in self: partner.active_membership_id = False partner.is_membership_expire = False if partner.membership_count > 0: c_date = datetime.now().date() membership_id = self.env['dev.membership'].sudo().search([('partner_id', '=', partner.id), ('state', '=', 'active'), ('from_date', '<=', c_date), ('to_date', '>=', c_date)], limit=1) if membership_id: partner.active_membership_id = membership_id and membership_id.id or False 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.product_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)]) rec.membership_count = membership_count def view_membership(self): ctx = dict(create=False, search_default_state=1) return { 'type': 'ir.actions.act_window', 'name': 'Membership', 'res_model': 'dev.membership', 'domain': [('partner_id', '=', self.id)], 'view_mode': 'tree,form', 'target': 'current', 'context': ctx, }